summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Lane <laney@debian.org>2011-06-15 16:22:22 +0100
committerIain Lane <laney@debian.org>2011-06-15 16:22:22 +0100
commit040fed94f0bcc4e9966ab31cc68d31fa48c27ee3 (patch)
tree808bd5ff78033ca1c23b8df80f55dc544aed98b7
Imported Upstream version 0.2.1
-rw-r--r--AUTHORS42
-rw-r--r--LICENSE621
-rw-r--r--Makefile.am20
-rw-r--r--Makefile.in762
-rw-r--r--NEWS42
-rw-r--r--README189
-rw-r--r--SmartIrc4net/API_CHANGE70
-rw-r--r--SmartIrc4net/CHANGELOG181
-rw-r--r--SmartIrc4net/CREDITS41
-rw-r--r--SmartIrc4net/FEATURES34
-rw-r--r--SmartIrc4net/LICENSE509
-rw-r--r--SmartIrc4net/Makefile.am14
-rw-r--r--SmartIrc4net/Makefile.in678
-rw-r--r--SmartIrc4net/README47
-rw-r--r--SmartIrc4net/SmartIrc4net.mdp64
-rw-r--r--SmartIrc4net/SmartIrc4net.mds32
-rw-r--r--SmartIrc4net/TODO24
-rw-r--r--SmartIrc4net/aclocal.m4838
-rwxr-xr-xSmartIrc4net/configure3915
-rw-r--r--SmartIrc4net/configure.ac73
-rw-r--r--SmartIrc4net/expansions.m450
-rw-r--r--SmartIrc4net/mono.m455
-rw-r--r--SmartIrc4net/programs.m415
-rw-r--r--SmartIrc4net/smartirc4net.pc.in8
-rw-r--r--SmartIrc4net/smartirc4net.snkbin0 -> 596 bytes
-rw-r--r--SmartIrc4net/src/AssemblyInfo.cs70
-rw-r--r--SmartIrc4net/src/AssemblyInfo.cs.in70
-rw-r--r--SmartIrc4net/src/Consts.cs239
-rw-r--r--SmartIrc4net/src/EventArgs.cs56
-rw-r--r--SmartIrc4net/src/Exceptions.cs138
-rw-r--r--SmartIrc4net/src/IrcClient/BanInfo.cs64
-rw-r--r--SmartIrc4net/src/IrcClient/Channel.cs247
-rw-r--r--SmartIrc4net/src/IrcClient/ChannelInfo.cs64
-rw-r--r--SmartIrc4net/src/IrcClient/ChannelUser.cs193
-rw-r--r--SmartIrc4net/src/IrcClient/Delegates.cs58
-rw-r--r--SmartIrc4net/src/IrcClient/EventArgs.cs853
-rw-r--r--SmartIrc4net/src/IrcClient/IrcClient.cs2663
-rw-r--r--SmartIrc4net/src/IrcClient/IrcMessageData.cs193
-rw-r--r--SmartIrc4net/src/IrcClient/IrcUser.cs224
-rw-r--r--SmartIrc4net/src/IrcClient/NonRfcChannel.cs77
-rw-r--r--SmartIrc4net/src/IrcClient/NonRfcChannelUser.cs70
-rw-r--r--SmartIrc4net/src/IrcClient/WhoInfo.cs186
-rw-r--r--SmartIrc4net/src/IrcCommands/IrcCommands.cs2438
-rw-r--r--SmartIrc4net/src/IrcCommands/Rfc2812.cs675
-rw-r--r--SmartIrc4net/src/IrcConnection/Delegates.cs34
-rw-r--r--SmartIrc4net/src/IrcConnection/EventArgs.cs106
-rw-r--r--SmartIrc4net/src/IrcConnection/IrcConnection.cs1473
-rw-r--r--SmartIrc4net/src/IrcConnection/IrcProperties.cs48
-rw-r--r--SmartIrc4net/src/IrcConnection/ProxyType.cs37
-rw-r--r--SmartIrc4net/src/IrcFeatures/DccChat.cs188
-rw-r--r--SmartIrc4net/src/IrcFeatures/DccConnection.cs234
-rw-r--r--SmartIrc4net/src/IrcFeatures/DccSend.cs270
-rw-r--r--SmartIrc4net/src/IrcFeatures/Delegates.cs50
-rw-r--r--SmartIrc4net/src/IrcFeatures/EventArgs.cs137
-rw-r--r--SmartIrc4net/src/IrcFeatures/IrcConstants.cs80
-rw-r--r--SmartIrc4net/src/IrcFeatures/IrcFeatures.cs456
-rw-r--r--SmartIrc4net/src/Logger.cs201
-rw-r--r--SmartIrc4net/src/Makefile.am55
-rw-r--r--SmartIrc4net/src/Makefile.in440
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/EventArgs/CreateConnectionAsyncCompletedEventArgs.cs60
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/Exceptions/ProxyException.cs77
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/HttpProxyClient.cs461
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/IProxyClient.cs97
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/ProxyClientFactory.cs208
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/Socks4ProxyClient.cs577
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/Socks4aProxyClient.cs230
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/Socks5ProxyClient.cs736
-rw-r--r--SmartIrc4net/src/StarkSoftProxy/Utils.cs43
-rw-r--r--SparkleLib/AssemblyInfo.cs11
-rw-r--r--SparkleLib/AssemblyInfo.cs.in11
-rw-r--r--SparkleLib/Defines.cs30
-rw-r--r--SparkleLib/Defines.cs.in30
-rw-r--r--SparkleLib/Git/SparkleFetcherGit.cs195
-rw-r--r--SparkleLib/Git/SparkleRepoGit.cs556
-rw-r--r--SparkleLib/Hg/SparkleFetcherHg.cs172
-rw-r--r--SparkleLib/Hg/SparkleRepoHg.cs319
-rw-r--r--SparkleLib/Makefile.am41
-rw-r--r--SparkleLib/Makefile.in606
-rw-r--r--SparkleLib/Scp/SparkleFetcherScp.cs139
-rw-r--r--SparkleLib/Scp/SparkleRepoScp.cs115
-rw-r--r--SparkleLib/SparkleBackend.cs125
-rw-r--r--SparkleLib/SparkleChangeSet.cs37
-rw-r--r--SparkleLib/SparkleConfig.cs258
-rw-r--r--SparkleLib/SparkleFetcherBase.cs199
-rw-r--r--SparkleLib/SparkleHelpers.cs80
-rw-r--r--SparkleLib/SparkleListenerBase.cs201
-rw-r--r--SparkleLib/SparkleListenerIrc.cs160
-rw-r--r--SparkleLib/SparkleOptions.cs1101
-rw-r--r--SparkleLib/SparklePaths.cs36
-rw-r--r--SparkleLib/SparkleRepoBase.cs468
-rw-r--r--SparkleShare/Mac/AppDelegate.cs31
-rw-r--r--SparkleShare/Mac/Info.plist20
-rw-r--r--SparkleShare/Mac/MainMenu.xib2242
-rw-r--r--SparkleShare/Mac/MainMenu.xib.designer.cs18
-rw-r--r--SparkleShare/Mac/Makefile.am15
-rw-r--r--SparkleShare/Mac/Makefile.in402
-rw-r--r--SparkleShare/Mac/SparkleAbout.cs184
-rw-r--r--SparkleShare/Mac/SparkleAlert.cs53
-rw-r--r--SparkleShare/Mac/SparkleIntro.cs440
-rw-r--r--SparkleShare/Mac/SparkleLog.cs207
-rw-r--r--SparkleShare/Mac/SparkleMacController.cs183
-rw-r--r--SparkleShare/Mac/SparkleShare.csproj166
-rw-r--r--SparkleShare/Mac/SparkleShare.sln21
-rw-r--r--SparkleShare/Mac/SparkleStatusIcon.cs389
-rw-r--r--SparkleShare/Mac/SparkleUI.cs183
-rw-r--r--SparkleShare/Mac/SparkleWindow.cs149
-rw-r--r--SparkleShare/Makefile.am34
-rw-r--r--SparkleShare/Makefile.in915
-rw-r--r--SparkleShare/Nautilus/Makefile.am10
-rw-r--r--SparkleShare/Nautilus/Makefile.in457
-rw-r--r--SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in172
-rw-r--r--SparkleShare/SparkleAbout.cs155
-rw-r--r--SparkleShare/SparkleBubble.cs41
-rw-r--r--SparkleShare/SparkleController.cs1025
-rw-r--r--SparkleShare/SparkleEntry.cs92
-rw-r--r--SparkleShare/SparkleInfobar.cs50
-rw-r--r--SparkleShare/SparkleIntro.cs665
-rw-r--r--SparkleShare/SparkleLinController.cs205
-rw-r--r--SparkleShare/SparkleLog.cs250
-rw-r--r--SparkleShare/SparkleShare.cs162
-rw-r--r--SparkleShare/SparkleSpinner.cs111
-rw-r--r--SparkleShare/SparkleStatusIcon.cs339
-rw-r--r--SparkleShare/SparkleUI.cs153
-rw-r--r--SparkleShare/SparkleUIHelpers.cs68
-rw-r--r--SparkleShare/SparkleWindow.cs134
-rw-r--r--SparkleShare/sparkleshare.desktop8
-rw-r--r--SparkleShare/sparkleshare.in68
-rw-r--r--aclocal.m41404
-rw-r--r--build/Makefile.am6
-rw-r--r--build/Makefile.in594
-rw-r--r--build/build.environment.mk43
-rw-r--r--build/build.mk3
-rw-r--r--build/build.rules.mk89
-rwxr-xr-xbuild/icon-theme-installer177
-rw-r--r--build/m4/Makefile.am7
-rw-r--r--build/m4/Makefile.in393
-rw-r--r--build/m4/gnome-doc-utils.m41
-rw-r--r--build/m4/shamrock/expansions.m450
-rw-r--r--build/m4/shamrock/gnome-doc.m423
-rw-r--r--build/m4/shamrock/i18n.m410
-rw-r--r--build/m4/shamrock/mono.m494
-rw-r--r--build/m4/shamrock/monodoc.m425
-rw-r--r--build/m4/shamrock/nunit.m429
-rw-r--r--build/m4/shamrock/programs.m415
-rw-r--r--build/m4/shamrock/util.m411
-rw-r--r--build/m4/shave/shave-libtool.in109
-rw-r--r--build/m4/shave/shave.in109
-rw-r--r--build/m4/shave/shave.m4102
-rw-r--r--build/m4/sparkleshare/gtk-sharp.m423
-rw-r--r--build/m4/sparkleshare/nautilus-python.m414
-rw-r--r--build/m4/sparkleshare/notify-sharp.m412
-rw-r--r--build/m4/sparkleshare/smartirc4net.m416
-rwxr-xr-xconfig.guess1501
-rwxr-xr-xconfig.sub1705
-rwxr-xr-xconfigure7343
-rw-r--r--configure.ac125
-rw-r--r--data/Makefile.am13
-rw-r--r--data/Makefile.in651
-rw-r--r--data/html/Makefile.am9
-rw-r--r--data/html/Makefile.in444
-rw-r--r--data/html/day-entry.html8
-rw-r--r--data/html/event-entry.html20
-rw-r--r--data/html/event-log.html113
-rw-r--r--data/icons/Makefile.am51
-rw-r--r--data/icons/Makefile.in439
-rw-r--r--data/icons/avatar-default-16.pngbin0 -> 846 bytes
-rw-r--r--data/icons/avatar-default-22.pngbin0 -> 1286 bytes
-rw-r--r--data/icons/avatar-default-24.pngbin0 -> 1323 bytes
-rw-r--r--data/icons/avatar-default-32.pngbin0 -> 2024 bytes
-rw-r--r--data/icons/avatar-default-48.pngbin0 -> 3257 bytes
-rw-r--r--data/icons/dialog-error-16.pngbin0 -> 747 bytes
-rw-r--r--data/icons/dialog-error-24.pngbin0 -> 1251 bytes
-rw-r--r--data/icons/document-added-16.pngbin0 -> 487 bytes
-rw-r--r--data/icons/document-edited-16.pngbin0 -> 610 bytes
-rw-r--r--data/icons/document-moved-16.pngbin0 -> 589 bytes
-rw-r--r--data/icons/document-removed-16.pngbin0 -> 318 bytes
-rw-r--r--data/icons/error-active.pngbin0 -> 540 bytes
-rw-r--r--data/icons/error.pngbin0 -> 613 bytes
-rw-r--r--data/icons/folder-sparkleshare-16-mist.pngbin0 -> 971 bytes
-rw-r--r--data/icons/folder-sparkleshare-16.pngbin0 -> 766 bytes
-rw-r--r--data/icons/folder-sparkleshare-22-mist.pngbin0 -> 1142 bytes
-rw-r--r--data/icons/folder-sparkleshare-22.pngbin0 -> 1004 bytes
-rw-r--r--data/icons/folder-sparkleshare-24-mist.pngbin0 -> 978 bytes
-rw-r--r--data/icons/folder-sparkleshare-24.pngbin0 -> 997 bytes
-rw-r--r--data/icons/folder-sparkleshare-256-mist.pngbin0 -> 53049 bytes
-rw-r--r--data/icons/folder-sparkleshare-256.pngbin0 -> 53184 bytes
-rw-r--r--data/icons/folder-sparkleshare-32-mist.pngbin0 -> 1659 bytes
-rw-r--r--data/icons/folder-sparkleshare-32.pngbin0 -> 1404 bytes
-rw-r--r--data/icons/folder-sparkleshare-48-mist.pngbin0 -> 2449 bytes
-rw-r--r--data/icons/folder-sparkleshare-48.pngbin0 -> 2372 bytes
-rw-r--r--data/icons/idle0-active.pngbin0 -> 622 bytes
-rw-r--r--data/icons/idle0.pngbin0 -> 639 bytes
-rw-r--r--data/icons/idle1-active.pngbin0 -> 643 bytes
-rw-r--r--data/icons/idle1.pngbin0 -> 641 bytes
-rw-r--r--data/icons/idle2-active.pngbin0 -> 637 bytes
-rw-r--r--data/icons/idle2.pngbin0 -> 646 bytes
-rw-r--r--data/icons/idle3-active.pngbin0 -> 646 bytes
-rw-r--r--data/icons/idle3.pngbin0 -> 652 bytes
-rw-r--r--data/icons/idle4-active.pngbin0 -> 652 bytes
-rw-r--r--data/icons/idle4.pngbin0 -> 662 bytes
-rw-r--r--data/icons/process-syncing-sparkleshare-24-mist.pngbin0 -> 2437 bytes
-rw-r--r--data/icons/process-syncing-sparkleshare-24.pngbin0 -> 2560 bytes
-rw-r--r--data/icons/process-working-22.pngbin0 -> 7061 bytes
-rw-r--r--data/icons/sparkleshare-syncing-error-24.pngbin0 -> 1354 bytes
-rw-r--r--data/side-splash.pngbin0 -> 80847 bytes
-rw-r--r--data/sparkleshare-gnome.svg4020
-rw-r--r--data/sparkleshare-mist.svg2099
-rw-r--r--gnome-doc-utils.make0
-rw-r--r--help/Makefile.am17
-rw-r--r--help/Makefile.in403
-rwxr-xr-xinstall-sh520
-rwxr-xr-xltmain.sh8745
-rw-r--r--man/sparkleshare.136
-rwxr-xr-xmissing376
-rw-r--r--po/LINGUAS23
-rw-r--r--po/Makefile.in.in217
-rw-r--r--po/POTFILES.in18
-rw-r--r--po/POTFILES.skip2
-rw-r--r--po/bg.po429
-rw-r--r--po/ca.po435
-rw-r--r--po/cs_CZ.po432
-rw-r--r--po/da.po429
-rw-r--r--po/de.po439
-rw-r--r--po/el.po417
-rw-r--r--po/eo.po418
-rw-r--r--po/es.po435
-rw-r--r--po/fi.po429
-rw-r--r--po/fr.po442
-rw-r--r--po/he.po420
-rw-r--r--po/it.po434
-rw-r--r--po/ja.po422
-rw-r--r--po/nl.po432
-rw-r--r--po/no_NO.po431
-rw-r--r--po/pl.po437
-rw-r--r--po/pt_BR.po431
-rw-r--r--po/ru.po419
-rw-r--r--po/sv.po423
-rw-r--r--po/te.po417
-rw-r--r--po/uk.po432
-rw-r--r--po/zh_CN.po416
-rw-r--r--po/zh_TW.po420
241 files changed, 80003 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..96ff1c5
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,42 @@
+Points of contact:
+
+ Maintainer:
+ Hylke Bons <hylkebons@gmail.com>
+
+ Marketing:
+ Alexandre Saiz Verdaguer <alex@sparkleshare.net>
+
+ Translations:
+ Łukasz Jernaś <deejay1@srem.org>
+
+
+Contributors:
+
+ Alexandre Saiz Verdaguer <a@alexandresaiz.com>
+ Alex Hudson <home@alexhudson.com>
+ Allan Day <allanpday@gmail.com>
+ Andreas Nilsson <andreasn@gnome.org>
+ Benjamin Podszun <benjamin.podszun@gmail.com>
+ Bertrand Lorentz <bertrand.lorentz@gmail.com>
+ Gabriel Burt <gabriel.burt@gmail.com>
+ Garrett LeSage <garrett@novell.com>
+ Hylke Bons <hylkebons@gmail.com>
+ Jakub Steiner <jimmac@redhat.com>
+ Kristi Tsukida <kristi.tsukida@gmail.com>
+ Lapo Calamandrei <calamandrei@gmail.com>
+ Luis Cordova <cordoval@gmail.com>
+ Łukasz Jernaś <deejay1@srem.org>
+ Michael Monreal <michael.monreal@gmail.com>
+ Nick Richards <nick@nickr.org>
+ Oleg Khlystov <pktfag@gmail.com>
+ Paul Cutler <pcutler@gnome.org>
+ Philipp Gildein <rmbl@openspeak-project.org>
+ Ruben Vermeersch <rubenv@gnome.org>
+ Sandy Armstrong <sanfordarmstrong@gmail.com>
+ Simon Pither <simon@pither.com>
+ Steven Harms <sharms@ubuntu.com>
+ Vincent Untz <vuntz@gnome.org>
+ Will Thompson <will@willthompson.co.uk>
+
+ Thanks very much!
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..94a0453
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,621 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..6f2ce20
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,20 @@
+SUBDIRS = \
+ build \
+ help \
+ SmartIrc4net \
+ SparkleLib \
+ SparkleShare \
+ data \
+ po
+
+EXTRA_DIST = gnome-doc-utils.make \
+ LICENSE
+
+DISTCLEANFILES = \
+ intltool-extract \
+ intltool-merge \
+ intltool-update \
+ gnome-doc-utils.make
+
+clean-local:
+ rm -rf $(top_builddir)/bin
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..7532b2a
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,762 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/m4/shave/shave-libtool.in \
+ $(top_srcdir)/build/m4/shave/shave.in $(top_srcdir)/configure \
+ AUTHORS NEWS config.guess config.sub install-sh ltmain.sh \
+ missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = build/m4/shave/shave build/m4/shave/shave-libtool
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d "$(distdir)" \
+ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr "$(distdir)"; }; }
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).zip
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+ build \
+ help \
+ SmartIrc4net \
+ SparkleLib \
+ SparkleShare \
+ data \
+ po
+
+EXTRA_DIST = gnome-doc-utils.make \
+ LICENSE
+
+DISTCLEANFILES = \
+ intltool-extract \
+ intltool-merge \
+ intltool-update \
+ gnome-doc-utils.make
+
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+build/m4/shave/shave: $(top_builddir)/config.status $(top_srcdir)/build/m4/shave/shave.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+build/m4/shave/shave-libtool: $(top_builddir)/config.status $(top_srcdir)/build/m4/shave/shave-libtool.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @$(am__cd) '$(distuninstallcheck_dir)' \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ clean-libtool clean-local ctags ctags-recursive dist dist-all \
+ dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-xz \
+ dist-zip distcheck distclean distclean-generic \
+ distclean-libtool distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+clean-local:
+ rm -rf $(top_builddir)/bin
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..763aac1
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,42 @@
+0.2.1 for Linux and Mac (Wed Jun 8, 2011):
+
+ Hylke: Fix bug where host names with a "-" in them weren't accepted. Fix
+ crash that happens when the user doesn't have their "Real Name" set in the
+ OS and a race condition connecting to the announcements server.
+
+
+0.2 for Linux and Mac (Mon Jun 6, 2011):
+
+ Hylke: Removed the dependancy on GitSharp. File rename detection support
+ in the event logs. Fixed all crashes reported in RC1 and improved sync
+ algorithm. Redid collision detection and conflict resolving (use a copy
+ of each version). Improved about dialogs with version checking. Pluggable
+ backend (experimental Mercurial support). Added support for Growl to show
+ notifications on Mac.
+
+
+0.2-rc1 for Linux and Mac (Sun Mar 20, 2011):
+
+ Hylke: A lot of fixes and optimisations across the backend. Less memory
+ usage, less crashes. Instant notifications of new changes instead of polling.
+ Refreshed event log HTML theme. Keeping logs in memory for faster reopening and
+ loads more goodness.
+
+
+0.2-beta2 for Mac (Sat Feb 12, 2011):
+
+ Hylke: Mac version! Massive restructure of the code to an MVC-like model
+ to make building different front-ends easier. Ported the event logs to
+ Webkit, so users can style it to their liking. It also reduces the amount
+ of UI-porting that needs to be done between toolkits.
+
+
+0.2-beta1 (Sun Sep 5, 2010):
+
+ Hylke: Aside from the usual bug fixes and behind the scenes work I mainly
+ added features that increase productivity in the event logs. Not only does
+ it look a lot prettier, each entry in an event log now has a clickable link
+ for easy access to files. It refreshes automatically on new events as well.
+ The Nautilus plugin now has the "Copy Web Link" context menu item, which
+ makes sharing links a whole lot easier.
+
diff --git a/README b/README
new file mode 100644
index 0000000..b8b921c
--- /dev/null
+++ b/README
@@ -0,0 +1,189 @@
+SparkleShare
+============
+
+SparkleShare is a collaboration and sharing tool that is designed to keep
+things simple and to stay out of your way. It allows you to instantly sync
+with any Git repository you have access to.
+
+Though SparkleShare is not made to be a graphical frontend
+for git or a backup tool, it may be useful for other kinds of purposes as well,
+like backing up small files or monitoring your favourite project. In contrast
+to the projects name, we will very likely refuse to implement your personal
+ponies.
+
+SparkleShare currently works on Linux and Mac. A Windows port and mobile
+device support are planned for the future.
+
+
+License
+=======
+
+SparkleShare is free software and licensed under the GNU GPLv3 or later. You
+are welcome to change and redistribute it under certain conditions. For more
+information see the LICENSE file or visit http://www.gnu.org/licenses/gpl-3.0.html
+
+
+Run on Linux:
+=============
+
+SparkleShare currently requires:
+
+ - git >= 1.7
+ - gtk-sharp2 >= 2.12.7
+ - mono-core >= 2.2
+ - ndesk-dbus >= 0.6
+ - openssh
+ - gvfs >= 1.3
+ - intltool
+ - libnotify
+ - nautilus-python
+ - pygtk
+ - webkitgtk
+ - webkit-sharp
+
+Run the service, either click the SparkleShare launcher or:
+
+ $ sparkleshare start
+
+You can stop the service via the graphical interface or by typing:
+
+ $ sparkleshare stop
+
+For help:
+
+ $ sparkleshare --help
+
+Note:
+
+ SparkleShare creates its own RSA keypair in ~/config/sparkleshare/ and uses
+ that for authentication. Please mind this if you're planning to set up your
+ own server by hand.
+
+
+Build on Linux:
+===============
+
+Installing the build dependencies on Debian:
+
+ $ sudo apt-get install gtk-sharp2 mono-runtime mono-devel monodevelop \
+ libndesk-dbus1.0-cil-dev nant libnotify-cil-dev libgtk2.0-cil-dev \
+ libwebkit-cil-dev intltool libtool python-nautilus libndesk-dbus-glib1.0-cil-dev
+
+Or on Fedora:
+
+ $ sudo yum install gtk-sharp2-devel mono-core mono-devel monodevelop \
+ ndesk-dbus-devel ndesk-dbus-glib-devel nautilus-python-devel nant \
+ notify-sharp-devel webkit-gtk-devel webkit-sharp-devel webkitgtk-devel \
+ libtool intltool
+
+
+You can build and install SparkleShare like this:
+
+ $ ./configure (or ./autogen if you got SparkleShare from the repository)
+ $ make
+ $ sudo make install
+
+Note:
+
+ Use './configure --prefix=/usr' if you want the Nautilus extension to work.
+
+
+Run on Mac:
+===========
+
+Just double-click the SparkleShare.app.
+
+
+Build on Mac:
+=============
+
+Install the Mono Framework, MonoDevelop and the MonoMac plugin (you find it in Add-in Manager).
+
+You may need to adjust some environment variables to let the build environment tools find mono:
+
+ $ export PATH=/Library/Frameworks/Mono.framework/Versions/Current/bin:$PATH
+ $ export PKG_CONFIG=/Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config
+ $ export PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig
+
+Then you need either MacPorts or Homebrew. Go on and choose one of the next two sections.
+
+
+Using MacPorts
+--------------
+
+Install git, automake, and intltool:
+
+ $ sudo port install git-core automake intltool
+
+Start the first part of the build:
+
+ $ ./autogen.sh
+ $ make
+
+The last step will give you some errors in SparkleShare.exe, ignore these and go on to the
+MonoDevelop section.
+
+
+Using Homebrew
+--------------
+
+Because there are old versions of autoconf and automake installed on OS X, they are not in
+the official master branch. It's easy to create the formulas:
+
+ $ brew create $url
+
+Now install the formulas.
+
+You can have a look at this branch for the created Formulas:
+https://github.com/toabi/homebrew/commits/sparkleshare
+
+You also have to comment out the 'keg_only' in gettext and remove it if you already
+installed it. If you created the formulas install them:
+
+ $ brew install git autoconf automake intltool gettext
+
+Now start the first part of the build:
+
+ $ export ACLOCAL_FLAGS="-I /usr/local/share/aclocal"
+ $ cd SmartIrc4net
+ $ ./autogen.sh
+ $ cd ..
+ $ ./autogen.sh
+ $ make
+
+Ignore the error and continue to the MonoDevelop-part.
+
+
+Building the Cocoa UI MonoDevelop
+---------------------------------
+
+Now that you have compiled the libraries, open 'SparkleShare/Mac/SparkleShare.sln' in
+MonoDevelop and start the build.
+
+To create the SparkleShare.app, select Project from the menu bar and click "Create Mac Installer..."
+
+
+Info
+====
+
+Official website:
+http://www.sparkleshare.org/
+
+Source code:
+http://github.com/SparkleShare/
+
+IRC Channel:
+#sparkleshare on irc.gnome.org
+
+Wiki:
+http://github.com/hbons/SparkleShare/wiki/
+
+Report issues:
+http://github.com/hbons/SparkleShare/issues/
+
+Translation project:
+http://www.transifex.net/projects/p/sparkleshare/
+
+
+Now have fun and create cool things together! :)
+
diff --git a/SmartIrc4net/API_CHANGE b/SmartIrc4net/API_CHANGE
new file mode 100644
index 0000000..06bd3f1
--- /dev/null
+++ b/SmartIrc4net/API_CHANGE
@@ -0,0 +1,70 @@
+API Change (0.2.0 -> 0.3.0) Documentation
+-----------------------------------------
+This file is only relevent for you if you wrote an IRC application that is
+SmartIrc4net 0.2.0 based! If you didn't use SmartIrc4net yet, you can safely
+ignore this file and just continue on hacking a great IRC application ;)
+
+The API naming between SmartIrc4net 0.2.0 and 0.3.0 changed a lot, mostly
+because of .NET library standards.
+
+Here are the changes:
+- All RFC commands in IrcCommands are now prefixed with "Rfc"
+
+ If you used the Join() method, then you need to change your calls to
+ RfcJoin(). The reason is for this change is that the most commands are plain
+ RFC wrapper methods. This way you can easily distinguish between API
+ commands/feature and plain RFC commands. Another reason was conflicts or
+ confusing names like Admin(), Version() or Ison().
+
+ Message() got renamed to SendMessage() which makes more clear what that
+ method actually does.
+
+- All delegates now uses .NET standards conform signatures
+
+ If you used JoinEventHandler which was:
+ JoinEventHandler(string channel, string who, Data ircdata)
+
+ it's now:
+ JoinEventHandler(object sender, JoinEventArgs e);
+
+ This way the .NET library standards suggest, because those JoinEventArgs
+ which extends IrcEventArgs which extends EventArgs can be easily changed at
+ any time later for additional data.
+ The "sender" argument is type IrcClient, the irc client object that triggered
+ the event (very useful for multiple irc connections).
+ IrcEventArgs always contain the property "Data"
+ (type IrcMessageData, formerly known as type Data)
+
+ This means you have to change all your event method signatures, e.g.:
+
+ If you had an event method for OnJoin it was like this:
+ MyOnJoinMethod(string channel, string who, Data ircdata) {
+ System.Console.WriteLine(who+" joined on "+channel+"!");
+ }
+
+ you need to change that to:
+ MyOnJoinMethod(object sender, JoinEventArgs e) {
+ System.Console.WriteLine(e.Who+" joined on "+e.Channel+"!");
+ }
+
+ you still have the whole parsed IRC message in e.Data!
+
+- Connect() Disconnect() Reconnect() don't return bool anymore
+
+ They use now proper exception handling, so catch them!
+ There is ConnectionException which work for all 3 methods, and also more
+ specific exception types like:
+ CouldNotConnectException
+ AlreadyConnectedException
+ NotConnectionException
+
+ There is also a very general exception type which will catch ANY exception
+ that SmartIrc4net will throw! It's called:
+ SmartIrc4netException
+
+- ChannelSync property is renamed to ActiveChannelSync
+ (read more about in the CHANGELOG)
+
+- Any method that will send a message can throw an exception!
+ If the IRC library is not connected and you try to send any message, then
+ a NotConnectedException will be thrown!
diff --git a/SmartIrc4net/CHANGELOG b/SmartIrc4net/CHANGELOG
new file mode 100644
index 0000000..6503671
--- /dev/null
+++ b/SmartIrc4net/CHANGELOG
@@ -0,0 +1,181 @@
+v0.4.0 (SVN r266)
+------
+fixes:
+- fixed null reference exception when CTCP PING contains no data
+ (thanks to Nick 'Zaf' Clifford, closes sf.net patch #1199630)
+- fixed NonRfcSupport, it didn't check for NonRfcSupport in _Event_RPL_NAMREPLY
+ (thanks to the anonymous poster on the sf.net forum for reporting this)
+- added sanity checks to the mode change parser in IrcClient._InterpretChannelMode(),
+ otherwise some nasty IRCd servers might break us.
+- catch ObjectDisposedExceptions in connection handling code.
+
+new:
+- IrcConnection now uses an active pinger to better detect network problems,
+ by default every 60 seconds a ping will be send to the server, if it
+ doesn't respond the class will disconnect or reconnect depending on
+ the IrcConnection.AutoReconnect property.
+- added IrcConnection.OnAutoConnectError event, raised when there is a problem
+ with the connection, it passes in AutoConnectErrorEventArgs which server and port
+ was used and which exception was thrown, this way application can display and
+ handle connection errors.
+- reconnect handling will now store/use keys if ActiveChannelSyncing and
+ AutoRejoin is activated.
+- UTF-8 support
+ now you can set IrcConnection.Encoding = Encoding.UTF8 and all messages send
+ and receives will be encoded/decoded to/from UTF-8
+- added lots of documentation stabs
+- added IrcClient.IsAway property.
+- added IrcClient.OnAway, IrcClient.OnAway, IrcClient.OnUnAway and IrcClient.OnNowAway events.
+- added IrcClient.OnPong event.
+- added IrcClient.AutoJoinOnInvite property, if enabled and the class receives an
+ invite it will join that channel automatic (don't worry it will not join "0").
+- added IrcClient.AutoRejoinOnKick property, if enabled and the class was in a
+ channel and got kicked, it will try to rejoin that channel.
+- added IrcClient.AutoNickHandling property, now you can deactivate the
+ automatic nick change when a nick collision happens, so you can handle
+ it on your application instead.
+- added IrcCLient.NicknameList property, set in Login() call, will try the
+ different nicks when the nick was already used, in order.
+- added IrcClient.Login() overload for passing a nickname list.
+- added some documentation.
+- added IrcConnection.Lag property, indicates how much lag is between the
+ IRCd server and the IRC client.
+- added VisualStudio 2005 project files.
+
+changes:
+- IrcConnection.Encoding now uses the system encoding as default!
+ So you might have to set it to Encoding.GetEncoding("ISO-8859-1") manually.
+- IrcClient.Reconnect() now stores channel keys too for rejoining them.
+- IrcClient.OnCtcpRequest and IrcClient.OnCtcpReply events now passes parsed
+ CTCP data as CtcpEventArgs.
+- Removed log4net initialization, as this can conflict with applications using log4net.
+ If you need debug output, use the debug build and add this code to your application:
+ log4net.Config.BasicConfigurator.Configure();
+ or if you want the old config style with a config file:
+ FileInfo fi = new FileInfo("SmartIrc4net_log.config");
+ log4net.Config.DOMConfigurator.ConfigureAndWatch(fi);
+- When IrcClient.CtcpVersion is set, the library will no longer advertise
+ itself in CTCP VERSION replies.
+
+v0.3.5 (SVN r184)
+------
+fixes:
+- fixed bug in channel sync that caused duplicate exception
+ (Closes sf.net bug #1064190)
+- fixed tracking of ops and voices list on join
+ (thanks to Clment Bourgeois, closes sf.net bug #1075942)
+- fixed bug that the initial channel mode is not synced (on join).
+- fixed a crash bug in the channel sync code
+ when a user was voiced/opped/banned 2 times, an ArgumentException was thrown
+ (thanks to Clment Bourgeois for spotting this)
+- fixed handling of a stalled connection
+ IOException was not catched in the write thread, and in the read thread
+ the IsConnectionError was not set
+- fixed InviteEventArgs, mixed who with channel name
+- fixed OnConnected event
+ now it's raised when the connection is ready for sending data.
+- fixed Reconnect() handling in the Listen() loop, moved to ReadLine().
+- fixed InviteEventArgs.Channel property,
+ initialized with the right value now.
+- fixed nullref exception in _Event_QUIT()
+ added sanity checks, FreshIRC network does very ugly things with the IRC
+ protocol.
+
+changes:
+- improved handling of rejoining channels after reconnect.
+- using keep-alive socket now.
+- removed underscores in parameter names (violates .NET library standards)
+- renamed parameters with "text" to different names
+ (violates .NET library standards)
+- using new case-insensitive hashtables (FxCop spotted this)
+- improved the example/test program
+- main bin/ directory is now used for the example programs
+- changed overrides to new (method hiding is sufficient here).
+- updated all MS VS.NET project files.
+
+new:
+- added Halfop support (with OnHalfop and OnDehalfop events)
+ if you want to use it do:
+ irc.NonRfcSupport = true;
+ NonRfcChannel nchan = GetChannel("#channel");
+ nchan.Halfops....
+ or
+ NonRfcChannelUser nuser = GetChannelUser("#channel", "nick");
+ nuser.Halfop.....
+- added Halfop() and Dehalfop() command to IrcCommands
+- added OnErrorMessage event as general hook for all ERR_ messages
+- added SendReply(), easy way of replying to a message
+ (regardless if its a channel, query or notice message)
+- added OnMotd event (with MotdEventArgs)
+- added IrcClient.Motd property
+- added OnChannelPassiveSynced event
+- added channel sync timings to channels (Channel.ActiveSyncTime).
+- added IrcClient.AutoRelogin setting.
+- added IrcConnection.AutoRetryDelay property.
+- added IrcConnection.OnConnectionError event.
+- added Rfc2812.IsValidNickname() method.
+- added IrcConnection.SocketSendTimeout and IrcConnection.SocketReceiveTimeout
+- added little benchmark program (examples/benchmark).
+- added stresstest program (examples/stresstest).
+- added sign target to the makefile
+
+v0.3.0 (SVN r123)
+-------
+fixes:
+- fine tuned the "#ifdef LOG4NET" statements (thanks to prencher for noticing this
+ log4net is fully optional! (only required for debugging the library)
+- fixed bug, the class changed the Op and Voice list of a copy *boing*
+ (FxCop pointed me to it)
+- added check for "~" userflag on nameslist (thanks to Giacomo Di Ciocco)
+ this broke the library on IRC networks using that userflag on channels
+- fixed channel sync bug, when the connection is re-established
+ (Closes sf.net bug #1043536)
+- fixed rejoining channels when using Reconnect()
+- added sanity checks in _Event_WHOREPLY()
+ this will prevent exceptions when the IRC server voilates the RFC
+ (like some psybnc version do)
+- fixed string handling in _Event_PRIVMSG() for CTCP messages
+ (Closes sf.net bug #1039286)
+
+changes:
+- making SmartIrc4net CLS and .NET standards conform
+ changed all delegates to use EventArgs
+- made a few constructors "internal"
+- directory struture changed
+ the structure now represents the API layers
+ (IrcConnection, IrcCommands and IrcClient)
+- regex optimizations (thanks to prencher for the hints)
+- renamed all ReplyCodes to conform to .NET standards
+ (e.g. ReyplCode.RPL_Welcome -> ReplyCode.Welcome)
+- renamed IrcConnection.Version to IrcConnection.VersionNumber
+- renamed ChannelSync to ActiveChannelSync
+ later I will introduce PassiveChannelSync, this means only the received
+ data is used for channel sync no extra commands are send to the IRC server.
+
+new:
+- parts of SmartIrc4net have now XML documentation tags
+- added *EventArgs for the events
+- added exception handling for Connect() Reconnect() Disconnect()
+- added VisualStudio project files (thanks to prencher for creating them)
+- added constructors to the exception classes (.NET standards)
+- added log calls for queue, when data could not be sent and is requeued
+- added missing overloads for RFC commands (Closes sf.net bug #1061503)
+ (Join, Part, Kick, List, Names)
+- added more RFC commands, now all RFC 2812 commands are implemented!
+ (Oper, Motd, Luser, Version, Stats, Service, Squit, Links, Time, Connect,
+ Trace, Admin, Info, Servlist, Squery, Whois, Whowas, Kill, Ping, Pong,
+ Away, Rehash, Die, Restart, Summon, Users, Wallops, Userhost, Ison)
+- WriteLine() will throw an NotConnectedException now when it's used without
+ having a connection to an IRC server
+- added timeout values for the tcp socket (6 minutes), and activated nodelay flag
+- prefixed all IrcCommands that are actually plain RFC commands with "Rfc"
+ e.g. Join() is now called RfcJoin()
+
+v0.2.0 (SVN r83)
+-------
+fixes:
+
+changes:
+
+new:
+ - first public release
diff --git a/SmartIrc4net/CREDITS b/SmartIrc4net/CREDITS
new file mode 100644
index 0000000..1f7559f
--- /dev/null
+++ b/SmartIrc4net/CREDITS
@@ -0,0 +1,41 @@
+/**
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ */
+
+This is the creditslist for SmartIrc4net
+
+The fields are:
+(N) name
+(E) email
+(W) web-address
+(P) PGP key ID and fingerprint
+(D) description
+(S) snail-mail address
+---------------------------
+
+N: Mirco Bauer
+E: meebey@meebey.net
+E: meebey@php.net
+W: www.meebey.net
+P: EEF946C8 / ABE1 95E1 50A8 DBE7 809D 3F42 7127 E5AB EEF9 46C8
+D: Project Leader
+S: Kroonhorst 42
+S: 22549 Hamburg
+S: Germany
+
+N: Benjamin Hall
+E: Benjamin.Hall@orcon.net.nz
+D: Several patches: AutoRejoinOnKick, AutoJoinOnInvite, NicknameList,
+ IdleWorkerThread, OnAutoConnectError, Lag, documentation
+S: Auckland
+S: New Zealand
+
+N: Thomas Bruderer (apophis)
+E: apophis@apophis.ch
+D: Several patches: DCC implementation, OnNames fix
+S: Zurich
+S: Switzerland
diff --git a/SmartIrc4net/FEATURES b/SmartIrc4net/FEATURES
new file mode 100644
index 0000000..ac7ecb2
--- /dev/null
+++ b/SmartIrc4net/FEATURES
@@ -0,0 +1,34 @@
+/**
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ */
+
+Full featurelist of SmartIrc4net
+-------------------------------------
+
+- 3 layered API
+ - IrcConnection (low-level API)
+ contains socket handling and message buffer
+ - IrcCommands (extends IrcConnection, middle-level API)
+ contains RFC IRC commands plus easy to use IRC methods (like Op/Deop/Ban/Unban...)
+ - IrcClient (extends IrcCommands, high-level API)
+ full featured IRC class, with channel syncing, fully event driven
+- send/receive floodprotection
+- detects and changes nickname on nickname collisions
+- autoreconnect, if connection is lost
+- autoretry for connecting to IRC servers
+- debugging/logging system with log levels (using log4net)
+- compatible with Mono and Micrsoft .NET Framework
+- sendbuffer with a queue that has 3 priority levels (high, medium, low) plus a bypass level (critical)
+- channel syncing (tracking of users/modes/topic etc in objects)
+- user syncing (tracking the user in channels, nick/ident/host/realname/server/hopcount in objects)
+- when channel syncing is acticated the following methods are available:
+ - IsJoined
+ - IsOpped
+ - IsVoiced
+ - IsBanned
+- on reconnect all joined channels will be rejoined, also when keys are used
+- own CTCP version reply can be set
diff --git a/SmartIrc4net/LICENSE b/SmartIrc4net/LICENSE
new file mode 100644
index 0000000..9884a9c
--- /dev/null
+++ b/SmartIrc4net/LICENSE
@@ -0,0 +1,509 @@
+/**
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ */
+ 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!
diff --git a/SmartIrc4net/Makefile.am b/SmartIrc4net/Makefile.am
new file mode 100644
index 0000000..38b4433
--- /dev/null
+++ b/SmartIrc4net/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS = \
+ src
+
+EXTRA_DIST = \
+ $(PACKAGE_NAME).snk \
+ SmartIrc4net.mds \
+ SmartIrc4net.mdp \
+ API_CHANGE \
+ CHANGELOG \
+ CREDITS \
+ FEATURES \
+ LICENSE \
+ README \
+ TODO
diff --git a/SmartIrc4net/Makefile.in b/SmartIrc4net/Makefile.in
new file mode 100644
index 0000000..eba50d8
--- /dev/null
+++ b/SmartIrc4net/Makefile.in
@@ -0,0 +1,678 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/../install-sh \
+ $(srcdir)/../missing $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/smartirc4net.pc.in \
+ $(top_srcdir)/configure TODO
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/expansions.m4 \
+ $(top_srcdir)/mono.m4 $(top_srcdir)/programs.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = smartirc4net.pc
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d "$(distdir)" \
+ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr "$(distdir)"; }; }
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+ASSEMBLY_DESCRIPTION = @ASSEMBLY_DESCRIPTION@
+ASSEMBLY_NAME = @ASSEMBLY_NAME@
+ASSEMBLY_TITLE = @ASSEMBLY_TITLE@
+ASSEMBLY_VERSION = @ASSEMBLY_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CLR = @CLR@
+CSC = @CSC@
+CSC_FLAGS = @CSC_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+GACUTIL = @GACUTIL@
+GACUTIL_FLAGS = @GACUTIL_FLAGS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+ src
+
+EXTRA_DIST = \
+ $(PACKAGE_NAME).snk \
+ SmartIrc4net.mds \
+ SmartIrc4net.mdp \
+ API_CHANGE \
+ CHANGELOG \
+ CREDITS \
+ FEATURES \
+ LICENSE \
+ README \
+ TODO
+
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+smartirc4net.pc: $(top_builddir)/config.status $(srcdir)/smartirc4net.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @$(am__cd) '$(distuninstallcheck_dir)' \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \
+ distclean distclean-generic distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SmartIrc4net/README b/SmartIrc4net/README
new file mode 100644
index 0000000..822973c
--- /dev/null
+++ b/SmartIrc4net/README
@@ -0,0 +1,47 @@
+SmartIrc4net
+----------------
+What is this?
+SmartIrc4net is a C# class for communication with IRC networks, which
+conforms to the RFC 2812 (IRC Protocol).
+It's orignally a port of SmartIRC (written in PHP),
+but it's much more now (I will backport it to PHP5 some day).
+SmartIrc4net an API that handles all IRC protocol messages and is designed for
+creating IRC bots or even GUI clients.
+
+Please report bugs to:
+http://sourceforge.net/tracker/?group_id=114302&atid=667874
+
+Project Homepage:
+http://smartirc4net.sf.net
+
+files included in SmartIrc4net
+--------------------------
+FEATURES
+A full list of features that SmartIrc4net includes
+
+CHANGELOG
+Listing of changes between all versions.
+
+README
+This file
+
+LICENSE
+The license of SmartIrc4net.
+
+CREDITS
+Creditlist with people that work/help on SmartIrc4net.
+
+src/*.cs
+The SmartIrc4net sourcecode
+
+examples/
+Some examples how SmartIrc4net can be used.
+
+docs/
+Documentation of SmartIrc4net.
+
+CSharpBuilder/
+Project files for Borlands C# Builder.
+
+MonoDevelop/
+Project files for MonoDevelop.
diff --git a/SmartIrc4net/SmartIrc4net.mdp b/SmartIrc4net/SmartIrc4net.mdp
new file mode 100644
index 0000000..3ce4b72
--- /dev/null
+++ b/SmartIrc4net/SmartIrc4net.mdp
@@ -0,0 +1,64 @@
+<Project name="SmartIrc4net" fileversion="2.0" DefaultNamespace="SmartIrc4net" language="C#" clr-version="Net_2_0" targetFramework="3.5" ctype="DotNetProject">
+ <Configurations active="Debug">
+ <Configuration name="Debug" ctype="DotNetProjectConfiguration">
+ <Output directory="bin/debug" assembly="Meebey.SmartIrc4net" />
+ <Build debugmode="True" target="Library" />
+ <Execution consolepause="False" runwithwarnings="False" runtime="MsNet" clr-version="Net_2_0" />
+ <CodeGeneration compiler="Mcs" warninglevel="4" optimize="False" unsafecodeallowed="False" generateoverflowchecks="True" definesymbols="TRACE,DEBUG,LOG4NET,NET_2_0" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
+ </Configuration>
+ <Configuration name="Release" ctype="DotNetProjectConfiguration">
+ <Output directory="bin/release" assembly="Meebey.SmartIrc4net" />
+ <Build debugmode="False" target="Library" />
+ <Execution consolepause="False" runwithwarnings="False" runtime="MsNet" clr-version="Net_2_0" />
+ <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="False" definesymbols="NET_2_0" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
+ </Configuration>
+ </Configurations>
+ <Contents>
+ <File subtype="Code" buildaction="Compile" name="src/AssemblyInfo.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/Logger.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/Consts.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/EventArgs.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/Exceptions.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcConnection/IrcConnection.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcConnection/Delegates.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcConnection/EventArgs.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcCommands/IrcCommands.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcCommands/Rfc2812.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/IrcClient.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/IrcMessageData.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/Delegates.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/EventArgs.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/IrcUser.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/Channel.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/NonRfcChannel.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/ChannelUser.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/NonRfcChannelUser.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcConnection/IrcProperties.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/ChannelInfo.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/WhoInfo.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcClient/BanInfo.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/DccChat.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/DccConnection.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/DccSend.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/Delegates.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/EventArgs.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/IrcConstants.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcFeatures/IrcFeatures.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/HttpProxyClient.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/IProxyClient.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/ProxyClientFactory.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Socks4ProxyClient.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Socks4aProxyClient.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Socks5ProxyClient.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Utils.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/EventArgs/CreateConnectionAsyncCompletedEventArgs.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/StarkSoftProxy/Exceptions/ProxyException.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/IrcConnection/ProxyType.cs" />
+ </Contents>
+ <References>
+ <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+ <ProjectReference type="Gac" localcopy="True" refto="log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=a5715cc6d5c3540b" />
+ <ProjectReference type="Gac" localcopy="True" refto="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+ </References>
+ <DeploymentInformation strategy="File" />
+</Project> \ No newline at end of file
diff --git a/SmartIrc4net/SmartIrc4net.mds b/SmartIrc4net/SmartIrc4net.mds
new file mode 100644
index 0000000..ae9b1c8
--- /dev/null
+++ b/SmartIrc4net/SmartIrc4net.mds
@@ -0,0 +1,32 @@
+<Combine fileversion="2.0" releaseversion="0.4.5" name="SmartIrc4net">
+ <Policies>
+ <ChangeLogPolicy UpdateMode="Nearest" inheritsSet="Mono">
+ <MessageStyle LineAlign="0" />
+ </ChangeLogPolicy>
+ <TextStylePolicy RemoveTrailingWhitespace="True" inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/plain" />
+ <TextStylePolicy inheritsSet="null" scope="text/x-csharp" />
+ <CSharpFormattingPolicy inheritsSet="Mono" inheritsScope="text/x-csharp" scope="text/x-csharp" />
+ </Policies>
+ <Configurations active="Debug">
+ <Configuration name="Release" ctype="CombineConfiguration">
+ <Entry build="True" name="SmartIrc4net" configuration="Release" />
+ <Entry build="True" name="Test" configuration="Release" />
+ <Entry build="True" name="Benchmark" configuration="Release" />
+ </Configuration>
+ <Configuration name="Debug" ctype="CombineConfiguration">
+ <Entry build="True" name="SmartIrc4net" configuration="Debug" />
+ <Entry build="True" name="Test" configuration="Debug" />
+ <Entry build="True" name="Benchmark" configuration="Debug" />
+ </Configuration>
+ </Configurations>
+ <StartMode startupentry="Benchmark" single="True">
+ <Execute type="None" entry="SmartIrc4net" />
+ <Execute type="None" entry="Test" />
+ <Execute type="None" entry="Benchmark" />
+ </StartMode>
+ <Entries>
+ <Entry filename="SmartIrc4net.mdp" />
+ <Entry filename="examples/test/MonoDevelop/test.mdp" />
+ <Entry filename="examples/benchmark/MonoDevelop/benchmark.mdp" />
+ </Entries>
+</Combine> \ No newline at end of file
diff --git a/SmartIrc4net/TODO b/SmartIrc4net/TODO
new file mode 100644
index 0000000..160520a
--- /dev/null
+++ b/SmartIrc4net/TODO
@@ -0,0 +1,24 @@
+/**
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ */
+
+08:09:48 <AirHead> btw, I forgot to mention, but the channel modes +q and +a are for Owner (~) and Admin (&) respectively.
+- IrcClient.AutoAwaySync, query every minute WHO of joined channels to keep away synced
+- Reconnect() / StoreRejoinChannels() should remember channel keys too!
+- add IrcNetwork property, which is guessed by default or passed with Connect()
+- Documentation
+- passive channel sync
+- AutoNickChange
+- clean message parser, channel is not always right set (need to check for replycode!)
+- DCC chat, file send/receive
+- ipv6 support?
+- add IrcConnection.HostAddress (which IP is used for the client)
+- add OnSocketTimeout event
+- add server properties to IrcConnection (required for smart mode changes etc)
+- Exception Error Handling (argument checking)
+- Use async sockets?
+- Create Debian Package
diff --git a/SmartIrc4net/aclocal.m4 b/SmartIrc4net/aclocal.m4
new file mode 100644
index 0000000..d8c18a6
--- /dev/null
+++ b/SmartIrc4net/aclocal.m4
@@ -0,0 +1,838 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.66],,
+[m4_warning([this file was generated for autoconf 2.66.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([expansions.m4])
+m4_include([mono.m4])
+m4_include([programs.m4])
diff --git a/SmartIrc4net/configure b/SmartIrc4net/configure
new file mode 100755
index 0000000..12aeb05
--- /dev/null
+++ b/SmartIrc4net/configure
@@ -0,0 +1,3915 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.66 for smartirc4net 0.4.5.1.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='smartirc4net'
+PACKAGE_TARNAME='smartirc4net'
+PACKAGE_VERSION='0.4.5.1'
+PACKAGE_STRING='smartirc4net 0.4.5.1'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+INSTALL_PKG_GAC_FALSE
+INSTALL_PKG_GAC_TRUE
+INSTALL_PKG_LIB_FALSE
+INSTALL_PKG_LIB_TRUE
+INSTALL_PKG_CONFIG_FALSE
+INSTALL_PKG_CONFIG_TRUE
+GACUTIL_FLAGS
+GACUTIL
+CSC_FLAGS
+CSC
+MCS
+CLR
+MONO
+MONO_MODULE_LIBS
+MONO_MODULE_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+expanded_libdir
+ASSEMBLY_NAME
+ASSEMBLY_VERSION
+ASSEMBLY_DESCRIPTION
+ASSEMBLY_TITLE
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_pkg_config
+enable_pkg_lib
+enable_pkg_gac
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+MONO_MODULE_CFLAGS
+MONO_MODULE_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures smartirc4net 0.4.5.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/smartirc4net]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of smartirc4net 0.4.5.1:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --disable-pkg-config Disable pkg-config install [default=NO]
+ --disable-pkg-lib Disable library install [default=NO]
+ --disable-pkg-gac Disable GAC install [default=NO]
+
+Some influential environment variables:
+ PKG_CONFIG path to pkg-config utility
+ PKG_CONFIG_PATH
+ directories to add to pkg-config's search path
+ PKG_CONFIG_LIBDIR
+ path overriding pkg-config's built-in search path
+ MONO_MODULE_CFLAGS
+ C compiler flags for MONO_MODULE, overriding pkg-config
+ MONO_MODULE_LIBS
+ linker flags for MONO_MODULE, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+smartirc4net configure 0.4.5.1
+generated by GNU Autoconf 2.66
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by smartirc4net $as_me 0.4.5.1, which was
+generated by GNU Autoconf 2.66. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test "${ac_cv_path_mkdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='smartirc4net'
+ VERSION='0.4.5.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+
+ASSEMBLY_TITLE="SmartIrc4net"
+ASSEMBLY_DESCRIPTION="IRC library for CLI"
+ASSEMBLY_NAME="Meebey.SmartIrc4net"
+ASSEMBLY_VERSION="0.4.5.0"
+
+
+
+
+
+
+ expanded_libdir=`(
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+ eval echo $libdir
+ )`
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MONO_MODULE" >&5
+$as_echo_n "checking for MONO_MODULE... " >&6; }
+
+if test -n "$MONO_MODULE_CFLAGS"; then
+ pkg_cv_MONO_MODULE_CFLAGS="$MONO_MODULE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono >= 1.2.6\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono >= 1.2.6") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MONO_MODULE_CFLAGS=`$PKG_CONFIG --cflags "mono >= 1.2.6" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$MONO_MODULE_LIBS"; then
+ pkg_cv_MONO_MODULE_LIBS="$MONO_MODULE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono >= 1.2.6\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono >= 1.2.6") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MONO_MODULE_LIBS=`$PKG_CONFIG --libs "mono >= 1.2.6" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ MONO_MODULE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono >= 1.2.6" 2>&1`
+ else
+ MONO_MODULE_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono >= 1.2.6" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$MONO_MODULE_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (mono >= 1.2.6) were not met:
+
+$MONO_MODULE_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_MODULE_CFLAGS
+and MONO_MODULE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_MODULE_CFLAGS
+and MONO_MODULE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+
+else
+ MONO_MODULE_CFLAGS=$pkg_cv_MONO_MODULE_CFLAGS
+ MONO_MODULE_LIBS=$pkg_cv_MONO_MODULE_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+
+ # Extract the first word of "mono", so it can be a program name with args.
+set dummy mono; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MONO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MONO in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MONO="$MONO" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MONO="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_MONO" && ac_cv_path_MONO="no"
+ ;;
+esac
+fi
+MONO=$ac_cv_path_MONO
+if test -n "$MONO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MONO" >&5
+$as_echo "$MONO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+ if test "xMONO" = "xno"; then
+ as_fn_error $? "You need to install 'mono'" "$LINENO" 5
+ fi
+
+
+CLR=$MONO
+
+
+
+
+ # Extract the first word of "gmcs", so it can be a program name with args.
+set dummy gmcs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MCS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MCS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MCS="$MCS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_MCS" && ac_cv_path_MCS="no"
+ ;;
+esac
+fi
+MCS=$ac_cv_path_MCS
+if test -n "$MCS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5
+$as_echo "$MCS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+ if test "xMCS" = "xno"; then
+ as_fn_error $? "You need to install 'gmcs'" "$LINENO" 5
+ fi
+
+
+CSC=$MCS
+
+CSC_FLAGS="-debug -define:TRACE,DEBUG"
+
+
+
+ for asm in $(echo "2.0,System
+" | cut -d, -f2- | sed 's/\,/ /g')
+ do
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mono 2.0 GAC for $asm.dll" >&5
+$as_echo_n "checking for Mono 2.0 GAC for $asm.dll... " >&6; }
+ if test \
+ -e "$($PKG_CONFIG --variable=libdir mono)/mono/2.0/$asm.dll" -o \
+ -e "$($PKG_CONFIG --variable=prefix mono)/lib/mono/2.0/$asm.dll"; \
+ then \
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+ as_fn_error $? "missing reqired Mono 2.0 assembly: $asm.dll" "$LINENO" 5
+ fi
+ done
+
+
+
+# Extract the first word of "gacutil", so it can be a program name with args.
+set dummy gacutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GACUTIL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $GACUTIL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GACUTIL="$GACUTIL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_GACUTIL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+GACUTIL=$ac_cv_path_GACUTIL
+if test -n "$GACUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GACUTIL" >&5
+$as_echo "$GACUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test x$GACUTIL = x; then
+ as_fn_error $? "You need gacutil" "$LINENO" 5
+fi
+
+#PKG_CHECK_MODULES([LOG4NET], [log4net])
+
+GACUTIL_FLAGS='-root $(DESTDIR)$(libdir)'
+
+
+# Check whether --enable-pkg-config was given.
+if test "${enable_pkg_config+set}" = set; then :
+ enableval=$enable_pkg_config; disable_pkg_config=yes
+else
+ disable_pkg_config=no
+
+fi
+
+ if test x$disable_pkg_config = xno; then
+ INSTALL_PKG_CONFIG_TRUE=
+ INSTALL_PKG_CONFIG_FALSE='#'
+else
+ INSTALL_PKG_CONFIG_TRUE='#'
+ INSTALL_PKG_CONFIG_FALSE=
+fi
+
+
+# Check whether --enable-pkg-lib was given.
+if test "${enable_pkg_lib+set}" = set; then :
+ enableval=$enable_pkg_lib; disable_pkg_lib=yes
+else
+ disable_pkg_lib=no
+
+fi
+
+ if test x$disable_pkg_lib = xno; then
+ INSTALL_PKG_LIB_TRUE=
+ INSTALL_PKG_LIB_FALSE='#'
+else
+ INSTALL_PKG_LIB_TRUE='#'
+ INSTALL_PKG_LIB_FALSE=
+fi
+
+
+# Check whether --enable-pkg-gac was given.
+if test "${enable_pkg_gac+set}" = set; then :
+ enableval=$enable_pkg_gac; disable_pkg_gac=yes
+else
+ disable_pkg_gac=no
+
+fi
+
+ if test x$disable_pkg_gac = xno; then
+ INSTALL_PKG_GAC_TRUE=
+ INSTALL_PKG_GAC_FALSE='#'
+else
+ INSTALL_PKG_GAC_TRUE='#'
+ INSTALL_PKG_GAC_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files Makefile smartirc4net.pc src/Makefile src/AssemblyInfo.cs"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${INSTALL_PKG_CONFIG_TRUE}" && test -z "${INSTALL_PKG_CONFIG_FALSE}"; then
+ as_fn_error $? "conditional \"INSTALL_PKG_CONFIG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${INSTALL_PKG_LIB_TRUE}" && test -z "${INSTALL_PKG_LIB_FALSE}"; then
+ as_fn_error $? "conditional \"INSTALL_PKG_LIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${INSTALL_PKG_GAC_TRUE}" && test -z "${INSTALL_PKG_GAC_FALSE}"; then
+ as_fn_error $? "conditional \"INSTALL_PKG_GAC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by smartirc4net $as_me 0.4.5.1, which was
+generated by GNU Autoconf 2.66. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+smartirc4net config.status 0.4.5.1
+configured by $0, generated by GNU Autoconf 2.66,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "smartirc4net.pc") CONFIG_FILES="$CONFIG_FILES smartirc4net.pc" ;;
+ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "src/AssemblyInfo.cs") CONFIG_FILES="$CONFIG_FILES src/AssemblyInfo.cs" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X " :F $CONFIG_FILES "
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+
+ esac
+
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
+ Configuration summary for $PACKAGE_NAME ($VERSION)
+
+ * Installation prefix: $prefix
+" >&5
+$as_echo "
+ Configuration summary for $PACKAGE_NAME ($VERSION)
+
+ * Installation prefix: $prefix
+" >&6; }
diff --git a/SmartIrc4net/configure.ac b/SmartIrc4net/configure.ac
new file mode 100644
index 0000000..af622bf
--- /dev/null
+++ b/SmartIrc4net/configure.ac
@@ -0,0 +1,73 @@
+AC_PREREQ([2.54])
+AC_INIT([smartirc4net], [0.4.5.1])
+AM_INIT_AUTOMAKE([foreign])
+AM_MAINTAINER_MODE
+
+AC_PROG_INSTALL
+
+ASSEMBLY_TITLE="SmartIrc4net"
+ASSEMBLY_DESCRIPTION="IRC library for CLI"
+ASSEMBLY_NAME="Meebey.SmartIrc4net"
+ASSEMBLY_VERSION="0.4.5.0"
+AC_SUBST(ASSEMBLY_TITLE)
+AC_SUBST(ASSEMBLY_DESCRIPTION)
+AC_SUBST(ASSEMBLY_VERSION)
+AC_SUBST(ASSEMBLY_NAME)
+
+SHAMROCK_EXPAND_LIBDIR
+SHAMROCK_CHECK_MONO_MODULE(1.2.6)
+SHAMROCK_FIND_MONO_RUNTIME
+AC_SUBST(CLR, $MONO)
+SHAMROCK_FIND_MONO_2_0_COMPILER
+AC_SUBST(CSC, $MCS)
+CSC_FLAGS="-debug -define:TRACE,DEBUG"
+AC_SUBST(CSC_FLAGS)
+SHAMROCK_CHECK_MONO_2_0_GAC_ASSEMBLIES([
+ System
+])
+
+AC_PATH_PROG(GACUTIL, gacutil)
+if test x$GACUTIL = x; then
+ AC_MSG_ERROR(You need gacutil)
+fi
+
+#PKG_CHECK_MODULES([LOG4NET], [log4net])
+
+GACUTIL_FLAGS='-root $(DESTDIR)$(libdir)'
+AC_SUBST(GACUTIL_FLAGS)
+
+AC_ARG_ENABLE(pkg-config,
+ AC_HELP_STRING([--disable-pkg-config],
+ [Disable pkg-config install [default=NO]]),
+ disable_pkg_config=yes, disable_pkg_config=no
+)
+AM_CONDITIONAL([INSTALL_PKG_CONFIG], test x$disable_pkg_config = xno)
+
+AC_ARG_ENABLE(pkg-lib,
+ AC_HELP_STRING([--disable-pkg-lib],
+ [Disable library install [default=NO]]),
+ disable_pkg_lib=yes, disable_pkg_lib=no
+)
+AM_CONDITIONAL([INSTALL_PKG_LIB], test x$disable_pkg_lib = xno)
+
+AC_ARG_ENABLE(pkg-gac,
+ AC_HELP_STRING([--disable-pkg-gac],
+ [Disable GAC install [default=NO]]),
+ disable_pkg_gac=yes, disable_pkg_gac=no
+)
+AM_CONDITIONAL([INSTALL_PKG_GAC], test x$disable_pkg_gac = xno)
+
+AC_CONFIG_FILES([
+ Makefile
+ smartirc4net.pc
+ src/Makefile
+ src/AssemblyInfo.cs
+])
+
+AC_OUTPUT
+
+AC_MSG_RESULT([
+ Configuration summary for $PACKAGE_NAME ($VERSION)
+
+ * Installation prefix: $prefix
+])
diff --git a/SmartIrc4net/expansions.m4 b/SmartIrc4net/expansions.m4
new file mode 100644
index 0000000..ba62356
--- /dev/null
+++ b/SmartIrc4net/expansions.m4
@@ -0,0 +1,50 @@
+AC_DEFUN([SHAMROCK_EXPAND_LIBDIR],
+[
+ expanded_libdir=`(
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+ eval echo $libdir
+ )`
+ AC_SUBST(expanded_libdir)
+])
+
+AC_DEFUN([SHAMROCK_EXPAND_BINDIR],
+[
+ expanded_bindir=`(
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+ eval echo $bindir
+ )`
+ AC_SUBST(expanded_bindir)
+])
+
+AC_DEFUN([SHAMROCK_EXPAND_DATADIR],
+[
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+
+ expanded_datadir=`(eval echo $datadir)`
+ expanded_datadir=`(eval echo $expanded_datadir)`
+
+ AC_SUBST(expanded_datadir)
+])
+
diff --git a/SmartIrc4net/mono.m4 b/SmartIrc4net/mono.m4
new file mode 100644
index 0000000..641eee2
--- /dev/null
+++ b/SmartIrc4net/mono.m4
@@ -0,0 +1,55 @@
+AC_DEFUN([SHAMROCK_FIND_MONO_1_0_COMPILER],
+[
+ SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, mcs)
+])
+
+AC_DEFUN([SHAMROCK_FIND_MONO_2_0_COMPILER],
+[
+ SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, gmcs)
+])
+
+AC_DEFUN([SHAMROCK_FIND_MONO_RUNTIME],
+[
+ SHAMROCK_FIND_PROGRAM_OR_BAIL(MONO, mono)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_MODULE],
+[
+ PKG_CHECK_MODULES(MONO_MODULE, mono >= $1)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_MODULE_NOBAIL],
+[
+ PKG_CHECK_MODULES(MONO_MODULE, mono >= $1,
+ HAVE_MONO_MODULE=yes, HAVE_MONO_MODULE=no)
+ AC_SUBST(HAVE_MONO_MODULE)
+])
+
+AC_DEFUN([_SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES],
+[
+ for asm in $(echo "$*" | cut -d, -f2- | sed 's/\,/ /g')
+ do
+ AC_MSG_CHECKING([for Mono $1 GAC for $asm.dll])
+ if test \
+ -e "$($PKG_CONFIG --variable=libdir mono)/mono/$1/$asm.dll" -o \
+ -e "$($PKG_CONFIG --variable=prefix mono)/lib/mono/$1/$asm.dll"; \
+ then \
+ AC_MSG_RESULT([found])
+ else
+ AC_MSG_RESULT([not found])
+ AC_MSG_ERROR([missing reqired Mono $1 assembly: $asm.dll])
+ fi
+ done
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_1_0_GAC_ASSEMBLIES],
+[
+ _SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES(1.0, $*)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_2_0_GAC_ASSEMBLIES],
+[
+ _SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES(2.0, $*)
+])
+
+
diff --git a/SmartIrc4net/programs.m4 b/SmartIrc4net/programs.m4
new file mode 100644
index 0000000..8273868
--- /dev/null
+++ b/SmartIrc4net/programs.m4
@@ -0,0 +1,15 @@
+AC_DEFUN([SHAMROCK_FIND_PROGRAM],
+[
+ AC_PATH_PROG($1, $2, $3)
+ AC_SUBST($1)
+])
+
+AC_DEFUN([SHAMROCK_FIND_PROGRAM_OR_BAIL],
+[
+ SHAMROCK_FIND_PROGRAM($1, $2, no)
+ if test "x$1" = "xno"; then
+ AC_MSG_ERROR([You need to install '$2'])
+ fi
+])
+
+
diff --git a/SmartIrc4net/smartirc4net.pc.in b/SmartIrc4net/smartirc4net.pc.in
new file mode 100644
index 0000000..fdcd4f7
--- /dev/null
+++ b/SmartIrc4net/smartirc4net.pc.in
@@ -0,0 +1,8 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+libdir=@libdir@
+
+Name: @ASSEMBLY_TITLE@
+Description: @ASSEMBLY_DESCRIPTION@
+Version: @ASSEMBLY_VERSION@
+Libs: -r:${libdir}/@PACKAGE_NAME@/@ASSEMBLY_NAME@.dll
diff --git a/SmartIrc4net/smartirc4net.snk b/SmartIrc4net/smartirc4net.snk
new file mode 100644
index 0000000..f9aef3f
--- /dev/null
+++ b/SmartIrc4net/smartirc4net.snk
Binary files differ
diff --git a/SmartIrc4net/src/AssemblyInfo.cs b/SmartIrc4net/src/AssemblyInfo.cs
new file mode 100644
index 0000000..78a0aa1
--- /dev/null
+++ b/SmartIrc4net/src/AssemblyInfo.cs
@@ -0,0 +1,70 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Information about this assembly is defined by the following
+// attributes.
+//
+// change them to the information which is associated with the assembly
+// you compile.
+
+[assembly: CLSCompliant(true)]
+[assembly: ComVisible(false)]
+
+[assembly: AssemblyTitle("SmartIrc4net")]
+[assembly: AssemblyDescription("IRC library for CLI")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("qNETp")]
+[assembly: AssemblyProduct("SmartIrc4net")]
+[assembly: AssemblyCopyright("2003-2008 (C) Mirco Bauer <meebey@meebey.net>")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has following format :
+//
+// Major.Minor.Build.Revision
+//
+// You can specify all values by your own or you can build default build and revision
+// numbers with the '*' character (the default):
+
+[assembly: AssemblyVersion("0.4.5.0")]
+
+// The following attributes specify the key for the sign of your assembly. See the
+// .NET Framework documentation for more information about signing.
+// This is not required, if you don't want signing let these attributes like they're.
+#if DELAY_SIGN
+[assembly: AssemblyDelaySign(true)]
+[assembly: AssemblyKeyFile("../SmartIrc4net-pub.snk")]
+#else
+[assembly: AssemblyDelaySign(false)]
+[assembly: AssemblyKeyFile("")]
+#endif
diff --git a/SmartIrc4net/src/AssemblyInfo.cs.in b/SmartIrc4net/src/AssemblyInfo.cs.in
new file mode 100644
index 0000000..7207b03
--- /dev/null
+++ b/SmartIrc4net/src/AssemblyInfo.cs.in
@@ -0,0 +1,70 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Information about this assembly is defined by the following
+// attributes.
+//
+// change them to the information which is associated with the assembly
+// you compile.
+
+[assembly: CLSCompliant(true)]
+[assembly: ComVisible(false)]
+
+[assembly: AssemblyTitle("@ASSEMBLY_TITLE@")]
+[assembly: AssemblyDescription("@ASSEMBLY_DESCRIPTION@")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("qNETp")]
+[assembly: AssemblyProduct("SmartIrc4net")]
+[assembly: AssemblyCopyright("2003-2008 (C) Mirco Bauer <meebey@meebey.net>")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has following format :
+//
+// Major.Minor.Build.Revision
+//
+// You can specify all values by your own or you can build default build and revision
+// numbers with the '*' character (the default):
+
+[assembly: AssemblyVersion("@ASSEMBLY_VERSION@")]
+
+// The following attributes specify the key for the sign of your assembly. See the
+// .NET Framework documentation for more information about signing.
+// This is not required, if you don't want signing let these attributes like they're.
+#if DELAY_SIGN
+[assembly: AssemblyDelaySign(true)]
+[assembly: AssemblyKeyFile("../SmartIrc4net-pub.snk")]
+#else
+[assembly: AssemblyDelaySign(false)]
+[assembly: AssemblyKeyFile("")]
+#endif
diff --git a/SmartIrc4net/src/Consts.cs b/SmartIrc4net/src/Consts.cs
new file mode 100644
index 0000000..0cd0260
--- /dev/null
+++ b/SmartIrc4net/src/Consts.cs
@@ -0,0 +1,239 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ public enum Priority
+ {
+ Low,
+ BelowMedium,
+ Medium,
+ AboveMedium,
+ High,
+ Critical
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public enum SendType
+ {
+ Message,
+ Action,
+ Notice,
+ CtcpReply,
+ CtcpRequest
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public enum ReceiveType
+ {
+ Info,
+ Login,
+ Motd,
+ List,
+ Join,
+ Kick,
+ Part,
+ Invite,
+ Quit,
+ Who,
+ WhoIs,
+ WhoWas,
+ Name,
+ Topic,
+ BanList,
+ NickChange,
+ TopicChange,
+ UserMode,
+ UserModeChange,
+ ChannelMode,
+ ChannelModeChange,
+ ChannelMessage,
+ ChannelAction,
+ ChannelNotice,
+ QueryMessage,
+ QueryAction,
+ QueryNotice,
+ CtcpReply,
+ CtcpRequest,
+ Error,
+ ErrorMessage,
+ Unknown
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public enum ReplyCode: int
+ {
+ Null = 000,
+ Welcome = 001,
+ YourHost = 002,
+ Created = 003,
+ MyInfo = 004,
+ Bounce = 005,
+ TraceLink = 200,
+ TraceConnecting = 201,
+ TraceHandshake = 202,
+ TraceUnknown = 203,
+ TraceOperator = 204,
+ TraceUser = 205,
+ TraceServer = 206,
+ TraceService = 207,
+ TraceNewType = 208,
+ TraceClass = 209,
+ TraceReconnect = 210,
+ StatsLinkInfo = 211,
+ StatsCommands = 212,
+ EndOfStats = 219,
+ UserModeIs = 221,
+ ServiceList = 234,
+ ServiceListEnd = 235,
+ StatsUptime = 242,
+ StatsOLine = 243,
+ LuserClient = 251,
+ LuserOp = 252,
+ LuserUnknown = 253,
+ LuserChannels = 254,
+ LuserMe = 255,
+ AdminMe = 256,
+ AdminLocation1 = 257,
+ AdminLocation2 = 258,
+ AdminEmail = 259,
+ TraceLog = 261,
+ TraceEnd = 262,
+ TryAgain = 263,
+ Away = 301,
+ UserHost = 302,
+ IsOn = 303,
+ UnAway = 305,
+ NowAway = 306,
+ WhoIsUser = 311,
+ WhoIsServer = 312,
+ WhoIsOperator = 313,
+ WhoWasUser = 314,
+ EndOfWho = 315,
+ WhoIsIdle = 317,
+ EndOfWhoIs = 318,
+ WhoIsChannels = 319,
+ ListStart = 321,
+ List = 322,
+ ListEnd = 323,
+ ChannelModeIs = 324,
+ UniqueOpIs = 325,
+ NoTopic = 331,
+ Topic = 332,
+ Inviting = 341,
+ Summoning = 342,
+ InviteList = 346,
+ EndOfInviteList = 347,
+ ExceptionList = 348,
+ EndOfExceptionList = 349,
+ Version = 351,
+ WhoReply = 352,
+ NamesReply = 353,
+ Links = 364,
+ EndOfLinks = 365,
+ EndOfNames = 366,
+ BanList = 367,
+ EndOfBanList = 368,
+ EndOfWhoWas = 369,
+ Info = 371,
+ Motd = 372,
+ EndOfInfo = 374,
+ MotdStart = 375,
+ EndOfMotd = 376,
+ YouAreOper = 381,
+ Rehashing = 382,
+ YouAreService = 383,
+ Time = 391,
+ UsersStart = 392,
+ Users = 393,
+ EndOfUsers = 394,
+ NoUsers = 395,
+ ErrorNoSuchNickname = 401,
+ ErrorNoSuchServer = 402,
+ ErrorNoSuchChannel = 403,
+ ErrorCannotSendToChannel = 404,
+ ErrorTooManyChannels = 405,
+ ErrorWasNoSuchNickname = 406,
+ ErrorTooManyTargets = 407,
+ ErrorNoSuchService = 408,
+ ErrorNoOrigin = 409,
+ ErrorNoRecipient = 411,
+ ErrorNoTextToSend = 412,
+ ErrorNoTopLevel = 413,
+ ErrorWildTopLevel = 414,
+ ErrorBadMask = 415,
+ ErrorUnknownCommand = 421,
+ ErrorNoMotd = 422,
+ ErrorNoAdminInfo = 423,
+ ErrorFileError = 424,
+ ErrorNoNicknameGiven = 431,
+ ErrorErroneusNickname = 432,
+ ErrorNicknameInUse = 433,
+ ErrorNicknameCollision = 436,
+ ErrorUnavailableResource = 437,
+ ErrorUserNotInChannel = 441,
+ ErrorNotOnChannel = 442,
+ ErrorUserOnChannel = 443,
+ ErrorNoLogin = 444,
+ ErrorSummonDisabled = 445,
+ ErrorUsersDisabled = 446,
+ ErrorNotRegistered = 451,
+ ErrorNeedMoreParams = 461,
+ ErrorAlreadyRegistered = 462,
+ ErrorNoPermissionForHost = 463,
+ ErrorPasswordMismatch = 464,
+ ErrorYouAreBannedCreep = 465,
+ ErrorYouWillBeBanned = 466,
+ ErrorKeySet = 467,
+ ErrorChannelIsFull = 471,
+ ErrorUnknownMode = 472,
+ ErrorInviteOnlyChannel = 473,
+ ErrorBannedFromChannel = 474,
+ ErrorBadChannelKey = 475,
+ ErrorBadChannelMask = 476,
+ ErrorNoChannelModes = 477,
+ ErrorBanListFull = 478,
+ ErrorNoPrivileges = 481,
+ ErrorChannelOpPrivilegesNeeded = 482,
+ ErrorCannotKillServer = 483,
+ ErrorRestricted = 484,
+ ErrorUniqueOpPrivilegesNeeded = 485,
+ ErrorNoOperHost = 491,
+ ErrorUserModeUnknownFlag = 501,
+ ErrorUsersDoNotMatch = 502
+ }
+}
diff --git a/SmartIrc4net/src/EventArgs.cs b/SmartIrc4net/src/EventArgs.cs
new file mode 100644
index 0000000..c26733b
--- /dev/null
+++ b/SmartIrc4net/src/EventArgs.cs
@@ -0,0 +1,56 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Collections.Specialized;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public class IrcEventArgs : EventArgs
+ {
+ private readonly IrcMessageData _Data;
+
+ /// <summary>
+ ///
+ /// </summary>
+ public IrcMessageData Data {
+ get {
+ return _Data;
+ }
+ }
+
+ internal IrcEventArgs(IrcMessageData data)
+ {
+ _Data = data;
+ }
+ }
+}
diff --git a/SmartIrc4net/src/Exceptions.cs b/SmartIrc4net/src/Exceptions.cs
new file mode 100644
index 0000000..a2dd5a7
--- /dev/null
+++ b/SmartIrc4net/src/Exceptions.cs
@@ -0,0 +1,138 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Runtime.Serialization;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <threadsafety static="true" instance="true" />
+ [Serializable()]
+ public class SmartIrc4netException : ApplicationException
+ {
+ public SmartIrc4netException() : base()
+ {
+ }
+
+ public SmartIrc4netException(string message) : base(message)
+ {
+ }
+
+ public SmartIrc4netException(string message, Exception e) : base(message, e)
+ {
+ }
+
+ protected SmartIrc4netException(SerializationInfo info, StreamingContext context) : base(info, context)
+ {
+ }
+ }
+
+ /// <threadsafety static="true" instance="true" />
+ [Serializable()]
+ public class ConnectionException : SmartIrc4netException
+ {
+ public ConnectionException() : base()
+ {
+ }
+
+ public ConnectionException(string message) : base(message)
+ {
+ }
+
+ public ConnectionException(string message, Exception e) : base(message, e)
+ {
+ }
+
+ protected ConnectionException(SerializationInfo info, StreamingContext context) : base(info, context)
+ {
+ }
+ }
+
+ /// <threadsafety static="true" instance="true" />
+ [Serializable()]
+ public class CouldNotConnectException : ConnectionException
+ {
+ public CouldNotConnectException() : base()
+ {
+ }
+
+ public CouldNotConnectException(string message) : base(message)
+ {
+ }
+
+ public CouldNotConnectException(string message, Exception e) : base(message, e)
+ {
+ }
+
+ protected CouldNotConnectException(SerializationInfo info, StreamingContext context) : base(info, context)
+ {
+ }
+ }
+
+ /// <threadsafety static="true" instance="true" />
+ [Serializable()]
+ public class NotConnectedException : ConnectionException
+ {
+ public NotConnectedException() : base()
+ {
+ }
+
+ public NotConnectedException(string message) : base(message)
+ {
+ }
+
+ public NotConnectedException(string message, Exception e) : base(message, e)
+ {
+ }
+
+ protected NotConnectedException(SerializationInfo info, StreamingContext context) : base(info, context)
+ {
+ }
+ }
+
+ /// <threadsafety static="true" instance="true" />
+ [Serializable()]
+ public class AlreadyConnectedException : ConnectionException
+ {
+ public AlreadyConnectedException() : base()
+ {
+ }
+
+ public AlreadyConnectedException(string message) : base(message)
+ {
+ }
+
+ public AlreadyConnectedException(string message, Exception e) : base(message, e)
+ {
+ }
+
+ protected AlreadyConnectedException(SerializationInfo info, StreamingContext context) : base(info, context)
+ {
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/BanInfo.cs b/SmartIrc4net/src/IrcClient/BanInfo.cs
new file mode 100644
index 0000000..68a6869
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/BanInfo.cs
@@ -0,0 +1,64 @@
+/*
+ * $Id: IrcUser.cs 198 2005-06-08 16:50:11Z meebey $
+ * $URL: svn+ssh://svn.qnetp.net/svn/smartirc/SmartIrc4net/trunk/src/IrcClient/IrcUser.cs $
+ * $Rev: 198 $
+ * $Author: meebey $
+ * $Date: 2005-06-08 18:50:11 +0200 (Wed, 08 Jun 2005) $
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+
+using System;
+
+namespace Meebey.SmartIrc4net
+{
+ public class BanInfo
+ {
+ private string f_Channel;
+ private string f_Mask;
+
+ public string Channel {
+ get {
+ return f_Channel;
+ }
+ }
+
+ public string Mask {
+ get {
+ return f_Mask;
+ }
+ }
+
+ private BanInfo()
+ {
+ }
+
+ public static BanInfo Parse(IrcMessageData data)
+ {
+ BanInfo info = new BanInfo();
+ // :magnet.oftc.net 367 meebey #smuxi test!test@test meebey!~meebey@e176002059.adsl.alicedsl.de 1216309801..
+ info.f_Channel = data.RawMessageArray[3];
+ info.f_Mask= data.RawMessageArray[4];
+ return info;
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/Channel.cs b/SmartIrc4net/src/IrcClient/Channel.cs
new file mode 100644
index 0000000..5c27b2d
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/Channel.cs
@@ -0,0 +1,247 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public class Channel
+ {
+ private string _Name;
+ private string _Key = String.Empty;
+ private Hashtable _Users = Hashtable.Synchronized(new Hashtable(new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer()));
+ private Hashtable _Ops = Hashtable.Synchronized(new Hashtable(new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer()));
+ private Hashtable _Voices = Hashtable.Synchronized(new Hashtable(new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer()));
+ private StringCollection _Bans = new StringCollection();
+ private string _Topic = String.Empty;
+ private int _UserLimit;
+ private string _Mode = String.Empty;
+ private DateTime _ActiveSyncStart;
+ private DateTime _ActiveSyncStop;
+ private TimeSpan _ActiveSyncTime;
+ private bool _IsSycned;
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="name"> </param>
+ internal Channel(string name)
+ {
+ _Name = name;
+ _ActiveSyncStart = DateTime.Now;
+ }
+
+#if LOG4NET
+ ~Channel()
+ {
+ Logger.ChannelSyncing.Debug("Channel ("+Name+") destroyed");
+ }
+#endif
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public string Name {
+ get {
+ return _Name;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public string Key {
+ get {
+ return _Key;
+ }
+ set {
+ _Key = value;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public Hashtable Users {
+ get {
+ return (Hashtable)_Users.Clone();
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ internal Hashtable UnsafeUsers {
+ get {
+ return _Users;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public Hashtable Ops {
+ get {
+ return (Hashtable)_Ops.Clone();
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ internal Hashtable UnsafeOps {
+ get {
+ return _Ops;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public Hashtable Voices {
+ get {
+ return (Hashtable)_Voices.Clone();
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ internal Hashtable UnsafeVoices {
+ get {
+ return _Voices;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public StringCollection Bans {
+ get {
+ return _Bans;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public string Topic {
+ get {
+ return _Topic;
+ }
+ set {
+ _Topic = value;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public int UserLimit {
+ get {
+ return _UserLimit;
+ }
+ set {
+ _UserLimit = value;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public string Mode {
+ get {
+ return _Mode;
+ }
+ set {
+ _Mode = value;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public DateTime ActiveSyncStart {
+ get {
+ return _ActiveSyncStart;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public DateTime ActiveSyncStop {
+ get {
+ return _ActiveSyncStop;
+ }
+ set {
+ _ActiveSyncStop = value;
+ _ActiveSyncTime = _ActiveSyncStop.Subtract(_ActiveSyncStart);
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public TimeSpan ActiveSyncTime {
+ get {
+ return _ActiveSyncTime;
+ }
+ }
+
+ public bool IsSycned {
+ get {
+ return _IsSycned;
+ }
+ set {
+ _IsSycned = value;
+ }
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/ChannelInfo.cs b/SmartIrc4net/src/IrcClient/ChannelInfo.cs
new file mode 100644
index 0000000..8224408
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/ChannelInfo.cs
@@ -0,0 +1,64 @@
+/*
+ * $Id: IrcUser.cs 198 2005-06-08 16:50:11Z meebey $
+ * $URL: svn+ssh://svn.qnetp.net/svn/smartirc/SmartIrc4net/trunk/src/IrcClient/IrcUser.cs $
+ * $Rev: 198 $
+ * $Author: meebey $
+ * $Date: 2005-06-08 18:50:11 +0200 (Wed, 08 Jun 2005) $
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+
+namespace Meebey.SmartIrc4net
+{
+ public class ChannelInfo
+ {
+ private string f_Channel;
+ private int f_UserCount;
+ private string f_Topic;
+
+ public string Channel {
+ get {
+ return f_Channel;
+ }
+ }
+
+ public int UserCount {
+ get {
+ return f_UserCount;
+ }
+ }
+
+ public string Topic {
+ get {
+ return f_Topic;
+ }
+ }
+
+ internal ChannelInfo(string channel, int userCount, string topic)
+ {
+ f_Channel = channel;
+ f_UserCount = userCount;
+ f_Topic = topic;
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/ChannelUser.cs b/SmartIrc4net/src/IrcClient/ChannelUser.cs
new file mode 100644
index 0000000..66ae7bd
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/ChannelUser.cs
@@ -0,0 +1,193 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ /// This class manages the information of a user within a channel.
+ /// </summary>
+ /// <remarks>
+ /// only used with channel sync
+ /// </remarks>
+ /// <threadsafety static="true" instance="true" />
+ public class ChannelUser
+ {
+ private string _Channel;
+ private IrcUser _IrcUser;
+ private bool _IsOp;
+ private bool _IsVoice;
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"> </param>
+ /// <param name="ircuser"> </param>
+ internal ChannelUser(string channel, IrcUser ircuser)
+ {
+ _Channel = channel;
+ _IrcUser = ircuser;
+ }
+
+#if LOG4NET
+ ~ChannelUser()
+ {
+ Logger.ChannelSyncing.Debug("ChannelUser ("+Channel+":"+IrcUser.Nick+") destroyed");
+ }
+#endif
+
+ /// <summary>
+ /// Gets the channel name
+ /// </summary>
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ /// <summary>
+ /// Gets the server operator status of the user
+ /// </summary>
+ public bool IsIrcOp {
+ get {
+ return _IrcUser.IsIrcOp;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the op flag of the user (+o)
+ /// </summary>
+ /// <remarks>
+ /// only used with channel sync
+ /// </remarks>
+ public bool IsOp {
+ get {
+ return _IsOp;
+ }
+ set {
+ _IsOp = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the voice flag of the user (+v)
+ /// </summary>
+ /// <remarks>
+ /// only used with channel sync
+ /// </remarks>
+ public bool IsVoice {
+ get {
+ return _IsVoice;
+ }
+ set {
+ _IsVoice = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets the away status of the user
+ /// </summary>
+ public bool IsAway {
+ get {
+ return _IrcUser.IsAway;
+ }
+ }
+
+ /// <summary>
+ /// Gets the underlaying IrcUser object
+ /// </summary>
+ public IrcUser IrcUser {
+ get {
+ return _IrcUser;
+ }
+ }
+
+ /// <summary>
+ /// Gets the nickname of the user
+ /// </summary>
+ public string Nick {
+ get {
+ return _IrcUser.Nick;
+ }
+ }
+
+ /// <summary>
+ /// Gets the identity (username) of the user, which is used by some IRC networks for authentication.
+ /// </summary>
+ public string Ident {
+ get {
+ return _IrcUser.Ident;
+ }
+ }
+
+ /// <summary>
+ /// Gets the hostname of the user,
+ /// </summary>
+ public string Host {
+ get {
+ return _IrcUser.Host;
+ }
+ }
+
+ /// <summary>
+ /// Gets the supposed real name of the user.
+ /// </summary>
+ public string Realname {
+ get {
+ return _IrcUser.Realname;
+ }
+ }
+
+ /// <summary>
+ /// Gets the server the user is connected to.
+ /// </summary>
+ /// <value> </value>
+ public string Server {
+ get {
+ return _IrcUser.Server;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the count of hops between you and the user's server
+ /// </summary>
+ public int HopCount {
+ get {
+ return _IrcUser.HopCount;
+ }
+ }
+
+ /// <summary>
+ /// Gets the list of channels the user has joined
+ /// </summary>
+ public string[] JoinedChannels {
+ get {
+ return _IrcUser.JoinedChannels;
+ }
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/Delegates.cs b/SmartIrc4net/src/IrcClient/Delegates.cs
new file mode 100644
index 0000000..2dc40e0
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/Delegates.cs
@@ -0,0 +1,58 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+namespace Meebey.SmartIrc4net
+{
+ public delegate void IrcEventHandler(object sender, IrcEventArgs e);
+ public delegate void CtcpEventHandler(object sender, CtcpEventArgs e);
+ public delegate void ActionEventHandler(object sender, ActionEventArgs e);
+ public delegate void ErrorEventHandler(object sender, ErrorEventArgs e);
+ public delegate void PingEventHandler(object sender, PingEventArgs e);
+ public delegate void KickEventHandler(object sender, KickEventArgs e);
+ public delegate void JoinEventHandler(object sender, JoinEventArgs e);
+ public delegate void NamesEventHandler(object sender, NamesEventArgs e);
+ public delegate void ListEventHandler(object sender, ListEventArgs e);
+ public delegate void PartEventHandler(object sender, PartEventArgs e);
+ public delegate void InviteEventHandler(object sender, InviteEventArgs e);
+ public delegate void OpEventHandler(object sender, OpEventArgs e);
+ public delegate void DeopEventHandler(object sender, DeopEventArgs e);
+ public delegate void HalfopEventHandler(object sender, HalfopEventArgs e);
+ public delegate void DehalfopEventHandler(object sender, DehalfopEventArgs e);
+ public delegate void VoiceEventHandler(object sender, VoiceEventArgs e);
+ public delegate void DevoiceEventHandler(object sender, DevoiceEventArgs e);
+ public delegate void BanEventHandler(object sender, BanEventArgs e);
+ public delegate void UnbanEventHandler(object sender, UnbanEventArgs e);
+ public delegate void TopicEventHandler(object sender, TopicEventArgs e);
+ public delegate void TopicChangeEventHandler(object sender, TopicChangeEventArgs e);
+ public delegate void NickChangeEventHandler(object sender, NickChangeEventArgs e);
+ public delegate void QuitEventHandler(object sender, QuitEventArgs e);
+ public delegate void AwayEventHandler(object sender, AwayEventArgs e);
+ public delegate void WhoEventHandler(object sender, WhoEventArgs e);
+ public delegate void MotdEventHandler(object sender, MotdEventArgs e);
+ public delegate void PongEventHandler(object sender, PongEventArgs e);
+}
diff --git a/SmartIrc4net/src/IrcClient/EventArgs.cs b/SmartIrc4net/src/IrcClient/EventArgs.cs
new file mode 100644
index 0000000..648348c
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/EventArgs.cs
@@ -0,0 +1,853 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Collections.Specialized;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ public class ActionEventArgs : CtcpEventArgs
+ {
+ private string _ActionMessage;
+
+ public string ActionMessage {
+ get {
+ return _ActionMessage;
+ }
+ }
+
+ internal ActionEventArgs(IrcMessageData data, string actionmsg) : base(data, "ACTION", actionmsg)
+ {
+ _ActionMessage = actionmsg;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class CtcpEventArgs : IrcEventArgs
+ {
+ private string _CtcpCommand;
+ private string _CtcpParameter;
+
+ public string CtcpCommand {
+ get {
+ return _CtcpCommand;
+ }
+ }
+
+ public string CtcpParameter {
+ get {
+ return _CtcpParameter;
+ }
+ }
+
+ internal CtcpEventArgs(IrcMessageData data, string ctcpcmd, string ctcpparam) : base(data)
+ {
+ _CtcpCommand = ctcpcmd;
+ _CtcpParameter = ctcpparam;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class ErrorEventArgs : IrcEventArgs
+ {
+ private string _ErrorMessage;
+
+ public string ErrorMessage {
+ get {
+ return _ErrorMessage;
+ }
+ }
+
+ internal ErrorEventArgs(IrcMessageData data, string errormsg) : base(data)
+ {
+ _ErrorMessage = errormsg;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class MotdEventArgs : IrcEventArgs
+ {
+ private string _MotdMessage;
+
+ public string MotdMessage {
+ get {
+ return _MotdMessage;
+ }
+ }
+
+ internal MotdEventArgs(IrcMessageData data, string motdmsg) : base(data)
+ {
+ _MotdMessage = motdmsg;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class PingEventArgs : IrcEventArgs
+ {
+ private string _PingData;
+
+ public string PingData {
+ get {
+ return _PingData;
+ }
+ }
+
+ internal PingEventArgs(IrcMessageData data, string pingdata) : base(data)
+ {
+ _PingData = pingdata;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class PongEventArgs : IrcEventArgs
+ {
+ private TimeSpan _Lag;
+
+ public TimeSpan Lag {
+ get {
+ return _Lag;
+ }
+ }
+
+ internal PongEventArgs(IrcMessageData data, TimeSpan lag) : base(data)
+ {
+ _Lag = lag;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class KickEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Whom;
+ private string _KickReason;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Whom {
+ get {
+ return _Whom;
+ }
+ }
+
+ public string KickReason {
+ get {
+ return _KickReason;
+ }
+ }
+
+ internal KickEventArgs(IrcMessageData data, string channel, string who, string whom, string kickreason) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Whom = whom;
+ _KickReason = kickreason;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class JoinEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ internal JoinEventArgs(IrcMessageData data, string channel, string who) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class NamesEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string[] _UserList;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string[] UserList {
+ get {
+ return _UserList;
+ }
+ }
+
+ internal NamesEventArgs(IrcMessageData data, string channel, string[] userlist) : base(data)
+ {
+ _Channel = channel;
+ _UserList = userlist;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class ListEventArgs : IrcEventArgs
+ {
+ private ChannelInfo f_ListInfo;
+
+ public ChannelInfo ListInfo {
+ get {
+ return f_ListInfo;
+ }
+ }
+
+ internal ListEventArgs(IrcMessageData data, ChannelInfo listInfo) : base(data)
+ {
+ f_ListInfo = listInfo;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class InviteEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ internal InviteEventArgs(IrcMessageData data, string channel, string who) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class PartEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _PartMessage;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string PartMessage {
+ get {
+ return _PartMessage;
+ }
+ }
+
+ internal PartEventArgs(IrcMessageData data, string channel, string who, string partmessage) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _PartMessage = partmessage;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class WhoEventArgs : IrcEventArgs
+ {
+ private WhoInfo f_WhoInfo;
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public string Channel {
+ get {
+ return f_WhoInfo.Channel;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public string Nick {
+ get {
+ return f_WhoInfo.Nick;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public string Ident {
+ get {
+ return f_WhoInfo.Ident;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public string Host {
+ get {
+ return f_WhoInfo.Host;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public string Realname {
+ get {
+ return f_WhoInfo.Realname;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public bool IsAway {
+ get {
+ return f_WhoInfo.IsAway;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public bool IsOp {
+ get {
+ return f_WhoInfo.IsOp;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public bool IsVoice {
+ get {
+ return f_WhoInfo.IsVoice;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public bool IsIrcOp {
+ get {
+ return f_WhoInfo.IsIrcOp;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public string Server {
+ get {
+ return f_WhoInfo.Server;
+ }
+ }
+
+ [Obsolete("Use WhoEventArgs.WhoInfo instead.")]
+ public int HopCount {
+ get {
+ return f_WhoInfo.HopCount;
+ }
+ }
+
+ public WhoInfo WhoInfo {
+ get {
+ return f_WhoInfo;
+ }
+ }
+
+ internal WhoEventArgs(IrcMessageData data, WhoInfo whoInfo) : base(data)
+ {
+ f_WhoInfo = whoInfo;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class QuitEventArgs : IrcEventArgs
+ {
+ private string _Who;
+ private string _QuitMessage;
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string QuitMessage {
+ get {
+ return _QuitMessage;
+ }
+ }
+
+ internal QuitEventArgs(IrcMessageData data, string who, string quitmessage) : base(data)
+ {
+ _Who = who;
+ _QuitMessage = quitmessage;
+ }
+ }
+
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class AwayEventArgs : IrcEventArgs
+ {
+ private string _Who;
+ private string _AwayMessage;
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string AwayMessage{
+ get {
+ return _AwayMessage;
+ }
+ }
+
+ internal AwayEventArgs(IrcMessageData data, string who, string awaymessage) : base(data)
+ {
+ _Who = who;
+ _AwayMessage = awaymessage;
+ }
+ }
+ /// <summary>
+ ///
+ /// </summary>
+ public class NickChangeEventArgs : IrcEventArgs
+ {
+ private string _OldNickname;
+ private string _NewNickname;
+
+ public string OldNickname {
+ get {
+ return _OldNickname;
+ }
+ }
+
+ public string NewNickname {
+ get {
+ return _NewNickname;
+ }
+ }
+
+ internal NickChangeEventArgs(IrcMessageData data, string oldnick, string newnick) : base(data)
+ {
+ _OldNickname = oldnick;
+ _NewNickname = newnick;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class TopicEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Topic;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Topic {
+ get {
+ return _Topic;
+ }
+ }
+
+ internal TopicEventArgs(IrcMessageData data, string channel, string topic) : base(data)
+ {
+ _Channel = channel;
+ _Topic = topic;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class TopicChangeEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _NewTopic;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string NewTopic {
+ get {
+ return _NewTopic;
+ }
+ }
+
+ internal TopicChangeEventArgs(IrcMessageData data, string channel, string who, string newtopic) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _NewTopic = newtopic;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class BanEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Hostmask;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Hostmask {
+ get {
+ return _Hostmask;
+ }
+ }
+
+ internal BanEventArgs(IrcMessageData data, string channel, string who, string hostmask) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Hostmask = hostmask;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class UnbanEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Hostmask;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Hostmask {
+ get {
+ return _Hostmask;
+ }
+ }
+
+ internal UnbanEventArgs(IrcMessageData data, string channel, string who, string hostmask) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Hostmask = hostmask;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class OpEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Whom;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Whom {
+ get {
+ return _Whom;
+ }
+ }
+
+ internal OpEventArgs(IrcMessageData data, string channel, string who, string whom) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Whom = whom;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class DeopEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Whom;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Whom {
+ get {
+ return _Whom;
+ }
+ }
+
+ internal DeopEventArgs(IrcMessageData data, string channel, string who, string whom) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Whom = whom;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class HalfopEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Whom;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Whom {
+ get {
+ return _Whom;
+ }
+ }
+
+ internal HalfopEventArgs(IrcMessageData data, string channel, string who, string whom) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Whom = whom;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class DehalfopEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Whom;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Whom {
+ get {
+ return _Whom;
+ }
+ }
+
+ internal DehalfopEventArgs(IrcMessageData data, string channel, string who, string whom) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Whom = whom;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class VoiceEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Whom;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Whom {
+ get {
+ return _Whom;
+ }
+ }
+
+ internal VoiceEventArgs(IrcMessageData data, string channel, string who, string whom) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Whom = whom;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class DevoiceEventArgs : IrcEventArgs
+ {
+ private string _Channel;
+ private string _Who;
+ private string _Whom;
+
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ public string Who {
+ get {
+ return _Who;
+ }
+ }
+
+ public string Whom {
+ get {
+ return _Whom;
+ }
+ }
+
+ internal DevoiceEventArgs(IrcMessageData data, string channel, string who, string whom) : base(data)
+ {
+ _Channel = channel;
+ _Who = who;
+ _Whom = whom;
+ }
+ }
+
+}
diff --git a/SmartIrc4net/src/IrcClient/IrcClient.cs b/SmartIrc4net/src/IrcClient/IrcClient.cs
new file mode 100644
index 0000000..66ab0c0
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/IrcClient.cs
@@ -0,0 +1,2663 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2008 Mirco Bauer <meebey@meebey.net>
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ /// This layer is an event driven high-level API with all features you could need for IRC programming.
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public class IrcClient : IrcCommands
+ {
+ private string _Nickname = string.Empty;
+ private string[] _NicknameList;
+ private int _CurrentNickname;
+ private string _Realname = string.Empty;
+ private string _Usermode = string.Empty;
+ private int _IUsermode;
+ private string _Username = string.Empty;
+ private string _Password = string.Empty;
+ private bool _IsAway;
+ private string _CtcpVersion;
+ private bool _ActiveChannelSyncing;
+ private bool _PassiveChannelSyncing;
+ private bool _AutoJoinOnInvite;
+ private bool _AutoRejoin;
+ private Dictionary<string, string> _AutoRejoinChannels = new Dictionary<string, string>();
+ private bool _AutoRejoinOnKick;
+ private bool _AutoRelogin;
+ private bool _AutoNickHandling = true;
+ private bool _SupportNonRfc;
+ private bool _SupportNonRfcLocked;
+ private StringCollection _Motd = new StringCollection();
+ private bool _MotdReceived;
+ private Array _ReplyCodes = Enum.GetValues(typeof(ReplyCode));
+ private StringCollection _JoinedChannels = new StringCollection();
+ private Hashtable _Channels = Hashtable.Synchronized(new Hashtable(new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer()));
+ private Hashtable _IrcUsers = Hashtable.Synchronized(new Hashtable(new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer()));
+ private List<ChannelInfo> _ChannelList;
+ private Object _ChannelListSyncRoot = new Object();
+ private AutoResetEvent _ChannelListReceivedEvent;
+ private List<WhoInfo> _WhoList;
+ private Object _WhoListSyncRoot = new Object();
+ private AutoResetEvent _WhoListReceivedEvent;
+ private List<BanInfo> _BanList;
+ private Object _BanListSyncRoot = new Object();
+ private AutoResetEvent _BanListReceivedEvent;
+ private static Regex _ReplyCodeRegex = new Regex("^:[^ ]+? ([0-9]{3}) .+$", RegexOptions.Compiled);
+ private static Regex _PingRegex = new Regex("^PING :.*", RegexOptions.Compiled);
+ private static Regex _ErrorRegex = new Regex("^ERROR :.*", RegexOptions.Compiled);
+ private static Regex _ActionRegex = new Regex("^:.*? PRIVMSG (.).* :"+"\x1"+"ACTION .*"+"\x1"+"$", RegexOptions.Compiled);
+ private static Regex _CtcpRequestRegex = new Regex("^:.*? PRIVMSG .* :"+"\x1"+".*"+"\x1"+"$", RegexOptions.Compiled);
+ private static Regex _MessageRegex = new Regex("^:.*? PRIVMSG (.).* :.*$", RegexOptions.Compiled);
+ private static Regex _CtcpReplyRegex = new Regex("^:.*? NOTICE .* :"+"\x1"+".*"+"\x1"+"$", RegexOptions.Compiled);
+ private static Regex _NoticeRegex = new Regex("^:.*? NOTICE (.).* :.*$", RegexOptions.Compiled);
+ private static Regex _InviteRegex = new Regex("^:.*? INVITE .* .*$", RegexOptions.Compiled);
+ private static Regex _JoinRegex = new Regex("^:.*? JOIN .*$", RegexOptions.Compiled);
+ private static Regex _TopicRegex = new Regex("^:.*? TOPIC .* :.*$", RegexOptions.Compiled);
+ private static Regex _NickRegex = new Regex("^:.*? NICK .*$", RegexOptions.Compiled);
+ private static Regex _KickRegex = new Regex("^:.*? KICK .* .*$", RegexOptions.Compiled);
+ private static Regex _PartRegex = new Regex("^:.*? PART .*$", RegexOptions.Compiled);
+ private static Regex _ModeRegex = new Regex("^:.*? MODE (.*) .*$", RegexOptions.Compiled);
+ private static Regex _QuitRegex = new Regex("^:.*? QUIT :.*$", RegexOptions.Compiled);
+
+ public event EventHandler OnRegistered;
+ public event PingEventHandler OnPing;
+ public event PongEventHandler OnPong;
+ public event IrcEventHandler OnRawMessage;
+ public event ErrorEventHandler OnError;
+ public event IrcEventHandler OnErrorMessage;
+ public event JoinEventHandler OnJoin;
+ public event NamesEventHandler OnNames;
+ public event ListEventHandler OnList;
+ public event PartEventHandler OnPart;
+ public event QuitEventHandler OnQuit;
+ public event KickEventHandler OnKick;
+ public event AwayEventHandler OnAway;
+ public event IrcEventHandler OnUnAway;
+ public event IrcEventHandler OnNowAway;
+ public event InviteEventHandler OnInvite;
+ public event BanEventHandler OnBan;
+ public event UnbanEventHandler OnUnban;
+ public event OpEventHandler OnOp;
+ public event DeopEventHandler OnDeop;
+ public event HalfopEventHandler OnHalfop;
+ public event DehalfopEventHandler OnDehalfop;
+ public event VoiceEventHandler OnVoice;
+ public event DevoiceEventHandler OnDevoice;
+ public event WhoEventHandler OnWho;
+ public event MotdEventHandler OnMotd;
+ public event TopicEventHandler OnTopic;
+ public event TopicChangeEventHandler OnTopicChange;
+ public event NickChangeEventHandler OnNickChange;
+ public event IrcEventHandler OnModeChange;
+ public event IrcEventHandler OnUserModeChange;
+ public event IrcEventHandler OnChannelModeChange;
+ public event IrcEventHandler OnChannelMessage;
+ public event ActionEventHandler OnChannelAction;
+ public event IrcEventHandler OnChannelNotice;
+ public event IrcEventHandler OnChannelActiveSynced;
+ public event IrcEventHandler OnChannelPassiveSynced;
+ public event IrcEventHandler OnQueryMessage;
+ public event ActionEventHandler OnQueryAction;
+ public event IrcEventHandler OnQueryNotice;
+ public event CtcpEventHandler OnCtcpRequest;
+ public event CtcpEventHandler OnCtcpReply;
+
+ /// <summary>
+ /// Enables/disables the active channel sync feature.
+ /// Default: false
+ /// </summary>
+ public bool ActiveChannelSyncing {
+ get {
+ return _ActiveChannelSyncing;
+ }
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.ChannelSyncing.Info("Active channel syncing enabled");
+ } else {
+ Logger.ChannelSyncing.Info("Active channel syncing disabled");
+ }
+#endif
+ _ActiveChannelSyncing = value;
+ }
+ }
+
+ /// <summary>
+ /// Enables/disables the passive channel sync feature. Not implemented yet!
+ /// </summary>
+ public bool PassiveChannelSyncing {
+ get {
+ return _PassiveChannelSyncing;
+ }
+ /*
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.ChannelSyncing.Info("Passive channel syncing enabled");
+ } else {
+ Logger.ChannelSyncing.Info("Passive channel syncing disabled");
+ }
+#endif
+ _PassiveChannelSyncing = value;
+ }
+ */
+ }
+
+ /// <summary>
+ /// Sets the ctcp version that should be replied on ctcp version request.
+ /// </summary>
+ public string CtcpVersion {
+ get {
+ return _CtcpVersion;
+ }
+ set {
+ _CtcpVersion = value;
+ }
+ }
+
+ /// <summary>
+ /// Enables/disables auto joining of channels when invited.
+ /// Default: false
+ /// </summary>
+ public bool AutoJoinOnInvite {
+ get {
+ return _AutoJoinOnInvite;
+ }
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.ChannelSyncing.Info("AutoJoinOnInvite enabled");
+ } else {
+ Logger.ChannelSyncing.Info("AutoJoinOnInvite disabled");
+ }
+#endif
+ _AutoJoinOnInvite = value;
+ }
+ }
+
+ /// <summary>
+ /// Enables/disables automatic rejoining of channels when a connection to the server is lost.
+ /// Default: false
+ /// </summary>
+ public bool AutoRejoin {
+ get {
+ return _AutoRejoin;
+ }
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.ChannelSyncing.Info("AutoRejoin enabled");
+ } else {
+ Logger.ChannelSyncing.Info("AutoRejoin disabled");
+ }
+#endif
+ _AutoRejoin = value;
+ }
+ }
+
+ /// <summary>
+ /// Enables/disables auto rejoining of channels when kicked.
+ /// Default: false
+ /// </summary>
+ public bool AutoRejoinOnKick {
+ get {
+ return _AutoRejoinOnKick;
+ }
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.ChannelSyncing.Info("AutoRejoinOnKick enabled");
+ } else {
+ Logger.ChannelSyncing.Info("AutoRejoinOnKick disabled");
+ }
+#endif
+ _AutoRejoinOnKick = value;
+ }
+ }
+
+ /// <summary>
+ /// Enables/disables auto relogin to the server after a reconnect.
+ /// Default: false
+ /// </summary>
+ public bool AutoRelogin {
+ get {
+ return _AutoRelogin;
+ }
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.ChannelSyncing.Info("AutoRelogin enabled");
+ } else {
+ Logger.ChannelSyncing.Info("AutoRelogin disabled");
+ }
+#endif
+ _AutoRelogin = value;
+ }
+ }
+
+ /// <summary>
+ /// Enables/disables auto nick handling on nick collisions
+ /// Default: true
+ /// </summary>
+ public bool AutoNickHandling {
+ get {
+ return _AutoNickHandling;
+ }
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.ChannelSyncing.Info("AutoNickHandling enabled");
+ } else {
+ Logger.ChannelSyncing.Info("AutoNickHandling disabled");
+ }
+#endif
+ _AutoNickHandling = value;
+ }
+ }
+
+ /// <summary>
+ /// Enables/disables support for non rfc features.
+ /// Default: false
+ /// </summary>
+ public bool SupportNonRfc {
+ get {
+ return _SupportNonRfc;
+ }
+ set {
+ if (_SupportNonRfcLocked) {
+ return;
+ }
+#if LOG4NET
+
+ if (value) {
+ Logger.ChannelSyncing.Info("SupportNonRfc enabled");
+ } else {
+ Logger.ChannelSyncing.Info("SupportNonRfc disabled");
+ }
+#endif
+ _SupportNonRfc = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets the nickname of us.
+ /// </summary>
+ public string Nickname {
+ get {
+ return _Nickname;
+ }
+ }
+
+ /// <summary>
+ /// Gets the list of nicknames of us.
+ /// </summary>
+ public string[] NicknameList {
+ get {
+ return _NicknameList;
+ }
+ }
+
+ /// <summary>
+ /// Gets the supposed real name of us.
+ /// </summary>
+ public string Realname {
+ get {
+ return _Realname;
+ }
+ }
+
+ /// <summary>
+ /// Gets the username for the server.
+ /// </summary>
+ /// <remarks>
+ /// System username is set by default
+ /// </remarks>
+ public string Username {
+ get {
+ return _Username;
+ }
+ }
+
+ /// <summary>
+ /// Gets the alphanumeric mode mask of us.
+ /// </summary>
+ public string Usermode {
+ get {
+ return _Usermode;
+ }
+ }
+
+ /// <summary>
+ /// Gets the numeric mode mask of us.
+ /// </summary>
+ public int IUsermode {
+ get {
+ return _IUsermode;
+ }
+ }
+
+ /// <summary>
+ /// Returns if we are away on this connection
+ /// </summary>
+ public bool IsAway {
+ get {
+ return _IsAway;
+ }
+ }
+
+ /// <summary>
+ /// Gets the password for the server.
+ /// </summary>
+ public string Password {
+ get {
+ return _Password;
+ }
+ }
+
+ /// <summary>
+ /// Gets the list of channels we are joined.
+ /// </summary>
+ public StringCollection JoinedChannels {
+ get {
+ return _JoinedChannels;
+ }
+ }
+
+ /// <summary>
+ /// Gets the server message of the day.
+ /// </summary>
+ public StringCollection Motd {
+ get {
+ return _Motd;
+ }
+ }
+
+ public object BanListSyncRoot {
+ get {
+ return _BanListSyncRoot;
+ }
+ }
+
+ /// <summary>
+ /// This class manages the connection server and provides access to all the objects needed to send and receive messages.
+ /// </summary>
+ public IrcClient()
+ {
+#if LOG4NET
+ Logger.Main.Debug("IrcClient created");
+#endif
+ OnReadLine += new ReadLineEventHandler(_Worker);
+ OnDisconnected += new EventHandler(_OnDisconnected);
+ OnConnectionError += new EventHandler(_OnConnectionError);
+ }
+
+#if LOG4NET
+ ~IrcClient()
+ {
+ Logger.Main.Debug("IrcClient destroyed");
+ }
+#endif
+
+ /// <summary>
+ /// Connection parameters required to establish an server connection.
+ /// </summary>
+ /// <param name="addresslist">The list of server hostnames.</param>
+ /// <param name="port">The TCP port the server listens on.</param>
+ public new void Connect(string[] addresslist, int port)
+ {
+ _SupportNonRfcLocked = true;
+ base.Connect(addresslist, port);
+ }
+
+ /// <overloads>
+ /// Reconnects to the current server.
+ /// </overloads>
+ /// <param name="login">If the login data should be sent, after successful connect.</param>
+ /// <param name="channels">If the channels should be rejoined, after successful connect.</param>
+ public void Reconnect(bool login, bool channels)
+ {
+ if (channels) {
+ _StoreChannelsToRejoin();
+ }
+ base.Reconnect();
+ if (login) {
+ //reset the nick to the original nicklist
+ _CurrentNickname = 0;
+ // FIXME: honor _Nickname (last used nickname)
+ Login(_NicknameList, Realname, IUsermode, Username, Password);
+ }
+ if (channels) {
+ _RejoinChannels();
+ }
+ }
+
+ /// <param name="login">If the login data should be sent, after successful connect.</param>
+ public void Reconnect(bool login)
+ {
+ Reconnect(login, true);
+ }
+
+ /// <summary>
+ /// Login parameters required identify with server connection
+ /// </summary>
+ /// <remark>Login is used at the beginning of connection to specify the username, hostname and realname of a new user.</remark>
+ /// <param name="nicklist">The users list of 'nick' names which may NOT contain spaces</param>
+ /// <param name="realname">The users 'real' name which may contain space characters</param>
+ /// <param name="usermode">A numeric mode parameter.
+ /// <remark>
+ /// Set to 0 to recieve wallops and be invisible.
+ /// Set to 4 to be invisible and not receive wallops.
+ /// </remark>
+ /// </param>
+ /// <param name="username">The user's machine logon name</param>
+ /// <param name="password">The optional password can and MUST be set before any attempt to register
+ /// the connection is made.</param>
+ public void Login(string[] nicklist, string realname, int usermode, string username, string password)
+ {
+#if LOG4NET
+ Logger.Connection.Info("logging in");
+#endif
+ _NicknameList = (string[])nicklist.Clone();
+ // here we set the nickname which we will try first
+ _Nickname = _NicknameList[0].Replace(" ", "");
+ _Realname = realname;
+ _IUsermode = usermode;
+
+ if (username != null && username.Length > 0) {
+ _Username = username.Replace(" ", "");
+ } else {
+ _Username = Environment.UserName.Replace(" ", "");
+ }
+
+ if (password != null && password.Length > 0) {
+ _Password = password;
+ RfcPass(Password, Priority.Critical);
+ }
+
+ RfcNick(Nickname, Priority.Critical);
+ RfcUser(Username, IUsermode, Realname, Priority.Critical);
+ }
+
+ /// <summary>
+ /// Login parameters required identify with server connection
+ /// </summary>
+ /// <remark>Login is used at the beginning of connection to specify the username, hostname and realname of a new user.</remark>
+ /// <param name="nicklist">The users list of 'nick' names which may NOT contain spaces</param>
+ /// <param name="realname">The users 'real' name which may contain space characters</param>
+ /// <param name="usermode">A numeric mode parameter.
+ /// Set to 0 to recieve wallops and be invisible.
+ /// Set to 4 to be invisible and not receive wallops.</param>
+ /// <param name="username">The user's machine logon name</param>
+ public void Login(string[] nicklist, string realname, int usermode, string username)
+ {
+ Login(nicklist, realname, usermode, username, "");
+ }
+
+ /// <summary>
+ /// Login parameters required identify with server connection
+ /// </summary>
+ /// <remark>Login is used at the beginning of connection to specify the username, hostname and realname of a new user.</remark>
+ /// <param name="nicklist">The users list of 'nick' names which may NOT contain spaces</param>
+ /// <param name="realname">The users 'real' name which may contain space characters</param>
+ /// <param name="usermode">A numeric mode parameter.
+ /// Set to 0 to recieve wallops and be invisible.
+ /// Set to 4 to be invisible and not receive wallops.</param>
+ public void Login(string[] nicklist, string realname, int usermode)
+ {
+ Login(nicklist, realname, usermode, "", "");
+ }
+
+ /// <summary>
+ /// Login parameters required identify with server connection
+ /// </summary>
+ /// <remark>Login is used at the beginning of connection to specify the username, hostname and realname of a new user.</remark>
+ /// <param name="nicklist">The users list of 'nick' names which may NOT contain spaces</param>
+ /// <param name="realname">The users 'real' name which may contain space characters</param>
+ public void Login(string[] nicklist, string realname)
+ {
+ Login(nicklist, realname, 0, "", "");
+ }
+
+ /// <summary>
+ /// Login parameters required identify with server connection
+ /// </summary>
+ /// <remark>Login is used at the beginning of connection to specify the username, hostname and realname of a new user.</remark>
+ /// <param name="nick">The users 'nick' name which may NOT contain spaces</param>
+ /// <param name="realname">The users 'real' name which may contain space characters</param>
+ /// <param name="usermode">A numeric mode parameter.
+ /// Set to 0 to recieve wallops and be invisible.
+ /// Set to 4 to be invisible and not receive wallops.</param>
+ /// <param name="username">The user's machine logon name</param>
+ /// <param name="password">The optional password can and MUST be set before any attempt to register
+ /// the connection is made.</param>
+ public void Login(string nick, string realname, int usermode, string username, string password)
+ {
+ Login(new string[] {nick, nick+"_", nick+"__"}, realname, usermode, username, password);
+ }
+
+ /// <summary>
+ /// Login parameters required identify with server connection
+ /// </summary>
+ /// <remark>Login is used at the beginning of connection to specify the username, hostname and realname of a new user.</remark>
+ /// <param name="nick">The users 'nick' name which may NOT contain spaces</param>
+ /// <param name="realname">The users 'real' name which may contain space characters</param>
+ /// <param name="usermode">A numeric mode parameter.
+ /// Set to 0 to recieve wallops and be invisible.
+ /// Set to 4 to be invisible and not receive wallops.</param>
+ /// <param name="username">The user's machine logon name</param>
+ public void Login(string nick, string realname, int usermode, string username)
+ {
+ Login(new string[] {nick, nick+"_", nick+"__"}, realname, usermode, username, "");
+ }
+
+ /// <summary>
+ /// Login parameters required identify with server connection
+ /// </summary>
+ /// <remark>Login is used at the beginning of connection to specify the username, hostname and realname of a new user.</remark>
+ /// <param name="nick">The users 'nick' name which may NOT contain spaces</param>
+ /// <param name="realname">The users 'real' name which may contain space characters</param>
+ /// <param name="usermode">A numeric mode parameter.
+ /// Set to 0 to recieve wallops and be invisible.
+ /// Set to 4 to be invisible and not receive wallops.</param>
+ public void Login(string nick, string realname, int usermode)
+ {
+ Login(new string[] {nick, nick+"_", nick+"__"}, realname, usermode, "", "");
+ }
+
+ /// <summary>
+ /// Login parameters required identify with server connection
+ /// </summary>
+ /// <remark>Login is used at the beginning of connection to specify the username, hostname and realname of a new user.</remark>
+ /// <param name="nick">The users 'nick' name which may NOT contain spaces</param>
+ /// <param name="realname">The users 'real' name which may contain space characters</param>
+ public void Login(string nick, string realname)
+ {
+ Login(new string[] {nick, nick+"_", nick+"__"}, realname, 0, "", "");
+ }
+
+ /// <summary>
+ /// Determine if a specifier nickname is you
+ /// </summary>
+ /// <param name="nickname">The users 'nick' name which may NOT contain spaces</param>
+ /// <returns>True if nickname belongs to you</returns>
+ public bool IsMe(string nickname)
+ {
+ return (Nickname == nickname);
+ }
+
+ /// <summary>
+ /// Determines if your nickname can be found in a specified channel
+ /// </summary>
+ /// <param name="channelname">The name of the channel you wish to query</param>
+ /// <returns>True if you are found in channel</returns>
+ public bool IsJoined(string channelname)
+ {
+ return IsJoined(channelname, Nickname);
+ }
+
+ /// <summary>
+ /// Determine if a specified nickname can be found in a specified channel
+ /// </summary>
+ /// <param name="channelname">The name of the channel you wish to query</param>
+ /// <param name="nickname">The users 'nick' name which may NOT contain spaces</param>
+ /// <returns>True if nickname is found in channel</returns>
+ public bool IsJoined(string channelname, string nickname)
+ {
+ if (channelname == null) {
+ throw new System.ArgumentNullException("channelname");
+ }
+
+ if (nickname == null) {
+ throw new System.ArgumentNullException("nickname");
+ }
+
+ Channel channel = GetChannel(channelname);
+ if (channel != null &&
+ channel.UnsafeUsers != null &&
+ channel.UnsafeUsers.ContainsKey(nickname)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /// <summary>
+ /// Returns user information
+ /// </summary>
+ /// <param name="nickname">The users 'nick' name which may NOT contain spaces</param>
+ /// <returns>IrcUser object of requested nickname</returns>
+ public IrcUser GetIrcUser(string nickname)
+ {
+ if (nickname == null) {
+ throw new System.ArgumentNullException("nickname");
+ }
+
+ return (IrcUser)_IrcUsers[nickname];
+ }
+
+ /// <summary>
+ /// Returns extended user information including channel information
+ /// </summary>
+ /// <param name="channelname">The name of the channel you wish to query</param>
+ /// <param name="nickname">The users 'nick' name which may NOT contain spaces</param>
+ /// <returns>ChannelUser object of requested channelname/nickname</returns>
+ public ChannelUser GetChannelUser(string channelname, string nickname)
+ {
+ if (channelname == null) {
+ throw new System.ArgumentNullException("channel");
+ }
+
+ if (nickname == null) {
+ throw new System.ArgumentNullException("nickname");
+ }
+
+ Channel channel = GetChannel(channelname);
+ if (channel != null) {
+ return (ChannelUser)channel.UnsafeUsers[nickname];
+ } else {
+ return null;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channelname">The name of the channel you wish to query</param>
+ /// <returns>Channel object of requested channel</returns>
+ public Channel GetChannel(string channelname)
+ {
+ if (channelname == null) {
+ throw new System.ArgumentNullException("channelname");
+ }
+
+ return (Channel)_Channels[channelname];
+ }
+
+ /// <summary>
+ /// Gets a list of all joined channels on server
+ /// </summary>
+ /// <returns>String array of all joined channel names</returns>
+ public string[] GetChannels()
+ {
+ string[] channels = new string[_Channels.Values.Count];
+ int i = 0;
+ foreach (Channel channel in _Channels.Values) {
+ channels[i++] = channel.Name;
+ }
+
+ return channels;
+ }
+
+ /// <summary>
+ /// Fetches a fresh list of all available channels that match the passed mask
+ /// </summary>
+ /// <returns>List of ListInfo</returns>
+ public IList<ChannelInfo> GetChannelList(string mask)
+ {
+ List<ChannelInfo> list = new List<ChannelInfo>();
+ lock (_ChannelListSyncRoot) {
+ _ChannelList = list;
+ _ChannelListReceivedEvent = new AutoResetEvent(false);
+
+ // request list
+ RfcList(mask);
+ // wait till we have the complete list
+ _ChannelListReceivedEvent.WaitOne();
+
+ _ChannelListReceivedEvent = null;
+ _ChannelList = null;
+ }
+
+ return list;
+ }
+
+ /// <summary>
+ /// Fetches a fresh list of users that matches the passed mask
+ /// </summary>
+ /// <returns>List of ListInfo</returns>
+ public IList<WhoInfo> GetWhoList(string mask)
+ {
+ List<WhoInfo> list = new List<WhoInfo>();
+ lock (_WhoListSyncRoot) {
+ _WhoList = list;
+ _WhoListReceivedEvent = new AutoResetEvent(false);
+
+ // request list
+ RfcWho(mask);
+ // wait till we have the complete list
+ _WhoListReceivedEvent.WaitOne();
+
+ _WhoListReceivedEvent = null;
+ _WhoList = null;
+ }
+
+ return list;
+ }
+
+ /// <summary>
+ /// Fetches a fresh ban list of the specified channel
+ /// </summary>
+ /// <returns>List of ListInfo</returns>
+ public IList<BanInfo> GetBanList(string channel)
+ {
+ List<BanInfo> list = new List<BanInfo>();
+ lock (_BanListSyncRoot) {
+ _BanList = list;
+ _BanListReceivedEvent = new AutoResetEvent(false);
+
+ // request list
+ Ban(channel);
+ // wait till we have the complete list
+ _BanListReceivedEvent.WaitOne();
+
+ _BanListReceivedEvent = null;
+ _BanList = null;
+ }
+
+ return list;
+ }
+
+ public IrcMessageData MessageParser(string rawline)
+ {
+ if (rawline == null) {
+ throw new ArgumentNullException("rawline");
+ }
+
+ string line;
+ string[] linear;
+ string messagecode;
+ string from;
+ string nick = null;
+ string ident = null;
+ string host = null;
+ string channel = null;
+ string message = null;
+ ReceiveType type;
+ ReplyCode replycode;
+ int exclamationpos;
+ int atpos;
+ int colonpos;
+
+ if (rawline.Length == 0) {
+ throw new ArgumentException("Value must not be empty.", "rawline");
+ }
+
+ if (rawline[0] == ':') {
+ line = rawline.Substring(1);
+ } else {
+ line = rawline;
+ }
+
+ linear = line.Split(new char[] {' '});
+
+ // conform to RFC 2812
+ from = linear[0];
+ messagecode = linear[1];
+ exclamationpos = from.IndexOf("!");
+ atpos = from.IndexOf("@");
+ colonpos = line.IndexOf(" :");
+ if (colonpos != -1) {
+ // we want the exact position of ":" not beginning from the space
+ colonpos += 1;
+ }
+ if (exclamationpos != -1) {
+ nick = from.Substring(0, exclamationpos);
+ } else {
+ if (atpos == -1) {
+ // no ident and no host, should be nick then
+ if (!from.Contains(".")) {
+ // HACK: from seems to be a nick instead of servername
+ nick = from;
+ }
+ } else {
+ nick = from.Substring(0, atpos);
+ }
+ }
+ if ((atpos != -1) &&
+ (exclamationpos != -1)) {
+ ident = from.Substring(exclamationpos+1, (atpos - exclamationpos)-1);
+ }
+ if (atpos != -1) {
+ host = from.Substring(atpos+1);
+ }
+
+ try {
+ replycode = (ReplyCode)int.Parse(messagecode);
+ } catch (FormatException) {
+ replycode = ReplyCode.Null;
+ }
+ type = _GetMessageType(rawline);
+ if (colonpos != -1) {
+ message = line.Substring(colonpos + 1);
+ }
+
+ switch (type) {
+ case ReceiveType.Join:
+ case ReceiveType.Kick:
+ case ReceiveType.Part:
+ case ReceiveType.TopicChange:
+ case ReceiveType.ChannelModeChange:
+ case ReceiveType.ChannelMessage:
+ case ReceiveType.ChannelAction:
+ case ReceiveType.ChannelNotice:
+ channel = linear[2];
+ break;
+ case ReceiveType.Who:
+ case ReceiveType.Topic:
+ case ReceiveType.Invite:
+ case ReceiveType.BanList:
+ case ReceiveType.ChannelMode:
+ channel = linear[3];
+ break;
+ case ReceiveType.Name:
+ channel = linear[4];
+ break;
+ }
+
+ switch (replycode) {
+ case ReplyCode.List:
+ case ReplyCode.ListEnd:
+ case ReplyCode.ErrorNoChannelModes:
+ channel = linear[3];
+ break;
+ }
+
+ if ((channel != null) &&
+ (channel[0] == ':')) {
+ channel = channel.Substring(1);
+ }
+
+ IrcMessageData data;
+ data = new IrcMessageData(this, from, nick, ident, host, channel, message, rawline, type, replycode);
+#if LOG4NET
+ Logger.MessageParser.Debug("IrcMessageData "+
+ "nick: '"+data.Nick+"' "+
+ "ident: '"+data.Ident+"' "+
+ "host: '"+data.Host+"' "+
+ "type: '"+data.Type.ToString()+"' "+
+ "from: '"+data.From+"' "+
+ "channel: '"+data.Channel+"' "+
+ "message: '"+data.Message+"' "
+ );
+#endif
+ return data;
+ }
+
+ protected virtual IrcUser CreateIrcUser(string nickname)
+ {
+ return new IrcUser(nickname, this);
+ }
+
+ protected virtual Channel CreateChannel(string name)
+ {
+ if (_SupportNonRfc) {
+ return new NonRfcChannel(name);
+ } else {
+ return new Channel(name);
+ }
+ }
+
+ protected virtual ChannelUser CreateChannelUser(string channel, IrcUser ircUser)
+ {
+ if (_SupportNonRfc) {
+ return new NonRfcChannelUser(channel, ircUser);
+ } else {
+ return new ChannelUser(channel, ircUser);
+ }
+ }
+
+ private void _Worker(object sender, ReadLineEventArgs e)
+ {
+ // lets see if we have events or internal messagehandler for it
+ _HandleEvents(MessageParser(e.Line));
+ }
+
+ private void _OnDisconnected(object sender, EventArgs e)
+ {
+ if (AutoRejoin) {
+ _StoreChannelsToRejoin();
+ }
+ _SyncingCleanup();
+ }
+
+ private void _OnConnectionError(object sender, EventArgs e)
+ {
+ try {
+ // AutoReconnect is handled in IrcConnection._OnConnectionError
+ if (AutoReconnect && AutoRelogin) {
+ Login(_NicknameList, Realname, IUsermode, Username, Password);
+ }
+ if (AutoReconnect && AutoRejoin) {
+ _RejoinChannels();
+ }
+ } catch (NotConnectedException) {
+ // HACK: this is hacky, we don't know if the Reconnect was actually successful
+ // means sending IRC commands without a connection throws NotConnectedExceptions
+ }
+ }
+
+ private void _StoreChannelsToRejoin()
+ {
+#if LOG4NET
+ Logger.Connection.Info("Storing channels for rejoin...");
+#endif
+ lock (_AutoRejoinChannels) {
+ _AutoRejoinChannels.Clear();
+ if (ActiveChannelSyncing || PassiveChannelSyncing) {
+ // store the key using channel sync
+ foreach (Channel channel in _Channels.Values) {
+ _AutoRejoinChannels.Add(channel.Name, channel.Key);
+ }
+ } else {
+ foreach (string channel in _JoinedChannels) {
+ _AutoRejoinChannels.Add(channel, null);
+ }
+ }
+ }
+ }
+
+ private void _RejoinChannels()
+ {
+#if LOG4NET
+ Logger.Connection.Info("Rejoining channels...");
+#endif
+ lock (_AutoRejoinChannels) {
+ RfcJoin(_AutoRejoinChannels.Keys.ToArray(),
+ _AutoRejoinChannels.Values.ToArray(),
+ Priority.High);
+ _AutoRejoinChannels.Clear();
+ }
+ }
+
+ private void _SyncingCleanup()
+ {
+ // lets clean it baby, powered by Mr. Proper
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("Mr. Proper action, cleaning good...");
+#endif
+ _JoinedChannels.Clear();
+ if (ActiveChannelSyncing) {
+ _Channels.Clear();
+ _IrcUsers.Clear();
+ }
+
+ _IsAway = false;
+
+ _MotdReceived = false;
+ _Motd.Clear();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ private string _NextNickname()
+ {
+ _CurrentNickname++;
+ //if we reach the end stay there
+ if (_CurrentNickname >= _NicknameList.Length) {
+ _CurrentNickname--;
+ }
+ return NicknameList[_CurrentNickname];
+ }
+
+ private ReceiveType _GetMessageType(string rawline)
+ {
+ Match found = _ReplyCodeRegex.Match(rawline);
+ if (found.Success) {
+ string code = found.Groups[1].Value;
+ ReplyCode replycode = (ReplyCode)int.Parse(code);
+
+ // check if this replycode is known in the RFC
+ if (Array.IndexOf(_ReplyCodes, replycode) == -1) {
+#if LOG4NET
+ Logger.MessageTypes.Warn("This IRC server ("+Address+") doesn't conform to the RFC 2812! ignoring unrecognized replycode '"+replycode+"'");
+#endif
+ return ReceiveType.Unknown;
+ }
+
+ switch (replycode) {
+ case ReplyCode.Welcome:
+ case ReplyCode.YourHost:
+ case ReplyCode.Created:
+ case ReplyCode.MyInfo:
+ case ReplyCode.Bounce:
+ return ReceiveType.Login;
+ case ReplyCode.LuserClient:
+ case ReplyCode.LuserOp:
+ case ReplyCode.LuserUnknown:
+ case ReplyCode.LuserMe:
+ case ReplyCode.LuserChannels:
+ return ReceiveType.Info;
+ case ReplyCode.MotdStart:
+ case ReplyCode.Motd:
+ case ReplyCode.EndOfMotd:
+ return ReceiveType.Motd;
+ case ReplyCode.NamesReply:
+ case ReplyCode.EndOfNames:
+ return ReceiveType.Name;
+ case ReplyCode.WhoReply:
+ case ReplyCode.EndOfWho:
+ return ReceiveType.Who;
+ case ReplyCode.ListStart:
+ case ReplyCode.List:
+ case ReplyCode.ListEnd:
+ return ReceiveType.List;
+ case ReplyCode.BanList:
+ case ReplyCode.EndOfBanList:
+ return ReceiveType.BanList;
+ case ReplyCode.Topic:
+ case ReplyCode.NoTopic:
+ return ReceiveType.Topic;
+ case ReplyCode.WhoIsUser:
+ case ReplyCode.WhoIsServer:
+ case ReplyCode.WhoIsOperator:
+ case ReplyCode.WhoIsIdle:
+ case ReplyCode.WhoIsChannels:
+ case ReplyCode.EndOfWhoIs:
+ return ReceiveType.WhoIs;
+ case ReplyCode.WhoWasUser:
+ case ReplyCode.EndOfWhoWas:
+ return ReceiveType.WhoWas;
+ case ReplyCode.UserModeIs:
+ return ReceiveType.UserMode;
+ case ReplyCode.ChannelModeIs:
+ return ReceiveType.ChannelMode;
+ default:
+ if (((int)replycode >= 400) &&
+ ((int)replycode <= 599)) {
+ return ReceiveType.ErrorMessage;
+ } else {
+#if LOG4NET
+ Logger.MessageTypes.Warn("replycode unknown ("+code+"): \""+rawline+"\"");
+#endif
+ return ReceiveType.Unknown;
+ }
+ }
+ }
+
+ found = _PingRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.Unknown;
+ }
+
+ found = _ErrorRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.Error;
+ }
+
+ found = _ActionRegex.Match(rawline);
+ if (found.Success) {
+ switch (found.Groups[1].Value) {
+ case "#":
+ case "!":
+ case "&":
+ case "+":
+ return ReceiveType.ChannelAction;
+ default:
+ return ReceiveType.QueryAction;
+ }
+ }
+
+ found = _CtcpRequestRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.CtcpRequest;
+ }
+
+ found = _MessageRegex.Match(rawline);
+ if (found.Success) {
+ switch (found.Groups[1].Value) {
+ case "#":
+ case "!":
+ case "&":
+ case "+":
+ return ReceiveType.ChannelMessage;
+ default:
+ return ReceiveType.QueryMessage;
+ }
+ }
+
+ found = _CtcpReplyRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.CtcpReply;
+ }
+
+ found = _NoticeRegex.Match(rawline);
+ if (found.Success) {
+ switch (found.Groups[1].Value) {
+ case "#":
+ case "!":
+ case "&":
+ case "+":
+ return ReceiveType.ChannelNotice;
+ default:
+ return ReceiveType.QueryNotice;
+ }
+ }
+
+ found = _InviteRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.Invite;
+ }
+
+ found = _JoinRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.Join;
+ }
+
+ found = _TopicRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.TopicChange;
+ }
+
+ found = _NickRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.NickChange;
+ }
+
+ found = _KickRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.Kick;
+ }
+
+ found = _PartRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.Part;
+ }
+
+ found = _ModeRegex.Match(rawline);
+ if (found.Success) {
+ if (found.Groups[1].Value == _Nickname) {
+ return ReceiveType.UserModeChange;
+ } else {
+ return ReceiveType.ChannelModeChange;
+ }
+ }
+
+ found = _QuitRegex.Match(rawline);
+ if (found.Success) {
+ return ReceiveType.Quit;
+ }
+
+#if LOG4NET
+ Logger.MessageTypes.Warn("messagetype unknown: \""+rawline+"\"");
+#endif
+ return ReceiveType.Unknown;
+ }
+
+ private void _HandleEvents(IrcMessageData ircdata)
+ {
+ if (OnRawMessage != null) {
+ OnRawMessage(this, new IrcEventArgs(ircdata));
+ }
+
+ string code;
+ // special IRC messages
+ code = ircdata.RawMessageArray[0];
+ switch (code) {
+ case "PING":
+ _Event_PING(ircdata);
+ break;
+ case "ERROR":
+ _Event_ERROR(ircdata);
+ break;
+ }
+
+ code = ircdata.RawMessageArray[1];
+ switch (code) {
+ case "PRIVMSG":
+ _Event_PRIVMSG(ircdata);
+ break;
+ case "NOTICE":
+ _Event_NOTICE(ircdata);
+ break;
+ case "JOIN":
+ _Event_JOIN(ircdata);
+ break;
+ case "PART":
+ _Event_PART(ircdata);
+ break;
+ case "KICK":
+ _Event_KICK(ircdata);
+ break;
+ case "QUIT":
+ _Event_QUIT(ircdata);
+ break;
+ case "TOPIC":
+ _Event_TOPIC(ircdata);
+ break;
+ case "NICK":
+ _Event_NICK(ircdata);
+ break;
+ case "INVITE":
+ _Event_INVITE(ircdata);
+ break;
+ case "MODE":
+ _Event_MODE(ircdata);
+ break;
+ case "PONG":
+ _Event_PONG(ircdata);
+ break;
+ }
+
+ if (ircdata.ReplyCode != ReplyCode.Null) {
+ switch (ircdata.ReplyCode) {
+ case ReplyCode.Welcome:
+ _Event_RPL_WELCOME(ircdata);
+ break;
+ case ReplyCode.Topic:
+ _Event_RPL_TOPIC(ircdata);
+ break;
+ case ReplyCode.NoTopic:
+ _Event_RPL_NOTOPIC(ircdata);
+ break;
+ case ReplyCode.NamesReply:
+ _Event_RPL_NAMREPLY(ircdata);
+ break;
+ case ReplyCode.EndOfNames:
+ _Event_RPL_ENDOFNAMES(ircdata);
+ break;
+ case ReplyCode.List:
+ _Event_RPL_LIST(ircdata);
+ break;
+ case ReplyCode.ListEnd:
+ _Event_RPL_LISTEND(ircdata);
+ break;
+ case ReplyCode.WhoReply:
+ _Event_RPL_WHOREPLY(ircdata);
+ break;
+ case ReplyCode.EndOfWho:
+ _Event_RPL_ENDOFWHO(ircdata);
+ break;
+ case ReplyCode.ChannelModeIs:
+ _Event_RPL_CHANNELMODEIS(ircdata);
+ break;
+ case ReplyCode.BanList:
+ _Event_RPL_BANLIST(ircdata);
+ break;
+ case ReplyCode.EndOfBanList:
+ _Event_RPL_ENDOFBANLIST(ircdata);
+ break;
+ case ReplyCode.ErrorNoChannelModes:
+ _Event_ERR_NOCHANMODES(ircdata);
+ break;
+ case ReplyCode.Motd:
+ _Event_RPL_MOTD(ircdata);
+ break;
+ case ReplyCode.EndOfMotd:
+ _Event_RPL_ENDOFMOTD(ircdata);
+ break;
+ case ReplyCode.Away:
+ _Event_RPL_AWAY(ircdata);
+ break;
+ case ReplyCode.UnAway:
+ _Event_RPL_UNAWAY(ircdata);
+ break;
+ case ReplyCode.NowAway:
+ _Event_RPL_NOWAWAY(ircdata);
+ break;
+ case ReplyCode.TryAgain:
+ _Event_RPL_TRYAGAIN(ircdata);
+ break;
+ case ReplyCode.ErrorNicknameInUse:
+ _Event_ERR_NICKNAMEINUSE(ircdata);
+ break;
+ }
+ }
+
+ if (ircdata.Type == ReceiveType.ErrorMessage) {
+ _Event_ERR(ircdata);
+ }
+ }
+
+ /// <summary>
+ /// Removes a specified user from all channel lists
+ /// </summary>
+ /// <param name="nickname">The users 'nick' name which may NOT contain spaces</param>
+ private bool _RemoveIrcUser(string nickname)
+ {
+ if (GetIrcUser(nickname).JoinedChannels.Length == 0) {
+ // he is nowhere else, lets kill him
+ _IrcUsers.Remove(nickname);
+ return true;
+ }
+
+ return false;
+ }
+
+ /// <summary>
+ /// Removes a specified user from a specified channel list
+ /// </summary>
+ /// <param name="channelname">The name of the channel you wish to query</param>
+ /// <param name="nickname">The users 'nick' name which may NOT contain spaces</param>
+ private void _RemoveChannelUser(string channelname, string nickname)
+ {
+ Channel chan = GetChannel(channelname);
+ chan.UnsafeUsers.Remove(nickname);
+ chan.UnsafeOps.Remove(nickname);
+ chan.UnsafeVoices.Remove(nickname);
+ if (SupportNonRfc) {
+ NonRfcChannel nchan = (NonRfcChannel)chan;
+ nchan.UnsafeHalfops.Remove(nickname);
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="ircdata">Message data containing channel mode information</param>
+ /// <param name="mode">Channel mode</param>
+ /// <param name="parameter">List of supplied paramaters</param>
+ private void _InterpretChannelMode(IrcMessageData ircdata, string mode, string parameter)
+ {
+ string[] parameters = parameter.Split(new char[] {' '});
+ bool add = false;
+ bool remove = false;
+ int modelength = mode.Length;
+ string temp;
+ Channel channel = null;
+ if (ActiveChannelSyncing) {
+ channel = GetChannel(ircdata.Channel);
+ }
+ IEnumerator parametersEnumerator = parameters.GetEnumerator();
+ // bring the enumerator to the 1. element
+ parametersEnumerator.MoveNext();
+ for (int i = 0; i < modelength; i++) {
+ switch(mode[i]) {
+ case '-':
+ add = false;
+ remove = true;
+ break;
+ case '+':
+ add = true;
+ remove = false;
+ break;
+ case 'o':
+ temp = (string)parametersEnumerator.Current;
+ parametersEnumerator.MoveNext();
+
+ if (add) {
+ if (ActiveChannelSyncing) {
+ // sanity check
+ if (GetChannelUser(ircdata.Channel, temp) != null) {
+ // update the op list
+ try {
+ channel.UnsafeOps.Add(temp, GetIrcUser(temp));
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("added op: "+temp+" to: "+ircdata.Channel);
+#endif
+ } catch (ArgumentException) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("duplicate op: "+temp+" in: "+ircdata.Channel+" not added");
+#endif
+ }
+
+ // update the user op status
+ ChannelUser cuser = GetChannelUser(ircdata.Channel, temp);
+ cuser.IsOp = true;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("set op status: " + temp + " for: "+ircdata.Channel);
+#endif
+ } else {
+#if LOG4NET
+ Logger.ChannelSyncing.Error("_InterpretChannelMode(): GetChannelUser(" + ircdata.Channel + "," + temp + ") returned null! Ignoring...");
+#endif
+ }
+ }
+
+ if (OnOp != null) {
+ OnOp(this, new OpEventArgs(ircdata, ircdata.Channel, ircdata.Nick, temp));
+ }
+ }
+ if (remove) {
+ if (ActiveChannelSyncing) {
+ // sanity check
+ if (GetChannelUser(ircdata.Channel, temp) != null) {
+ // update the op list
+ channel.UnsafeOps.Remove(temp);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("removed op: "+temp+" from: "+ircdata.Channel);
+#endif
+ // update the user op status
+ ChannelUser cuser = GetChannelUser(ircdata.Channel, temp);
+ cuser.IsOp = false;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("unset op status: " + temp + " for: "+ircdata.Channel);
+#endif
+ } else {
+#if LOG4NET
+ Logger.ChannelSyncing.Error("_InterpretChannelMode(): GetChannelUser(" + ircdata.Channel + "," + temp + ") returned null! Ignoring...");
+#endif
+ }
+ }
+
+ if (OnDeop != null) {
+ OnDeop(this, new DeopEventArgs(ircdata, ircdata.Channel, ircdata.Nick, temp));
+ }
+ }
+ break;
+ case 'h':
+ if (SupportNonRfc) {
+ temp = (string)parametersEnumerator.Current;
+ parametersEnumerator.MoveNext();
+
+ if (add) {
+ if (ActiveChannelSyncing) {
+ // sanity check
+ if (GetChannelUser(ircdata.Channel, temp) != null) {
+ // update the halfop list
+ try {
+ ((NonRfcChannel)channel).UnsafeHalfops.Add(temp, GetIrcUser(temp));
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("added halfop: "+temp+" to: "+ircdata.Channel);
+#endif
+ } catch (ArgumentException) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("duplicate halfop: "+temp+" in: "+ircdata.Channel+" not added");
+#endif
+ }
+
+ // update the user halfop status
+ NonRfcChannelUser cuser = (NonRfcChannelUser)GetChannelUser(ircdata.Channel, temp);
+ cuser.IsHalfop = true;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("set halfop status: " + temp + " for: "+ircdata.Channel);
+#endif
+ } else {
+#if LOG4NET
+ Logger.ChannelSyncing.Error("_InterpretChannelMode(): GetChannelUser(" + ircdata.Channel + "," + temp + ") returned null! Ignoring...");
+#endif
+ }
+ }
+
+ if (OnHalfop != null) {
+ OnHalfop(this, new HalfopEventArgs(ircdata, ircdata.Channel, ircdata.Nick, temp));
+ }
+ }
+ if (remove) {
+ if (ActiveChannelSyncing) {
+ // sanity check
+ if (GetChannelUser(ircdata.Channel, temp) != null) {
+ // update the halfop list
+ ((NonRfcChannel)channel).UnsafeHalfops.Remove(temp);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("removed halfop: "+temp+" from: "+ircdata.Channel);
+#endif
+ // update the user halfop status
+ NonRfcChannelUser cuser = (NonRfcChannelUser)GetChannelUser(ircdata.Channel, temp);
+ cuser.IsHalfop = false;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("unset halfop status: " + temp + " for: "+ircdata.Channel);
+#endif
+ } else {
+#if LOG4NET
+ Logger.ChannelSyncing.Error("_InterpretChannelMode(): GetChannelUser(" + ircdata.Channel + "," + temp + ") returned null! Ignoring...");
+#endif
+ }
+ }
+
+ if (OnDehalfop != null) {
+ OnDehalfop(this, new DehalfopEventArgs(ircdata, ircdata.Channel, ircdata.Nick, temp));
+ }
+ }
+ }
+ break;
+ case 'v':
+ temp = (string)parametersEnumerator.Current;
+ parametersEnumerator.MoveNext();
+
+ if (add) {
+ if (ActiveChannelSyncing) {
+ // sanity check
+ if (GetChannelUser(ircdata.Channel, temp) != null) {
+ // update the voice list
+ try {
+ channel.UnsafeVoices.Add(temp, GetIrcUser(temp));
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("added voice: "+temp+" to: "+ircdata.Channel);
+#endif
+ } catch (ArgumentException) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("duplicate voice: "+temp+" in: "+ircdata.Channel+" not added");
+#endif
+ }
+
+ // update the user voice status
+ ChannelUser cuser = GetChannelUser(ircdata.Channel, temp);
+ cuser.IsVoice = true;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("set voice status: " + temp + " for: "+ircdata.Channel);
+#endif
+ } else {
+#if LOG4NET
+ Logger.ChannelSyncing.Error("_InterpretChannelMode(): GetChannelUser(" + ircdata.Channel + "," + temp + ") returned null! Ignoring...");
+#endif
+ }
+ }
+
+ if (OnVoice != null) {
+ OnVoice(this, new VoiceEventArgs(ircdata, ircdata.Channel, ircdata.Nick, temp));
+ }
+ }
+ if (remove) {
+ if (ActiveChannelSyncing) {
+ // sanity check
+ if (GetChannelUser(ircdata.Channel, temp) != null) {
+ // update the voice list
+ channel.UnsafeVoices.Remove(temp);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("removed voice: "+temp+" from: "+ircdata.Channel);
+#endif
+ // update the user voice status
+ ChannelUser cuser = GetChannelUser(ircdata.Channel, temp);
+ cuser.IsVoice = false;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("unset voice status: " + temp + " for: "+ircdata.Channel);
+#endif
+ } else {
+#if LOG4NET
+ Logger.ChannelSyncing.Error("_InterpretChannelMode(): GetChannelUser(" + ircdata.Channel + "," + temp + ") returned null! Ignoring...");
+#endif
+ }
+ }
+
+ if (OnDevoice != null) {
+ OnDevoice(this, new DevoiceEventArgs(ircdata, ircdata.Channel, ircdata.Nick, temp));
+ }
+ }
+ break;
+ case 'b':
+ temp = (string)parametersEnumerator.Current;
+ parametersEnumerator.MoveNext();
+ if (add) {
+ if (ActiveChannelSyncing) {
+ try {
+ channel.Bans.Add(temp);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("added ban: "+temp+" to: "+ircdata.Channel);
+#endif
+ } catch (ArgumentException) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("duplicate ban: "+temp+" in: "+ircdata.Channel+" not added");
+#endif
+ }
+ }
+ if (OnBan != null) {
+ OnBan(this, new BanEventArgs(ircdata, ircdata.Channel, ircdata.Nick, temp));
+ }
+ }
+ if (remove) {
+ if (ActiveChannelSyncing) {
+ channel.Bans.Remove(temp);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("removed ban: "+temp+" from: "+ircdata.Channel);
+#endif
+ }
+ if (OnUnban != null) {
+ OnUnban(this, new UnbanEventArgs(ircdata, ircdata.Channel, ircdata.Nick, temp));
+ }
+ }
+ break;
+ case 'l':
+ temp = (string)parametersEnumerator.Current;
+ parametersEnumerator.MoveNext();
+ if (add) {
+ if (ActiveChannelSyncing) {
+ try {
+ channel.UserLimit = int.Parse(temp);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("stored user limit for: "+ircdata.Channel);
+#endif
+ } catch (FormatException) {
+#if LOG4NET
+ Logger.ChannelSyncing.Error("could not parse user limit: "+temp+" channel: "+ircdata.Channel);
+#endif
+ }
+ }
+ }
+ if (remove) {
+ if (ActiveChannelSyncing) {
+ channel.UserLimit = 0;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("removed user limit for: "+ircdata.Channel);
+#endif
+ }
+ }
+ break;
+ case 'k':
+ temp = (string)parametersEnumerator.Current;
+ parametersEnumerator.MoveNext();
+ if (add) {
+ if (ActiveChannelSyncing) {
+ channel.Key = temp;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("stored channel key for: "+ircdata.Channel);
+#endif
+ }
+ }
+ if (remove) {
+ if (ActiveChannelSyncing) {
+ channel.Key = "";
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("removed channel key for: "+ircdata.Channel);
+#endif
+ }
+ }
+ break;
+ default:
+ if (add) {
+ if (ActiveChannelSyncing) {
+ if (channel.Mode.IndexOf(mode[i]) == -1) {
+ channel.Mode += mode[i];
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("added channel mode ("+mode[i]+") for: "+ircdata.Channel);
+#endif
+ }
+ }
+ }
+ if (remove) {
+ if (ActiveChannelSyncing) {
+ channel.Mode = channel.Mode.Replace(mode[i].ToString(), String.Empty);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("removed channel mode ("+mode[i]+") for: "+ircdata.Channel);
+#endif
+ }
+ }
+ break;
+ }
+ }
+ }
+
+#region Internal Messagehandlers
+ /// <summary>
+ /// Event handler for ping messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing ping information</param>
+ private void _Event_PING(IrcMessageData ircdata)
+ {
+ string server = ircdata.RawMessageArray[1].Substring(1);
+#if LOG4NET
+ Logger.Connection.Debug("Ping? Pong!");
+#endif
+ RfcPong(server, Priority.Critical);
+
+ if (OnPing != null) {
+ OnPing(this, new PingEventArgs(ircdata, server));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for PONG messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing pong information</param>
+ private void _Event_PONG(IrcMessageData ircdata)
+ {
+ if (OnPong != null) {
+ OnPong(this, new PongEventArgs(ircdata, ircdata.Irc.Lag));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for error messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing error information</param>
+ private void _Event_ERROR(IrcMessageData ircdata)
+ {
+ string message = ircdata.Message;
+#if LOG4NET
+ Logger.Connection.Info("received ERROR from IRC server");
+#endif
+
+ if (OnError != null) {
+ OnError(this, new ErrorEventArgs(ircdata, message));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for join messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing join information</param>
+ private void _Event_JOIN(IrcMessageData ircdata)
+ {
+ string who = ircdata.Nick;
+ string channelname = ircdata.Channel;
+
+ if (IsMe(who)) {
+ _JoinedChannels.Add(channelname);
+ }
+
+ if (ActiveChannelSyncing) {
+ Channel channel;
+ if (IsMe(who)) {
+ // we joined the channel
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("joining channel: "+channelname);
+#endif
+ channel = CreateChannel(channelname);
+ _Channels.Add(channelname, channel);
+ // request channel mode
+ RfcMode(channelname);
+ // request wholist
+ RfcWho(channelname);
+ // request banlist
+ Ban(channelname);
+ } else {
+ // someone else joined the channel
+ // request the who data
+ RfcWho(who);
+ }
+
+#if LOG4NET
+ Logger.ChannelSyncing.Debug(who+" joins channel: "+channelname);
+#endif
+ channel = GetChannel(channelname);
+ IrcUser ircuser = GetIrcUser(who);
+
+ if (ircuser == null) {
+ ircuser = new IrcUser(who, this);
+ ircuser.Ident = ircdata.Ident;
+ ircuser.Host = ircdata.Host;
+ _IrcUsers.Add(who, ircuser);
+ }
+
+ // HACK: IRCnet's anonymous channel mode feature breaks our
+ // channnel sync here as they use the same nick for ALL channel
+ // users!
+ // Example: :anonymous!anonymous@anonymous. JOIN :$channel
+ if (who == "anonymous" &&
+ ircdata.Ident == "anonymous" &&
+ ircdata.Host == "anonymous." &&
+ IsJoined(channelname, who)) {
+ // ignore
+ } else {
+ ChannelUser channeluser = CreateChannelUser(channelname, ircuser);
+ channel.UnsafeUsers.Add(who, channeluser);
+ }
+ }
+
+ if (OnJoin != null) {
+ OnJoin(this, new JoinEventArgs(ircdata, channelname, who));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for part messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing part information</param>
+ private void _Event_PART(IrcMessageData ircdata)
+ {
+ string who = ircdata.Nick;
+ string channel = ircdata.Channel;
+ string partmessage = ircdata.Message;
+
+ if (IsMe(who)) {
+ _JoinedChannels.Remove(channel);
+ }
+
+ if (ActiveChannelSyncing) {
+ if (IsMe(who)) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("parting channel: "+channel);
+#endif
+ _Channels.Remove(channel);
+ } else {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug(who+" parts channel: "+channel);
+#endif
+ // HACK: IRCnet's anonymous channel mode feature breaks our
+ // channnel sync here as they use the same nick for ALL channel
+ // users!
+ // Example: :anonymous!anonymous@anonymous. PART $channel :$msg
+ if (who == "anonymous" &&
+ ircdata.Ident == "anonymous" &&
+ ircdata.Host == "anonymous." &&
+ !IsJoined(channel, who)) {
+ // ignore
+ } else {
+ _RemoveChannelUser(channel, who);
+ _RemoveIrcUser(who);
+ }
+ }
+ }
+
+ if (OnPart != null) {
+ OnPart(this, new PartEventArgs(ircdata, channel, who, partmessage));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for kick messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing kick information</param>
+ private void _Event_KICK(IrcMessageData ircdata)
+ {
+ string channelname = ircdata.Channel;
+ string who = ircdata.Nick;
+ string whom = ircdata.RawMessageArray[3];
+ string reason = ircdata.Message;
+ bool isme = IsMe(whom);
+
+ if (isme) {
+ _JoinedChannels.Remove(channelname);
+ }
+
+ if (ActiveChannelSyncing) {
+ if (isme) {
+ Channel channel = GetChannel(channelname);
+ _Channels.Remove(channelname);
+ if (_AutoRejoinOnKick) {
+ RfcJoin(channel.Name, channel.Key);
+ }
+ } else {
+ _RemoveChannelUser(channelname, whom);
+ _RemoveIrcUser(whom);
+ }
+ } else {
+ if (isme && AutoRejoinOnKick) {
+ RfcJoin(channelname);
+ }
+ }
+
+ if (OnKick != null) {
+ OnKick(this, new KickEventArgs(ircdata, channelname, who, whom, reason));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for quit messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing quit information</param>
+ private void _Event_QUIT(IrcMessageData ircdata)
+ {
+ string who = ircdata.Nick;
+ string reason = ircdata.Message;
+
+ // no need to handle if we quit, disconnect event will take care
+
+ if (ActiveChannelSyncing) {
+ // sanity checks, freshirc is very broken about RFC
+ IrcUser user = GetIrcUser(who);
+ if (user != null) {
+ string[] joined_channels = user.JoinedChannels;
+ if (joined_channels != null) {
+ foreach (string channel in joined_channels) {
+ _RemoveChannelUser(channel, who);
+ }
+ _RemoveIrcUser(who);
+#if LOG4NET
+ } else {
+ Logger.ChannelSyncing.Error("user.JoinedChannels (for: '"+who+"') returned null in _Event_QUIT! Ignoring...");
+#endif
+ }
+#if LOG4NET
+ } else {
+ Logger.ChannelSyncing.Error("GetIrcUser("+who+") returned null in _Event_QUIT! Ignoring...");
+#endif
+ }
+ }
+
+ if (OnQuit != null) {
+ OnQuit(this, new QuitEventArgs(ircdata, who, reason));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for private messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing private message information</param>
+ private void _Event_PRIVMSG(IrcMessageData ircdata)
+ {
+
+ switch (ircdata.Type) {
+ case ReceiveType.ChannelMessage:
+ if (OnChannelMessage != null) {
+ OnChannelMessage(this, new IrcEventArgs(ircdata));
+ }
+ break;
+ case ReceiveType.ChannelAction:
+ if (OnChannelAction != null) {
+ string action = ircdata.Message.Substring(8, ircdata.Message.Length - 9);
+ OnChannelAction(this, new ActionEventArgs(ircdata, action));
+ }
+ break;
+ case ReceiveType.QueryMessage:
+ if (OnQueryMessage != null) {
+ OnQueryMessage(this, new IrcEventArgs(ircdata));
+ }
+ break;
+ case ReceiveType.QueryAction:
+ if (OnQueryAction != null) {
+ string action = ircdata.Message.Substring(8, ircdata.Message.Length - 9);
+ OnQueryAction(this, new ActionEventArgs(ircdata, action));
+ }
+ break;
+ case ReceiveType.CtcpRequest:
+ if (OnCtcpRequest != null) {
+ int space_pos = ircdata.Message.IndexOf(' ');
+ string cmd = "";
+ string param = "";
+ if (space_pos != -1) {
+ cmd = ircdata.Message.Substring(1, space_pos - 1);
+ param = ircdata.Message.Substring(space_pos + 1,
+ ircdata.Message.Length - space_pos - 2);
+ } else {
+ cmd = ircdata.Message.Substring(1, ircdata.Message.Length - 2);
+ }
+ OnCtcpRequest(this, new CtcpEventArgs(ircdata, cmd, param));
+ }
+ break;
+ }
+ }
+
+ /// <summary>
+ /// Event handler for notice messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing notice information</param>
+ private void _Event_NOTICE(IrcMessageData ircdata)
+ {
+ switch (ircdata.Type) {
+ case ReceiveType.ChannelNotice:
+ if (OnChannelNotice != null) {
+ OnChannelNotice(this, new IrcEventArgs(ircdata));
+ }
+ break;
+ case ReceiveType.QueryNotice:
+ if (OnQueryNotice != null) {
+ OnQueryNotice(this, new IrcEventArgs(ircdata));
+ }
+ break;
+ case ReceiveType.CtcpReply:
+ if (OnCtcpReply != null) {
+ int space_pos = ircdata.Message.IndexOf(' ');
+ string cmd = "";
+ string param = "";
+ if (space_pos != -1) {
+ cmd = ircdata.Message.Substring(1, space_pos - 1);
+ param = ircdata.Message.Substring(space_pos + 1,
+ ircdata.Message.Length - space_pos - 2);
+ } else {
+ cmd = ircdata.Message.Substring(1, ircdata.Message.Length - 2);
+ }
+ OnCtcpReply(this, new CtcpEventArgs(ircdata, cmd, param));
+ }
+ break;
+ }
+ }
+
+ /// <summary>
+ /// Event handler for topic messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing topic information</param>
+ private void _Event_TOPIC(IrcMessageData ircdata)
+ {
+ string who = ircdata.Nick;
+ string channel = ircdata.Channel;
+ string newtopic = ircdata.Message;
+
+ if (ActiveChannelSyncing &&
+ IsJoined(channel)) {
+ GetChannel(channel).Topic = newtopic;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("stored topic for channel: "+channel);
+#endif
+ }
+
+ if (OnTopicChange != null) {
+ OnTopicChange(this, new TopicChangeEventArgs(ircdata, channel, who, newtopic));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for nickname messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing nickname information</param>
+ private void _Event_NICK(IrcMessageData ircdata)
+ {
+ string oldnickname = ircdata.Nick;
+ //string newnickname = ircdata.Message;
+ // the colon in the NICK message is optional, thus we can't rely on Message
+ string newnickname = ircdata.RawMessageArray[2];
+
+ // so let's strip the colon if it's there
+ if (newnickname.StartsWith(":")) {
+ newnickname = newnickname.Substring(1);
+ }
+
+ if (IsMe(ircdata.Nick)) {
+ // nickname change is your own
+ _Nickname = newnickname;
+ }
+
+ if (ActiveChannelSyncing) {
+ IrcUser ircuser = GetIrcUser(oldnickname);
+
+ // if we don't have any info about him, don't update him!
+ // (only queries or ourself in no channels)
+ if (ircuser != null) {
+ string[] joinedchannels = ircuser.JoinedChannels;
+
+ // update his nickname
+ ircuser.Nick = newnickname;
+ // remove the old entry
+ // remove first to avoid duplication, Foo -> foo
+ _IrcUsers.Remove(oldnickname);
+ // add him as new entry and new nickname as key
+ _IrcUsers.Add(newnickname, ircuser);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("updated nickname of: "+oldnickname+" to: "+newnickname);
+#endif
+ // now the same for all channels he is joined
+ Channel channel;
+ ChannelUser channeluser;
+ foreach (string channelname in joinedchannels) {
+ channel = GetChannel(channelname);
+ channeluser = GetChannelUser(channelname, oldnickname);
+ // remove first to avoid duplication, Foo -> foo
+ channel.UnsafeUsers.Remove(oldnickname);
+ channel.UnsafeUsers.Add(newnickname, channeluser);
+ if (channeluser.IsOp) {
+ channel.UnsafeOps.Remove(oldnickname);
+ channel.UnsafeOps.Add(newnickname, channeluser);
+ }
+ if (SupportNonRfc && ((NonRfcChannelUser)channeluser).IsHalfop) {
+ NonRfcChannel nchannel = (NonRfcChannel)channel;
+ nchannel.UnsafeHalfops.Remove(oldnickname);
+ nchannel.UnsafeHalfops.Add(newnickname, channeluser);
+ }
+ if (channeluser.IsVoice) {
+ channel.UnsafeVoices.Remove(oldnickname);
+ channel.UnsafeVoices.Add(newnickname, channeluser);
+ }
+ }
+ }
+ }
+
+ if (OnNickChange != null) {
+ OnNickChange(this, new NickChangeEventArgs(ircdata, oldnickname, newnickname));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for invite messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing invite information</param>
+ private void _Event_INVITE(IrcMessageData ircdata)
+ {
+ string channel = ircdata.Channel;
+ string inviter = ircdata.Nick;
+
+ if (AutoJoinOnInvite) {
+ if (channel.Trim() != "0") {
+ RfcJoin(channel);
+ }
+ }
+
+ if (OnInvite != null) {
+ OnInvite(this, new InviteEventArgs(ircdata, channel, inviter));
+ }
+ }
+
+ /// <summary>
+ /// Event handler for mode messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing mode information</param>
+ private void _Event_MODE(IrcMessageData ircdata)
+ {
+ if (IsMe(ircdata.RawMessageArray[2])) {
+ // my user mode changed
+ _Usermode = ircdata.RawMessageArray[3].Substring(1);
+ } else {
+ // channel mode changed
+ string mode = ircdata.RawMessageArray[3];
+ string parameter = String.Join(" ", ircdata.RawMessageArray, 4, ircdata.RawMessageArray.Length-4);
+ _InterpretChannelMode(ircdata, mode, parameter);
+ }
+
+ if ((ircdata.Type == ReceiveType.UserModeChange) &&
+ (OnUserModeChange != null)) {
+ OnUserModeChange(this, new IrcEventArgs(ircdata));
+ }
+
+ if ((ircdata.Type == ReceiveType.ChannelModeChange) &&
+ (OnChannelModeChange != null)) {
+ OnChannelModeChange(this, new IrcEventArgs(ircdata));
+ }
+
+ if (OnModeChange != null) {
+ OnModeChange(this, new IrcEventArgs(ircdata));
+ }
+ }
+
+
+ /// <summary>
+ /// Event handler for channel mode reply messages
+ /// </summary>
+ /// <param name="ircdata">Message data containing reply information</param>
+ private void _Event_RPL_CHANNELMODEIS(IrcMessageData ircdata)
+ {
+ if (ActiveChannelSyncing &&
+ IsJoined(ircdata.Channel)) {
+ // reset stored mode first, as this is the complete mode
+ Channel chan = GetChannel(ircdata.Channel);
+ chan.Mode = String.Empty;
+ string mode = ircdata.RawMessageArray[4];
+ string parameter = String.Join(" ", ircdata.RawMessageArray, 5, ircdata.RawMessageArray.Length-5);
+ _InterpretChannelMode(ircdata, mode, parameter);
+ }
+ }
+
+ /// <summary>
+ /// Event handler for welcome reply messages
+ /// </summary>
+ /// <remark>
+ /// Upon success, the client will receive an RPL_WELCOME (for users) or
+ /// RPL_YOURESERVICE (for services) message indicating that the
+ /// connection is now registered and known the to the entire IRC network.
+ /// The reply message MUST contain the full client identifier upon which
+ /// it was registered.
+ /// </remark>
+ /// <param name="ircdata">Message data containing reply information</param>
+ private void _Event_RPL_WELCOME(IrcMessageData ircdata)
+ {
+ // updating our nickname, that we got (maybe cutted...)
+ _Nickname = ircdata.RawMessageArray[2];
+
+ if (OnRegistered != null) {
+ OnRegistered(this, EventArgs.Empty);
+ }
+ }
+
+ private void _Event_RPL_TOPIC(IrcMessageData ircdata)
+ {
+ string topic = ircdata.Message;
+ string channel = ircdata.Channel;
+
+ if (ActiveChannelSyncing &&
+ IsJoined(channel)) {
+ GetChannel(channel).Topic = topic;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("stored topic for channel: "+channel);
+#endif
+ }
+
+ if (OnTopic != null) {
+ OnTopic(this, new TopicEventArgs(ircdata, channel, topic));
+ }
+ }
+
+ private void _Event_RPL_NOTOPIC(IrcMessageData ircdata)
+ {
+ string channel = ircdata.Channel;
+
+ if (ActiveChannelSyncing &&
+ IsJoined(channel)) {
+ GetChannel(channel).Topic = "";
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("stored empty topic for channel: "+channel);
+#endif
+ }
+
+ if (OnTopic != null) {
+ OnTopic(this, new TopicEventArgs(ircdata, channel, ""));
+ }
+ }
+
+ private void _Event_RPL_NAMREPLY(IrcMessageData ircdata)
+ {
+ string channelname = ircdata.Channel;
+ string[] userlist = ircdata.MessageArray;
+ // HACK: BIP skips the colon after the channel name even though
+ // RFC 1459 and 2812 says it's mandantory in RPL_NAMREPLY
+ if (userlist == null) {
+ if (ircdata.RawMessageArray.Length > 5) {
+ userlist = new string[] { ircdata.RawMessageArray[5] };
+ } else {
+ userlist = new string[] {};
+ }
+ }
+
+ if (ActiveChannelSyncing &&
+ IsJoined(channelname)) {
+ string nickname;
+ bool op;
+ bool halfop;
+ bool voice;
+ foreach (string user in userlist) {
+ if (user.Length <= 0) {
+ continue;
+ }
+
+ op = false;
+ halfop = false;
+ voice = false;
+ switch (user[0]) {
+ case '@':
+ op = true;
+ nickname = user.Substring(1);
+ break;
+ case '+':
+ voice = true;
+ nickname = user.Substring(1);
+ break;
+ // RFC VIOLATION
+ // some IRC network do this and break our channel sync...
+ case '&':
+ nickname = user.Substring(1);
+ break;
+ case '%':
+ halfop = true;
+ nickname = user.Substring(1);
+ break;
+ case '~':
+ nickname = user.Substring(1);
+ break;
+ default:
+ nickname = user;
+ break;
+ }
+
+ IrcUser ircuser = GetIrcUser(nickname);
+ ChannelUser channeluser = GetChannelUser(channelname, nickname);
+
+ if (ircuser == null) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("creating IrcUser: "+nickname+" because he doesn't exist yet");
+#endif
+ ircuser = new IrcUser(nickname, this);
+ _IrcUsers.Add(nickname, ircuser);
+ }
+
+ if (channeluser == null) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("creating ChannelUser: "+nickname+" for Channel: "+channelname+" because he doesn't exist yet");
+#endif
+
+ channeluser = CreateChannelUser(channelname, ircuser);
+ Channel channel = GetChannel(channelname);
+
+ channel.UnsafeUsers.Add(nickname, channeluser);
+ if (op) {
+ channel.UnsafeOps.Add(nickname, channeluser);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("added op: "+nickname+" to: "+channelname);
+#endif
+ }
+ if (SupportNonRfc && halfop) {
+ ((NonRfcChannel)channel).UnsafeHalfops.Add(nickname, channeluser);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("added halfop: "+nickname+" to: "+channelname);
+#endif
+ }
+ if (voice) {
+ channel.UnsafeVoices.Add(nickname, channeluser);
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("added voice: "+nickname+" to: "+channelname);
+#endif
+ }
+ }
+
+ channeluser.IsOp = op;
+ channeluser.IsVoice = voice;
+ if (SupportNonRfc) {
+ ((NonRfcChannelUser)channeluser).IsHalfop = halfop;
+ }
+ }
+ }
+
+ var filteredUserlist = new List<string>(userlist.Length);
+ // filter user modes from nicknames
+ foreach (string user in userlist) {
+ if (String.IsNullOrEmpty(user)) {
+ continue;
+ }
+
+ switch (user[0]) {
+ case '@':
+ case '+':
+ case '&':
+ case '%':
+ case '~':
+ filteredUserlist.Add(user.Substring(1));
+ break;
+ default:
+ filteredUserlist.Add(user);
+ break;
+ }
+ }
+
+ if (OnNames != null) {
+ OnNames(this, new NamesEventArgs(ircdata, channelname,
+ filteredUserlist.ToArray()));
+ }
+ }
+
+ private void _Event_RPL_LIST(IrcMessageData ircdata)
+ {
+ string channelName = ircdata.Channel;
+ int userCount = Int32.Parse(ircdata.RawMessageArray[4]);
+ string topic = ircdata.Message;
+
+ ChannelInfo info = null;
+ if (OnList != null || _ChannelList != null) {
+ info = new ChannelInfo(channelName, userCount, topic);
+ }
+
+ if (_ChannelList != null) {
+ _ChannelList.Add(info);
+ }
+
+ if (OnList != null) {
+ OnList(this, new ListEventArgs(ircdata, info));
+ }
+ }
+
+ private void _Event_RPL_LISTEND(IrcMessageData ircdata)
+ {
+ if (_ChannelListReceivedEvent != null) {
+ _ChannelListReceivedEvent.Set();
+ }
+ }
+
+ private void _Event_RPL_TRYAGAIN(IrcMessageData ircdata)
+ {
+ if (_ChannelListReceivedEvent != null) {
+ _ChannelListReceivedEvent.Set();
+ }
+ }
+
+ /*
+ // BUG: RFC2812 says LIST and WHO might return ERR_TOOMANYMATCHES which
+ // is not defined :(
+ private void _Event_ERR_TOOMANYMATCHES(IrcMessageData ircdata)
+ {
+ if (_ListInfosReceivedEvent != null) {
+ _ListInfosReceivedEvent.Set();
+ }
+ }
+ */
+
+ private void _Event_RPL_ENDOFNAMES(IrcMessageData ircdata)
+ {
+ string channelname = ircdata.RawMessageArray[3];
+ if (ActiveChannelSyncing &&
+ IsJoined(channelname)) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("passive synced: "+channelname);
+#endif
+ if (OnChannelPassiveSynced != null) {
+ OnChannelPassiveSynced(this, new IrcEventArgs(ircdata));
+ }
+ }
+ }
+
+ private void _Event_RPL_AWAY(IrcMessageData ircdata)
+ {
+ string who = ircdata.RawMessageArray[3];
+ string awaymessage = ircdata.Message;
+
+ if (ActiveChannelSyncing) {
+ IrcUser ircuser = GetIrcUser(who);
+ if (ircuser != null) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("setting away flag for user: "+who);
+#endif
+ ircuser.IsAway = true;
+ }
+ }
+
+ if (OnAway != null) {
+ OnAway(this, new AwayEventArgs(ircdata, who, awaymessage));
+ }
+ }
+
+ private void _Event_RPL_UNAWAY(IrcMessageData ircdata)
+ {
+ _IsAway = false;
+
+ if (OnUnAway != null) {
+ OnUnAway(this, new IrcEventArgs(ircdata));
+ }
+ }
+
+ private void _Event_RPL_NOWAWAY(IrcMessageData ircdata)
+ {
+ _IsAway = true;
+
+ if (OnNowAway != null) {
+ OnNowAway(this, new IrcEventArgs(ircdata));
+ }
+ }
+
+ private void _Event_RPL_WHOREPLY(IrcMessageData ircdata)
+ {
+ WhoInfo info = WhoInfo.Parse(ircdata);
+ string channel = info.Channel;
+ string nick = info.Nick;
+
+ if (_WhoList != null) {
+ _WhoList.Add(info);
+ }
+
+ if (ActiveChannelSyncing &&
+ IsJoined(channel)) {
+ // checking the irc and channel user I only do for sanity!
+ // according to RFC they must be known to us already via RPL_NAMREPLY
+ // psyBNC is not very correct with this... maybe other bouncers too
+ IrcUser ircuser = GetIrcUser(nick);
+ ChannelUser channeluser = GetChannelUser(channel, nick);
+#if LOG4NET
+ if (ircuser == null) {
+ Logger.ChannelSyncing.Error("GetIrcUser("+nick+") returned null in _Event_WHOREPLY! Ignoring...");
+ }
+#endif
+
+#if LOG4NET
+ if (channeluser == null) {
+ Logger.ChannelSyncing.Error("GetChannelUser("+nick+") returned null in _Event_WHOREPLY! Ignoring...");
+ }
+#endif
+
+ if (ircuser != null) {
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("updating userinfo (from whoreply) for user: "+nick+" channel: "+channel);
+#endif
+
+ ircuser.Ident = info.Ident;
+ ircuser.Host = info.Host;
+ ircuser.Server = info.Server;
+ ircuser.Nick = info.Nick;
+ ircuser.HopCount = info.HopCount;
+ ircuser.Realname = info.Realname;
+ ircuser.IsAway = info.IsAway;
+ ircuser.IsIrcOp = info.IsIrcOp;
+ ircuser.IsRegistered = info.IsRegistered;
+
+ switch (channel[0]) {
+ case '#':
+ case '!':
+ case '&':
+ case '+':
+ // this channel may not be where we are joined!
+ // see RFC 1459 and RFC 2812, it must return a channelname
+ // we use this channel info when possible...
+ if (channeluser != null) {
+ channeluser.IsOp = info.IsOp;
+ channeluser.IsVoice = info.IsVoice;
+ }
+ break;
+ }
+ }
+ }
+
+ if (OnWho != null) {
+ OnWho(this, new WhoEventArgs(ircdata, info));
+ }
+ }
+
+ private void _Event_RPL_ENDOFWHO(IrcMessageData ircdata)
+ {
+ if (_WhoListReceivedEvent != null) {
+ _WhoListReceivedEvent.Set();
+ }
+ }
+
+ private void _Event_RPL_MOTD(IrcMessageData ircdata)
+ {
+ if (!_MotdReceived) {
+ _Motd.Add(ircdata.Message);
+ }
+
+ if (OnMotd != null) {
+ OnMotd(this, new MotdEventArgs(ircdata, ircdata.Message));
+ }
+ }
+
+ private void _Event_RPL_ENDOFMOTD(IrcMessageData ircdata)
+ {
+ _MotdReceived = true;
+ }
+
+ private void _Event_RPL_BANLIST(IrcMessageData ircdata)
+ {
+ string channelname = ircdata.Channel;
+
+ BanInfo info = BanInfo.Parse(ircdata);
+ if (_BanList != null) {
+ _BanList.Add(info);
+ }
+
+ if (ActiveChannelSyncing &&
+ IsJoined(channelname)) {
+ Channel channel = GetChannel(channelname);
+ if (channel.IsSycned) {
+ return;
+ }
+
+ channel.Bans.Add(info.Mask);
+ }
+ }
+
+ private void _Event_RPL_ENDOFBANLIST(IrcMessageData ircdata)
+ {
+ string channelname = ircdata.Channel;
+
+ if (_BanListReceivedEvent != null) {
+ _BanListReceivedEvent.Set();
+ }
+
+ if (ActiveChannelSyncing &&
+ IsJoined(channelname)) {
+ Channel channel = GetChannel(channelname);
+ if (channel.IsSycned) {
+ // only fire the event once
+ return;
+ }
+
+ channel.ActiveSyncStop = DateTime.Now;
+ channel.IsSycned = true;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("active synced: "+channelname+
+ " (in "+channel.ActiveSyncTime.TotalSeconds+" sec)");
+#endif
+ if (OnChannelActiveSynced != null) {
+ OnChannelActiveSynced(this, new IrcEventArgs(ircdata));
+ }
+ }
+ }
+
+ // MODE +b might return ERR_NOCHANMODES for mode-less channels (like +chan)
+ private void _Event_ERR_NOCHANMODES(IrcMessageData ircdata)
+ {
+ string channelname = ircdata.RawMessageArray[3];
+ if (ActiveChannelSyncing &&
+ IsJoined(channelname)) {
+ Channel channel = GetChannel(channelname);
+ if (channel.IsSycned) {
+ // only fire the event once
+ return;
+ }
+
+ channel.ActiveSyncStop = DateTime.Now;
+ channel.IsSycned = true;
+#if LOG4NET
+ Logger.ChannelSyncing.Debug("active synced: "+channelname+
+ " (in "+channel.ActiveSyncTime.TotalSeconds+" sec)");
+#endif
+ if (OnChannelActiveSynced != null) {
+ OnChannelActiveSynced(this, new IrcEventArgs(ircdata));
+ }
+ }
+ }
+
+ private void _Event_ERR(IrcMessageData ircdata)
+ {
+ if (OnErrorMessage != null) {
+ OnErrorMessage(this, new IrcEventArgs(ircdata));
+ }
+ }
+
+ private void _Event_ERR_NICKNAMEINUSE(IrcMessageData ircdata)
+ {
+#if LOG4NET
+ Logger.Connection.Warn("nickname collision detected, changing nickname");
+#endif
+ if (!AutoNickHandling) {
+ return;
+ }
+
+ string nickname;
+ // if a nicklist has been given loop through the nicknames
+ // if the upper limit of this list has been reached and still no nickname has registered
+ // then generate a random nick
+ if (_CurrentNickname == NicknameList.Length-1) {
+ Random rand = new Random();
+ int number = rand.Next(999);
+ if (Nickname.Length > 5) {
+ nickname = Nickname.Substring(0, 5)+number;
+ } else {
+ nickname = Nickname.Substring(0, Nickname.Length-1)+number;
+ }
+ } else {
+ nickname = _NextNickname();
+ }
+ // change the nickname
+ RfcNick(nickname, Priority.Critical);
+ }
+#endregion
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/IrcMessageData.cs b/SmartIrc4net/src/IrcClient/IrcMessageData.cs
new file mode 100644
index 0000000..223df0a
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/IrcMessageData.cs
@@ -0,0 +1,193 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ /// This class contains an IRC message in a parsed form
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public class IrcMessageData
+ {
+ private IrcClient _Irc;
+ private string _From;
+ private string _Nick;
+ private string _Ident;
+ private string _Host;
+ private string _Channel;
+ private string _Message;
+ private string[] _MessageArray;
+ private string _RawMessage;
+ private string[] _RawMessageArray;
+ private ReceiveType _Type;
+ private ReplyCode _ReplyCode;
+
+ /// <summary>
+ /// Gets the IrcClient object the message originated from
+ /// </summary>
+ public IrcClient Irc {
+ get {
+ return _Irc;
+ }
+ }
+
+ /// <summary>
+ /// Gets the combined nickname, identity and hostname of the user that sent the message
+ /// </summary>
+ /// <example>
+ /// nick!ident@host
+ /// </example>
+ public string From {
+ get {
+ return _From;
+ }
+ }
+
+ /// <summary>
+ /// Gets the nickname of the user that sent the message
+ /// </summary>
+ public string Nick {
+ get {
+ return _Nick;
+ }
+ }
+
+ /// <summary>
+ /// Gets the identity (username) of the user that sent the message
+ /// </summary>
+ public string Ident {
+ get {
+ return _Ident;
+ }
+ }
+
+ /// <summary>
+ /// Gets the hostname of the user that sent the message
+ /// </summary>
+ public string Host {
+ get {
+ return _Host;
+ }
+ }
+
+ /// <summary>
+ /// Gets the channel the message originated from
+ /// </summary>
+ public string Channel {
+ get {
+ return _Channel;
+ }
+ }
+
+ /// <summary>
+ /// Gets the message
+ /// </summary>
+ public string Message {
+ get {
+ return _Message;
+ }
+ }
+
+ /// <summary>
+ /// Gets the message as an array of strings (splitted by space)
+ /// </summary>
+ public string[] MessageArray {
+ get {
+ return _MessageArray;
+ }
+ }
+
+ /// <summary>
+ /// Gets the raw message sent by the server
+ /// </summary>
+ public string RawMessage {
+ get {
+ return _RawMessage;
+ }
+ }
+
+ /// <summary>
+ /// Gets the raw message sent by the server as array of strings (splitted by space)
+ /// </summary>
+ public string[] RawMessageArray {
+ get {
+ return _RawMessageArray;
+ }
+ }
+
+ /// <summary>
+ /// Gets the message type
+ /// </summary>
+ public ReceiveType Type {
+ get {
+ return _Type;
+ }
+ }
+
+ /// <summary>
+ /// Gets the message reply code
+ /// </summary>
+ public ReplyCode ReplyCode {
+ get {
+ return _ReplyCode;
+ }
+ }
+
+ /// <summary>
+ /// Constructor to create an instace of IrcMessageData
+ /// </summary>
+ /// <param name="ircclient">IrcClient the message originated from</param>
+ /// <param name="from">combined nickname, identity and host of the user that sent the message (nick!ident@host)</param>
+ /// <param name="nick">nickname of the user that sent the message</param>
+ /// <param name="ident">identity (username) of the userthat sent the message</param>
+ /// <param name="host">hostname of the user that sent the message</param>
+ /// <param name="channel">channel the message originated from</param>
+ /// <param name="message">message</param>
+ /// <param name="rawmessage">raw message sent by the server</param>
+ /// <param name="type">message type</param>
+ /// <param name="replycode">message reply code</param>
+ public IrcMessageData(IrcClient ircclient, string from, string nick, string ident, string host, string channel, string message, string rawmessage, ReceiveType type, ReplyCode replycode)
+ {
+ _Irc = ircclient;
+ _RawMessage = rawmessage;
+ _RawMessageArray = rawmessage.Split(new char[] {' '});
+ _Type = type;
+ _ReplyCode = replycode;
+ _From = from;
+ _Nick = nick;
+ _Ident = ident;
+ _Host = host;
+ _Channel = channel;
+ if (message != null) {
+ // message is optional
+ _Message = message;
+ _MessageArray = message.Split(new char[] {' '});
+ }
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/IrcUser.cs b/SmartIrc4net/src/IrcClient/IrcUser.cs
new file mode 100644
index 0000000..95f7f12
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/IrcUser.cs
@@ -0,0 +1,224 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System.Collections.Specialized;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ /// This class manages the user information.
+ /// </summary>
+ /// <remarks>
+ /// only used with channel sync
+ /// <seealso cref="IrcClient.ActiveChannelSyncing">
+ /// IrcClient.ActiveChannelSyncing
+ /// </seealso>
+ /// </remarks>
+ /// <threadsafety static="true" instance="true" />
+ public class IrcUser
+ {
+ private IrcClient _IrcClient;
+ private string _Nick = null;
+ private string _Ident = null;
+ private string _Host = null;
+ private string _Realname = null;
+ private bool _IsIrcOp = false;
+ private bool _IsRegistered = false;
+ private bool _IsAway = false;
+ private string _Server = null;
+ private int _HopCount = -1;
+
+ internal IrcUser(string nickname, IrcClient ircclient)
+ {
+ _IrcClient = ircclient;
+ _Nick = nickname;
+ }
+
+#if LOG4NET
+ ~IrcUser()
+ {
+ Logger.ChannelSyncing.Debug("IrcUser ("+Nick+") destroyed");
+ }
+#endif
+
+ /// <summary>
+ /// Gets or sets the nickname of the user.
+ /// </summary>
+ /// <remarks>
+ /// Do _not_ set this value, it will break channel sync!
+ /// </remarks>
+ public string Nick {
+ get {
+ return _Nick;
+ }
+ set {
+ _Nick = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the identity (username) of the user which is used by some IRC networks for authentication.
+ /// </summary>
+ /// <remarks>
+ /// Do _not_ set this value, it will break channel sync!
+ /// </remarks>
+ public string Ident {
+ get {
+ return _Ident;
+ }
+ set {
+ _Ident = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the hostname of the user.
+ /// </summary>
+ /// <remarks>
+ /// Do _not_ set this value, it will break channel sync!
+ /// </remarks>
+ public string Host {
+ get {
+ return _Host;
+ }
+ set {
+ _Host = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the supposed real name of the user.
+ /// </summary>
+ /// <remarks>
+ /// Do _not_ set this value, it will break channel sync!
+ /// </remarks>
+ public string Realname {
+ get {
+ return _Realname;
+ }
+ set {
+ _Realname = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the server operator status of the user
+ /// </summary>
+ /// <remarks>
+ /// Do _not_ set this value, it will break channel sync!
+ /// </remarks>
+ public bool IsIrcOp {
+ get {
+ return _IsIrcOp;
+ }
+ set {
+ _IsIrcOp = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the registered status of the user
+ /// </summary>
+ public bool IsRegistered {
+ get {
+ return _IsRegistered;
+ }
+ internal set {
+ _IsRegistered = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets away status of the user
+ /// </summary>
+ /// <remarks>
+ /// Do _not_ set this value, it will break channel sync!
+ /// </remarks>
+ public bool IsAway {
+ get {
+ return _IsAway;
+ }
+ set {
+ _IsAway = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the server the user is connected to
+ /// </summary>
+ /// <remarks>
+ /// Do _not_ set this value, it will break channel sync!
+ /// </remarks>
+ public string Server {
+ get {
+ return _Server;
+ }
+ set {
+ _Server = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the count of hops between you and the user's server
+ /// </summary>
+ /// <remarks>
+ /// Do _not_ set this value, it will break channel sync!
+ /// </remarks>
+ public int HopCount {
+ get {
+ return _HopCount;
+ }
+ set {
+ _HopCount = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets the list of channels the user has joined
+ /// </summary>
+ public string[] JoinedChannels {
+ get {
+ Channel channel;
+ string[] result;
+ string[] channels = _IrcClient.GetChannels();
+ StringCollection joinedchannels = new StringCollection();
+ foreach (string channelname in channels) {
+ channel = _IrcClient.GetChannel(channelname);
+ if (channel.UnsafeUsers.ContainsKey(_Nick)) {
+ joinedchannels.Add(channelname);
+ }
+ }
+
+ result = new string[joinedchannels.Count];
+ joinedchannels.CopyTo(result, 0);
+ return result;
+ //return joinedchannels;
+ }
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/NonRfcChannel.cs b/SmartIrc4net/src/IrcClient/NonRfcChannel.cs
new file mode 100644
index 0000000..1fe91a9
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/NonRfcChannel.cs
@@ -0,0 +1,77 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public class NonRfcChannel : Channel
+ {
+ private Hashtable _Halfops = Hashtable.Synchronized(new Hashtable(new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer()));
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="name"> </param>
+ internal NonRfcChannel(string name) : base(name)
+ {
+ }
+
+#if LOG4NET
+ ~NonRfcChannel()
+ {
+ Logger.ChannelSyncing.Debug("NonRfcChannel ("+Name+") destroyed");
+ }
+#endif
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public Hashtable Halfops {
+ get {
+ return (Hashtable) _Halfops.Clone();
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ internal Hashtable UnsafeHalfops {
+ get {
+ return _Halfops;
+ }
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/NonRfcChannelUser.cs b/SmartIrc4net/src/IrcClient/NonRfcChannelUser.cs
new file mode 100644
index 0000000..e34500a
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/NonRfcChannelUser.cs
@@ -0,0 +1,70 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public class NonRfcChannelUser : ChannelUser
+ {
+ private bool _IsHalfop;
+ private bool _IsOwner;
+ private bool _IsAdmin;
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"> </param>
+ /// <param name="ircuser"> </param>
+ internal NonRfcChannelUser(string channel, IrcUser ircuser) : base(channel, ircuser)
+ {
+ }
+
+#if LOG4NET
+ ~NonRfcChannelUser()
+ {
+ Logger.ChannelSyncing.Debug("NonRfcChannelUser ("+Channel+":"+IrcUser.Nick+") destroyed");
+ }
+#endif
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <value> </value>
+ public bool IsHalfop {
+ get {
+ return _IsHalfop;
+ }
+ set {
+ _IsHalfop = value;
+ }
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcClient/WhoInfo.cs b/SmartIrc4net/src/IrcClient/WhoInfo.cs
new file mode 100644
index 0000000..15fbcbd
--- /dev/null
+++ b/SmartIrc4net/src/IrcClient/WhoInfo.cs
@@ -0,0 +1,186 @@
+/*
+ * $Id: IrcUser.cs 198 2005-06-08 16:50:11Z meebey $
+ * $URL: svn+ssh://svn.qnetp.net/svn/smartirc/SmartIrc4net/trunk/src/IrcClient/IrcUser.cs $
+ * $Rev: 198 $
+ * $Author: meebey $
+ * $Date: 2005-06-08 18:50:11 +0200 (Wed, 08 Jun 2005) $
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+
+using System;
+
+namespace Meebey.SmartIrc4net
+{
+ public class WhoInfo
+ {
+ private string f_Channel;
+ private string f_Ident;
+ private string f_Host;
+ private string f_Server;
+ private string f_Nick;
+ private int f_HopCount;
+ private string f_Realname;
+ private bool f_IsAway;
+ private bool f_IsOp;
+ private bool f_IsVoice;
+ private bool f_IsIrcOp;
+ private bool f_IsRegistered;
+
+ public string Channel {
+ get {
+ return f_Channel;
+ }
+ }
+
+ public string Ident {
+ get {
+ return f_Ident;
+ }
+ }
+
+ public string Host {
+ get {
+ return f_Host;
+ }
+ }
+
+ public string Server {
+ get {
+ return f_Server;
+ }
+ }
+
+ public string Nick {
+ get {
+ return f_Nick;
+ }
+ }
+
+ public int HopCount {
+ get {
+ return f_HopCount;
+ }
+ }
+
+ public string Realname {
+ get {
+ return f_Realname;
+ }
+ }
+
+ public bool IsAway {
+ get {
+ return f_IsAway;
+ }
+ }
+
+ public bool IsOp {
+ get {
+ return f_IsOp;
+ }
+ }
+
+ public bool IsVoice {
+ get {
+ return f_IsVoice;
+ }
+ }
+
+ public bool IsIrcOp {
+ get {
+ return f_IsIrcOp;
+ }
+ }
+
+ public bool IsRegistered {
+ get {
+ return f_IsRegistered;
+ }
+ }
+
+ private WhoInfo()
+ {
+ }
+
+ public static WhoInfo Parse(IrcMessageData data)
+ {
+ WhoInfo whoInfo = new WhoInfo();
+ // :fu-berlin.de 352 meebey_ * ~meebey e176002059.adsl.alicedsl.de fu-berlin.de meebey_ H :0 Mirco Bauer..
+ whoInfo.f_Channel = data.RawMessageArray[3];
+ whoInfo.f_Ident = data.RawMessageArray[4];
+ whoInfo.f_Host = data.RawMessageArray[5];
+ whoInfo.f_Server = data.RawMessageArray[6];
+ whoInfo.f_Nick = data.RawMessageArray[7];
+ // skip hop count
+ whoInfo.f_Realname = String.Join(" ", data.MessageArray, 1, data.MessageArray.Length - 1);
+
+ int hopcount = 0;
+ string hopcountStr = data.MessageArray[0];
+ try {
+ hopcount = int.Parse(hopcountStr);
+ } catch (FormatException ex) {
+#if LOG4NET
+ Logger.MessageParser.Warn("Parse(): couldn't parse (as int): '" + hopcountStr + "'", ex);
+#endif
+ }
+
+ string usermode = data.RawMessageArray[8];
+ bool op = false;
+ bool voice = false;
+ bool ircop = false;
+ bool away = false;
+ bool registered = false;
+ int usermodelength = usermode.Length;
+ for (int i = 0; i < usermodelength; i++) {
+ switch (usermode[i]) {
+ case 'H':
+ away = false;
+ break;
+ case 'G':
+ away = true;
+ break;
+ case '@':
+ op = true;
+ break;
+ case '+':
+ voice = true;
+ break;
+ case '*':
+ ircop = true;
+ break;
+ case 'r':
+ registered = true;
+ break;
+ }
+ }
+ whoInfo.f_IsAway = away;
+ whoInfo.f_IsOp = op;
+ whoInfo.f_IsVoice = voice;
+ whoInfo.f_IsIrcOp = ircop;
+
+ whoInfo.f_IsRegistered = registered;
+
+ return whoInfo;
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcCommands/IrcCommands.cs b/SmartIrc4net/src/IrcCommands/IrcCommands.cs
new file mode 100644
index 0000000..bbe6625
--- /dev/null
+++ b/SmartIrc4net/src/IrcCommands/IrcCommands.cs
@@ -0,0 +1,2438 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public class IrcCommands : IrcConnection
+ {
+ private int _MaxModeChanges = 3;
+
+ protected int MaxModeChanges {
+ get {
+ return _MaxModeChanges;
+ }
+ set {
+ _MaxModeChanges = value;
+ }
+ }
+
+#if LOG4NET
+ public IrcCommands()
+ {
+ Logger.Main.Debug("IrcCommands created");
+ }
+#endif
+
+#if LOG4NET
+ ~IrcCommands()
+ {
+ Logger.Main.Debug("IrcCommands destroyed");
+ }
+#endif
+
+ // API commands
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="type"></param>
+ /// <param name="destination"></param>
+ /// <param name="message"></param>
+ /// <param name="priority"></param>
+ public void SendMessage(SendType type, string destination, string message, Priority priority)
+ {
+ switch(type) {
+ case SendType.Message:
+ RfcPrivmsg(destination, message, priority);
+ break;
+ case SendType.Action:
+ RfcPrivmsg(destination, "\x1"+"ACTION "+message+"\x1", priority);
+ break;
+ case SendType.Notice:
+ RfcNotice(destination, message, priority);
+ break;
+ case SendType.CtcpRequest:
+ RfcPrivmsg(destination, "\x1"+message+"\x1", priority);
+ break;
+ case SendType.CtcpReply:
+ RfcNotice(destination, "\x1"+message+"\x1", priority);
+ break;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="type"></param>
+ /// <param name="destination"></param>
+ /// <param name="message"></param>
+ public void SendMessage(SendType type, string destination, string message)
+ {
+ SendMessage(type, destination, message, Priority.Medium);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="data"></param>
+ /// <param name="message"></param>
+ /// <param name="priority"></param>
+ public void SendReply(IrcMessageData data, string message, Priority priority)
+ {
+ switch (data.Type) {
+ case ReceiveType.ChannelMessage:
+ SendMessage(SendType.Message, data.Channel, message, priority);
+ break;
+ case ReceiveType.QueryMessage:
+ SendMessage(SendType.Message, data.Nick, message, priority);
+ break;
+ case ReceiveType.QueryNotice:
+ SendMessage(SendType.Notice, data.Nick, message, priority);
+ break;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="data"></param>
+ /// <param name="message"></param>
+ public void SendReply(IrcMessageData data, string message)
+ {
+ SendReply(data, message, Priority.Medium);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void Op(string channel, string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+o "+nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ public void Op(string channel, string[] nicknames)
+ {
+ if (nicknames == null) {
+ throw new ArgumentNullException("nicknames");
+ }
+
+ string[] modes = new string[nicknames.Length];
+ for (int i = 0; i < nicknames.Length; i++) {
+ modes[i] = "+o";
+ }
+ Mode(channel, modes, nicknames);
+ }
+
+ public void Op(string channel, string nickname)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+o "+nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void Deop(string channel, string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(channel, "-o "+nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ public void Deop(string channel, string nickname)
+ {
+ WriteLine(Rfc2812.Mode(channel, "-o "+nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ public void Deop(string channel, string[] nicknames)
+ {
+ if (nicknames == null) {
+ throw new ArgumentNullException("nicknames");
+ }
+
+ string[] modes = new string[nicknames.Length];
+ for (int i = 0; i < nicknames.Length; i++) {
+ modes[i] = "-o";
+ }
+ Mode(channel, modes, nicknames);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void Voice(string channel, string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+v "+nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ public void Voice(string channel, string nickname)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+v "+nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ public void Voice(string channel, string[] nicknames)
+ {
+ if (nicknames == null) {
+ throw new ArgumentNullException("nicknames");
+ }
+
+ string[] modes = new string[nicknames.Length];
+ for (int i = 0; i < nicknames.Length; i++) {
+ modes[i] = "+v";
+ }
+ Mode(channel, modes, nicknames);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void Devoice(string channel, string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(channel, "-v "+nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ public void Devoice(string channel, string nickname)
+ {
+ WriteLine(Rfc2812.Mode(channel, "-v "+nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nicknames"></param>
+ public void Devoice(string channel, string[] nicknames)
+ {
+ if (nicknames == null) {
+ throw new ArgumentNullException("nicknames");
+ }
+
+ string[] modes = new string[nicknames.Length];
+ for (int i = 0; i < nicknames.Length; i++) {
+ modes[i] = "-v";
+ }
+ Mode(channel, modes, nicknames);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="priority"></param>
+ public void Ban(string channel, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+b"), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ public void Ban(string channel)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+b"));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="hostmask"></param>
+ /// <param name="priority"></param>
+ public void Ban(string channel, string hostmask, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+b "+hostmask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="hostmask"></param>
+ public void Ban(string channel, string hostmask)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+b "+hostmask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="hostmasks"></param>
+ public void Ban(string channel, string[] hostmasks)
+ {
+ if (hostmasks == null) {
+ throw new ArgumentNullException("hostmasks");
+ }
+
+ string[] modes = new string[hostmasks.Length];
+ for (int i = 0; i < hostmasks.Length; i++) {
+ modes[i] = "+b";
+ }
+ Mode(channel, modes, hostmasks);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="hostmask"></param>
+ /// <param name="priority"></param>
+ public void Unban(string channel, string hostmask, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(channel, "-b "+hostmask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="hostmask"></param>
+ public void Unban(string channel, string hostmask)
+ {
+ WriteLine(Rfc2812.Mode(channel, "-b "+hostmask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="hostmasks"></param>
+ public void Unban(string channel, string[] hostmasks)
+ {
+ if (hostmasks == null) {
+ throw new ArgumentNullException("hostmasks");
+ }
+
+ string[] modes = new string[hostmasks.Length];
+ for (int i = 0; i < hostmasks.Length; i++) {
+ modes[i] = "-b";
+ }
+ Mode(channel, modes, hostmasks);
+ }
+
+ // non-RFC commands
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void Halfop(string channel, string nickname)
+ {
+ WriteLine(Rfc2812.Mode(channel, "+h "+nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nicknames"></param>
+ public void Halfop(string channel, string[] nicknames)
+ {
+ if (nicknames == null) {
+ throw new ArgumentNullException("nicknames");
+ }
+
+ string[] modes = new string[nicknames.Length];
+ for (int i = 0; i < nicknames.Length; i++) {
+ modes[i] = "+h";
+ }
+ Mode(channel, modes, nicknames);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ public void Dehalfop(string channel, string nickname)
+ {
+ WriteLine(Rfc2812.Mode(channel, "-h "+nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nicknames"></param>
+ public void Dehalfop(string channel, string[] nicknames)
+ {
+ if (nicknames == null) {
+ throw new ArgumentNullException("nicknames");
+ }
+
+ string[] modes = new string[nicknames.Length];
+ for (int i = 0; i < nicknames.Length; i++) {
+ modes[i] = "-h";
+ }
+ Mode(channel, modes, nicknames);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="newModes"></param>
+ /// <param name="newModeParameters"></param>
+ public void Mode(string target, string[] newModes, string[] newModeParameters)
+ {
+ if (target == null) {
+ throw new ArgumentNullException("target");
+ }
+ if (newModes == null) {
+ throw new ArgumentNullException("newModes");
+ }
+ if (newModeParameters == null) {
+ throw new ArgumentNullException("newModeParameters");
+ }
+ if (newModes.Length == 0) {
+ throw new ArgumentException("newModes must not be empty." , "newModes");
+ }
+ if (newModeParameters.Length == 0) {
+ throw new ArgumentException("newModeParameters must not be empty." , "newModeParameters");
+ }
+ if (newModes.Length != newModeParameters.Length) {
+ throw new ArgumentException("newModes and newModeParameters must have the same size.", "newModes");
+ }
+
+ int maxModeChanges = _MaxModeChanges;
+ for (int i = 0; i < newModes.Length; i += maxModeChanges) {
+ var newModeChunks = new List<string>(maxModeChanges);
+ var newModeParameterChunks = new List<string>(maxModeChanges);
+ for (int j = 0; j < maxModeChanges; j++) {
+ if (i + j >= newModes.Length) {
+ break;
+ }
+ newModeChunks.Add(newModes[i + j]);
+ newModeParameterChunks.Add(newModeParameters[i + j]);
+ }
+ WriteLine(Rfc2812.Mode(target, newModeChunks.ToArray(),
+ newModeParameterChunks.ToArray()));
+ }
+ }
+
+#region RFC commands
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="password"></param>
+ /// <param name="priority"></param>
+ public void RfcPass(string password, Priority priority)
+ {
+ WriteLine(Rfc2812.Pass(password), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="password"></param>
+ public void RfcPass(string password)
+ {
+ WriteLine(Rfc2812.Pass(password));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="username"></param>
+ /// <param name="usermode"></param>
+ /// <param name="realname"></param>
+ /// <param name="priority"></param>
+ public void RfcUser(string username, int usermode, string realname, Priority priority)
+ {
+ WriteLine(Rfc2812.User(username, usermode, realname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="username"></param>
+ /// <param name="usermode"></param>
+ /// <param name="realname"></param>
+ public void RfcUser(string username, int usermode, string realname)
+ {
+ WriteLine(Rfc2812.User(username, usermode, realname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="name"></param>
+ /// <param name="password"></param>
+ /// <param name="priority"></param>
+ public void RfcOper(string name, string password, Priority priority)
+ {
+ WriteLine(Rfc2812.Oper(name, password), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="name"></param>
+ /// <param name="password"></param>
+ public void RfcOper(string name, string password)
+ {
+ WriteLine(Rfc2812.Oper(name, password));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="destination"></param>
+ /// <param name="message"></param>
+ /// <param name="priority"></param>
+ public void RfcPrivmsg(string destination, string message, Priority priority)
+ {
+ WriteLine(Rfc2812.Privmsg(destination, message), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="destination"></param>
+ /// <param name="message"></param>
+ public void RfcPrivmsg(string destination, string message)
+ {
+ WriteLine(Rfc2812.Privmsg(destination, message));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="destination"></param>
+ /// <param name="message"></param>
+ /// <param name="priority"></param>
+ public void RfcNotice(string destination, string message, Priority priority)
+ {
+ WriteLine(Rfc2812.Notice(destination, message), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="destination"></param>
+ /// <param name="message"></param>
+ public void RfcNotice(string destination, string message)
+ {
+ WriteLine(Rfc2812.Notice(destination, message));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="priority"></param>
+ public void RfcJoin(string channel, Priority priority)
+ {
+ WriteLine(Rfc2812.Join(channel), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ public void RfcJoin(string channel)
+ {
+ WriteLine(Rfc2812.Join(channel));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="priority"></param>
+ public void RfcJoin(string[] channels, Priority priority)
+ {
+ WriteLine(Rfc2812.Join(channels), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ public void RfcJoin(string[] channels)
+ {
+ WriteLine(Rfc2812.Join(channels));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="key"></param>
+ /// <param name="priority"></param>
+ public void RfcJoin(string channel, string key, Priority priority)
+ {
+ WriteLine(Rfc2812.Join(channel, key), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="key"></param>
+ public void RfcJoin(string channel, string key)
+ {
+ WriteLine(Rfc2812.Join(channel, key));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="keys"></param>
+ /// <param name="priority"></param>
+ public void RfcJoin(string[] channels, string[] keys, Priority priority)
+ {
+ WriteLine(Rfc2812.Join(channels, keys), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="keys"></param>
+ public void RfcJoin(string[] channels, string[] keys)
+ {
+ WriteLine(Rfc2812.Join(channels, keys));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="priority"></param>
+ public void RfcPart(string channel, Priority priority)
+ {
+ WriteLine(Rfc2812.Part(channel), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ public void RfcPart(string channel)
+ {
+ WriteLine(Rfc2812.Part(channel));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="priority"></param>
+ public void RfcPart(string[] channels, Priority priority)
+ {
+ WriteLine(Rfc2812.Part(channels), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ public void RfcPart(string[] channels)
+ {
+ WriteLine(Rfc2812.Part(channels));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="partmessage"></param>
+ /// <param name="priority"></param>
+ public void RfcPart(string channel, string partmessage, Priority priority)
+ {
+ WriteLine(Rfc2812.Part(channel, partmessage), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="partmessage"></param>
+ public void RfcPart(string channel, string partmessage)
+ {
+ WriteLine(Rfc2812.Part(channel, partmessage));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="partmessage"></param>
+ /// <param name="priority"></param>
+ public void RfcPart(string[] channels, string partmessage, Priority priority)
+ {
+ WriteLine(Rfc2812.Part(channels, partmessage), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="partmessage"></param>
+ public void RfcPart(string[] channels, string partmessage)
+ {
+ WriteLine(Rfc2812.Part(channels, partmessage));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void RfcKick(string channel, string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Kick(channel, nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ public void RfcKick(string channel, string nickname)
+ {
+ WriteLine(Rfc2812.Kick(channel, nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void RfcKick(string[] channels, string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Kick(channels, nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="nickname"></param>
+ public void RfcKick(string[] channels, string nickname)
+ {
+ WriteLine(Rfc2812.Kick(channels, nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nicknames"></param>
+ /// <param name="priority"></param>
+ public void RfcKick(string channel, string[] nicknames, Priority priority)
+ {
+ WriteLine(Rfc2812.Kick(channel, nicknames), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nicknames"></param>
+ public void RfcKick(string channel, string[] nicknames)
+ {
+ WriteLine(Rfc2812.Kick(channel, nicknames));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="nicknames"></param>
+ /// <param name="priority"></param>
+ public void RfcKick(string[] channels, string[] nicknames, Priority priority)
+ {
+ WriteLine(Rfc2812.Kick(channels, nicknames), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="nicknames"></param>
+ public void RfcKick(string[] channels, string[] nicknames)
+ {
+ WriteLine(Rfc2812.Kick(channels, nicknames));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ /// <param name="comment"></param>
+ /// <param name="priority"></param>
+ public void RfcKick(string channel, string nickname, string comment, Priority priority)
+ {
+ WriteLine(Rfc2812.Kick(channel, nickname, comment), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nickname"></param>
+ /// <param name="comment"></param>
+ public void RfcKick(string channel, string nickname, string comment)
+ {
+ WriteLine(Rfc2812.Kick(channel, nickname, comment));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="nickname"></param>
+ /// <param name="comment"></param>
+ /// <param name="priority"></param>
+ public void RfcKick(string[] channels, string nickname, string comment, Priority priority)
+ {
+ WriteLine(Rfc2812.Kick(channels, nickname, comment), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="nickname"></param>
+ /// <param name="comment"></param>
+ public void RfcKick(string[] channels, string nickname, string comment)
+ {
+ WriteLine(Rfc2812.Kick(channels, nickname, comment));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nicknames"></param>
+ /// <param name="comment"></param>
+ /// <param name="priority"></param>
+ public void RfcKick(string channel, string[] nicknames, string comment, Priority priority)
+ {
+ WriteLine(Rfc2812.Kick(channel, nicknames, comment), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="nicknames"></param>
+ /// <param name="comment"></param>
+ public void RfcKick(string channel, string[] nicknames, string comment)
+ {
+ WriteLine(Rfc2812.Kick(channel, nicknames, comment));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="nicknames"></param>
+ /// <param name="comment"></param>
+ /// <param name="priority"></param>
+ public void RfcKick(string[] channels, string[] nicknames, string comment, Priority priority)
+ {
+ WriteLine(Rfc2812.Kick(channels, nicknames, comment), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="nicknames"></param>
+ /// <param name="comment"></param>
+ public void RfcKick(string[] channels, string[] nicknames, string comment)
+ {
+ WriteLine(Rfc2812.Kick(channels, nicknames, comment));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcMotd(Priority priority)
+ {
+ WriteLine(Rfc2812.Motd(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcMotd()
+ {
+ WriteLine(Rfc2812.Motd());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcMotd(string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Motd(target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ public void RfcMotd(string target)
+ {
+ WriteLine(Rfc2812.Motd(target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ [Obsolete("use RfcLusers(Priority) instead")]
+ public void RfcLuser(Priority priority)
+ {
+ RfcLusers(priority);
+ }
+
+ public void RfcLusers(Priority priority)
+ {
+ WriteLine(Rfc2812.Lusers(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ [Obsolete("use RfcLusers() instead")]
+ public void RfcLuser()
+ {
+ RfcLusers();
+ }
+
+ public void RfcLusers()
+ {
+ WriteLine(Rfc2812.Lusers());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="priority"></param>
+ [Obsolete("use RfcLusers(string, Priority) instead")]
+ public void RfcLuser(string mask, Priority priority)
+ {
+ RfcLusers(mask, priority);
+ }
+
+ public void RfcLusers(string mask, Priority priority)
+ {
+ WriteLine(Rfc2812.Lusers(mask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ [Obsolete("use RfcLusers(string) instead")]
+ public void RfcLuser(string mask)
+ {
+ RfcLusers(mask);
+ }
+
+ public void RfcLusers(string mask)
+ {
+ WriteLine(Rfc2812.Lusers(mask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ [Obsolete("use RfcLusers(string, string, Priority) instead")]
+ public void RfcLuser(string mask, string target, Priority priority)
+ {
+ RfcLusers(mask, target, priority);
+ }
+
+ public void RfcLusers(string mask, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Lusers(mask, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="target"></param>
+ [Obsolete("use RfcLusers(string, string) instead")]
+ public void RfcLuser(string mask, string target)
+ {
+ RfcLusers(mask, target);
+ }
+
+ public void RfcLusers(string mask, string target)
+ {
+ WriteLine(Rfc2812.Lusers(mask, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcVersion(Priority priority)
+ {
+ WriteLine(Rfc2812.Version(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcVersion()
+ {
+ WriteLine(Rfc2812.Version());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcVersion(string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Version(target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ public void RfcVersion(string target)
+ {
+ WriteLine(Rfc2812.Version(target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcStats(Priority priority)
+ {
+ WriteLine(Rfc2812.Stats(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcStats()
+ {
+ WriteLine(Rfc2812.Stats());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="query"></param>
+ /// <param name="priority"></param>
+ public void RfcStats(string query, Priority priority)
+ {
+ WriteLine(Rfc2812.Stats(query), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="query"></param>
+ public void RfcStats(string query)
+ {
+ WriteLine(Rfc2812.Stats(query));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="query"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcStats(string query, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Stats(query, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="query"></param>
+ /// <param name="target"></param>
+ public void RfcStats(string query, string target)
+ {
+ WriteLine(Rfc2812.Stats(query, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcLinks()
+ {
+ WriteLine(Rfc2812.Links());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="servermask"></param>
+ /// <param name="priority"></param>
+ public void RfcLinks(string servermask, Priority priority)
+ {
+ WriteLine(Rfc2812.Links(servermask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="servermask"></param>
+ public void RfcLinks(string servermask)
+ {
+ WriteLine(Rfc2812.Links(servermask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="remoteserver"></param>
+ /// <param name="servermask"></param>
+ /// <param name="priority"></param>
+ public void RfcLinks(string remoteserver, string servermask, Priority priority)
+ {
+ WriteLine(Rfc2812.Links(remoteserver, servermask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="remoteserver"></param>
+ /// <param name="servermask"></param>
+ public void RfcLinks(string remoteserver, string servermask)
+ {
+ WriteLine(Rfc2812.Links(remoteserver, servermask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcTime(Priority priority)
+ {
+ WriteLine(Rfc2812.Time(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcTime()
+ {
+ WriteLine(Rfc2812.Time());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcTime(string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Time(target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ public void RfcTime(string target)
+ {
+ WriteLine(Rfc2812.Time(target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="targetserver"></param>
+ /// <param name="port"></param>
+ /// <param name="priority"></param>
+ public void RfcConnect(string targetserver, string port, Priority priority)
+ {
+ WriteLine(Rfc2812.Connect(targetserver, port), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="targetserver"></param>
+ /// <param name="port"></param>
+ public void RfcConnect(string targetserver, string port)
+ {
+ WriteLine(Rfc2812.Connect(targetserver, port));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="targetserver"></param>
+ /// <param name="port"></param>
+ /// <param name="remoteserver"></param>
+ /// <param name="priority"></param>
+ public void RfcConnect(string targetserver, string port, string remoteserver, Priority priority)
+ {
+ WriteLine(Rfc2812.Connect(targetserver, port, remoteserver), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="targetserver"></param>
+ /// <param name="port"></param>
+ /// <param name="remoteserver"></param>
+ public void RfcConnect(string targetserver, string port, string remoteserver)
+ {
+ WriteLine(Rfc2812.Connect(targetserver, port, remoteserver));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcTrace(Priority priority)
+ {
+ WriteLine(Rfc2812.Trace(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcTrace()
+ {
+ WriteLine(Rfc2812.Trace());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcTrace(string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Trace(target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ public void RfcTrace(string target)
+ {
+ WriteLine(Rfc2812.Trace(target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcAdmin(Priority priority)
+ {
+ WriteLine(Rfc2812.Admin(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcAdmin()
+ {
+ WriteLine(Rfc2812.Admin());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcAdmin(string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Admin(target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ public void RfcAdmin(string target)
+ {
+ WriteLine(Rfc2812.Admin(target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcInfo(Priority priority)
+ {
+ WriteLine(Rfc2812.Info(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcInfo()
+ {
+ WriteLine(Rfc2812.Info());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcInfo(string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Info(target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ public void RfcInfo(string target)
+ {
+ WriteLine(Rfc2812.Info(target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcServlist(Priority priority)
+ {
+ WriteLine(Rfc2812.Servlist(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcServlist()
+ {
+ WriteLine(Rfc2812.Servlist());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="priority"></param>
+ public void RfcServlist(string mask, Priority priority)
+ {
+ WriteLine(Rfc2812.Servlist(mask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ public void RfcServlist(string mask)
+ {
+ WriteLine(Rfc2812.Servlist(mask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="type"></param>
+ /// <param name="priority"></param>
+ public void RfcServlist(string mask, string type, Priority priority)
+ {
+ WriteLine(Rfc2812.Servlist(mask, type), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="type"></param>
+ public void RfcServlist(string mask, string type)
+ {
+ WriteLine(Rfc2812.Servlist(mask, type));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="servicename"></param>
+ /// <param name="servicetext"></param>
+ /// <param name="priority"></param>
+ public void RfcSquery(string servicename, string servicetext, Priority priority)
+ {
+ WriteLine(Rfc2812.Squery(servicename, servicetext), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="servicename"></param>
+ /// <param name="servicetext"></param>
+ public void RfcSquery(string servicename, string servicetext)
+ {
+ WriteLine(Rfc2812.Squery(servicename, servicetext));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="priority"></param>
+ public void RfcList(string channel, Priority priority)
+ {
+ WriteLine(Rfc2812.List(channel), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ public void RfcList(string channel)
+ {
+ WriteLine(Rfc2812.List(channel));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="priority"></param>
+ public void RfcList(string[] channels, Priority priority)
+ {
+ WriteLine(Rfc2812.List(channels), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ public void RfcList(string[] channels)
+ {
+ WriteLine(Rfc2812.List(channels));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcList(string channel, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.List(channel, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="target"></param>
+ public void RfcList(string channel, string target)
+ {
+ WriteLine(Rfc2812.List(channel, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcList(string[] channels, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.List(channels, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="target"></param>
+ public void RfcList(string[] channels, string target)
+ {
+ WriteLine(Rfc2812.List(channels, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="priority"></param>
+ public void RfcNames(string channel, Priority priority)
+ {
+ WriteLine(Rfc2812.Names(channel), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ public void RfcNames(string channel)
+ {
+ WriteLine(Rfc2812.Names(channel));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="priority"></param>
+ public void RfcNames(string[] channels, Priority priority)
+ {
+ WriteLine(Rfc2812.Names(channels), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ public void RfcNames(string[] channels)
+ {
+ WriteLine(Rfc2812.Names(channels));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcNames(string channel, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Names(channel, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="target"></param>
+ public void RfcNames(string channel, string target)
+ {
+ WriteLine(Rfc2812.Names(channel, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcNames(string[] channels, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Names(channels, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channels"></param>
+ /// <param name="target"></param>
+ public void RfcNames(string[] channels, string target)
+ {
+ WriteLine(Rfc2812.Names(channels, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="priority"></param>
+ public void RfcTopic(string channel, Priority priority)
+ {
+ WriteLine(Rfc2812.Topic(channel), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ public void RfcTopic(string channel)
+ {
+ WriteLine(Rfc2812.Topic(channel));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="newtopic"></param>
+ /// <param name="priority"></param>
+ public void RfcTopic(string channel, string newtopic, Priority priority)
+ {
+ WriteLine(Rfc2812.Topic(channel, newtopic), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="channel"></param>
+ /// <param name="newtopic"></param>
+ public void RfcTopic(string channel, string newtopic)
+ {
+ WriteLine(Rfc2812.Topic(channel, newtopic));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcMode(string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ public void RfcMode(string target)
+ {
+ WriteLine(Rfc2812.Mode(target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="newmode"></param>
+ /// <param name="priority"></param>
+ public void RfcMode(string target, string newmode, Priority priority)
+ {
+ WriteLine(Rfc2812.Mode(target, newmode), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="newmode"></param>
+ public void RfcMode(string target, string newmode)
+ {
+ WriteLine(Rfc2812.Mode(target, newmode));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="distribution"></param>
+ /// <param name="info"></param>
+ /// <param name="priority"></param>
+ public void RfcService(string nickname, string distribution, string info, Priority priority)
+ {
+ WriteLine(Rfc2812.Service(nickname, distribution, info), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="distribution"></param>
+ /// <param name="info"></param>
+ public void RfcService(string nickname, string distribution, string info)
+ {
+ WriteLine(Rfc2812.Service(nickname, distribution, info));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="channel"></param>
+ /// <param name="priority"></param>
+ public void RfcInvite(string nickname, string channel, Priority priority)
+ {
+ WriteLine(Rfc2812.Invite(nickname, channel), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="channel"></param>
+ public void RfcInvite(string nickname, string channel)
+ {
+ WriteLine(Rfc2812.Invite(nickname, channel));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="newnickname"></param>
+ /// <param name="priority"></param>
+ public void RfcNick(string newnickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Nick(newnickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="newnickname"></param>
+ public void RfcNick(string newnickname)
+ {
+ WriteLine(Rfc2812.Nick(newnickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcWho(Priority priority)
+ {
+ WriteLine(Rfc2812.Who(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcWho()
+ {
+ WriteLine(Rfc2812.Who());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="priority"></param>
+ public void RfcWho(string mask, Priority priority)
+ {
+ WriteLine(Rfc2812.Who(mask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ public void RfcWho(string mask)
+ {
+ WriteLine(Rfc2812.Who(mask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="ircop"></param>
+ /// <param name="priority"></param>
+ public void RfcWho(string mask, bool ircop, Priority priority)
+ {
+ WriteLine(Rfc2812.Who(mask, ircop), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="ircop"></param>
+ public void RfcWho(string mask, bool ircop)
+ {
+ WriteLine(Rfc2812.Who(mask, ircop));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ /// <param name="priority"></param>
+ public void RfcWhois(string mask, Priority priority)
+ {
+ WriteLine(Rfc2812.Whois(mask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="mask"></param>
+ public void RfcWhois(string mask)
+ {
+ WriteLine(Rfc2812.Whois(mask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="masks"></param>
+ /// <param name="priority"></param>
+ public void RfcWhois(string[] masks, Priority priority)
+ {
+ WriteLine(Rfc2812.Whois(masks), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="masks"></param>
+ public void RfcWhois(string[] masks)
+ {
+ WriteLine(Rfc2812.Whois(masks));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="mask"></param>
+ /// <param name="priority"></param>
+ public void RfcWhois(string target, string mask, Priority priority)
+ {
+ WriteLine(Rfc2812.Whois(target, mask), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="mask"></param>
+ public void RfcWhois(string target, string mask)
+ {
+ WriteLine(Rfc2812.Whois(target, mask));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="masks"></param>
+ /// <param name="priority"></param>
+ public void RfcWhois(string target, string[] masks, Priority priority)
+ {
+ WriteLine(Rfc2812.Whois(target ,masks), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="masks"></param>
+ public void RfcWhois(string target, string[] masks)
+ {
+ WriteLine(Rfc2812.Whois(target, masks));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void RfcWhowas(string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Whowas(nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ public void RfcWhowas(string nickname)
+ {
+ WriteLine(Rfc2812.Whowas(nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ /// <param name="priority"></param>
+ public void RfcWhowas(string[] nicknames, Priority priority)
+ {
+ WriteLine(Rfc2812.Whowas(nicknames), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ public void RfcWhowas(string[] nicknames)
+ {
+ WriteLine(Rfc2812.Whowas(nicknames));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="count"></param>
+ /// <param name="priority"></param>
+ public void RfcWhowas(string nickname, string count, Priority priority)
+ {
+ WriteLine(Rfc2812.Whowas(nickname, count), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="count"></param>
+ public void RfcWhowas(string nickname, string count)
+ {
+ WriteLine(Rfc2812.Whowas(nickname, count));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ /// <param name="count"></param>
+ /// <param name="priority"></param>
+ public void RfcWhowas(string[] nicknames, string count, Priority priority)
+ {
+ WriteLine(Rfc2812.Whowas(nicknames, count), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ /// <param name="count"></param>
+ public void RfcWhowas(string[] nicknames, string count)
+ {
+ WriteLine(Rfc2812.Whowas(nicknames, count));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="count"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcWhowas(string nickname, string count, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Whowas(nickname, count, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="count"></param>
+ /// <param name="target"></param>
+ public void RfcWhowas(string nickname, string count, string target)
+ {
+ WriteLine(Rfc2812.Whowas(nickname, count, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ /// <param name="count"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcWhowas(string[] nicknames, string count, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Whowas(nicknames, count, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ /// <param name="count"></param>
+ /// <param name="target"></param>
+ public void RfcWhowas(string[] nicknames, string count, string target)
+ {
+ WriteLine(Rfc2812.Whowas(nicknames, count, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="comment"></param>
+ /// <param name="priority"></param>
+ public void RfcKill(string nickname, string comment, Priority priority)
+ {
+ WriteLine(Rfc2812.Kill(nickname, comment), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="comment"></param>
+ public void RfcKill(string nickname, string comment)
+ {
+ WriteLine(Rfc2812.Kill(nickname, comment));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ /// <param name="priority"></param>
+ public void RfcPing(string server, Priority priority)
+ {
+ WriteLine(Rfc2812.Ping(server), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ public void RfcPing(string server)
+ {
+ WriteLine(Rfc2812.Ping(server));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ /// <param name="server2"></param>
+ /// <param name="priority"></param>
+ public void RfcPing(string server, string server2, Priority priority)
+ {
+ WriteLine(Rfc2812.Ping(server, server2), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ /// <param name="server2"></param>
+ public void RfcPing(string server, string server2)
+ {
+ WriteLine(Rfc2812.Ping(server, server2));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ /// <param name="priority"></param>
+ public void RfcPong(string server, Priority priority)
+ {
+ WriteLine(Rfc2812.Pong(server), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ public void RfcPong(string server)
+ {
+ WriteLine(Rfc2812.Pong(server));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ /// <param name="server2"></param>
+ /// <param name="priority"></param>
+ public void RfcPong(string server, string server2, Priority priority)
+ {
+ WriteLine(Rfc2812.Pong(server, server2), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ /// <param name="server2"></param>
+ public void RfcPong(string server, string server2)
+ {
+ WriteLine(Rfc2812.Pong(server, server2));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcAway(Priority priority)
+ {
+ WriteLine(Rfc2812.Away(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcAway()
+ {
+ WriteLine(Rfc2812.Away());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="awaytext"></param>
+ /// <param name="priority"></param>
+ public void RfcAway(string awaytext, Priority priority)
+ {
+ WriteLine(Rfc2812.Away(awaytext), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="awaytext"></param>
+ public void RfcAway(string awaytext)
+ {
+ WriteLine(Rfc2812.Away(awaytext));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcRehash()
+ {
+ WriteLine(Rfc2812.Rehash());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcDie()
+ {
+ WriteLine(Rfc2812.Die());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcRestart()
+ {
+ WriteLine(Rfc2812.Restart());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="user"></param>
+ /// <param name="priority"></param>
+ public void RfcSummon(string user, Priority priority)
+ {
+ WriteLine(Rfc2812.Summon(user), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="user"></param>
+ public void RfcSummon(string user)
+ {
+ WriteLine(Rfc2812.Summon(user));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="user"></param>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcSummon(string user, string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Summon(user, target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="user"></param>
+ /// <param name="target"></param>
+ public void RfcSummon(string user, string target)
+ {
+ WriteLine(Rfc2812.Summon(user, target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="user"></param>
+ /// <param name="target"></param>
+ /// <param name="channel"></param>
+ /// <param name="priority"></param>
+ public void RfcSummon(string user, string target, string channel, Priority priority)
+ {
+ WriteLine(Rfc2812.Summon(user, target, channel), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="user"></param>
+ /// <param name="target"></param>
+ /// <param name="channel"></param>
+ public void RfcSummon(string user, string target, string channel)
+ {
+ WriteLine(Rfc2812.Summon(user, target, channel));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcUsers(Priority priority)
+ {
+ WriteLine(Rfc2812.Users(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcUsers()
+ {
+ WriteLine(Rfc2812.Users());
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ /// <param name="priority"></param>
+ public void RfcUsers(string target, Priority priority)
+ {
+ WriteLine(Rfc2812.Users(target), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="target"></param>
+ public void RfcUsers(string target)
+ {
+ WriteLine(Rfc2812.Users(target));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="wallopstext"></param>
+ /// <param name="priority"></param>
+ public void RfcWallops(string wallopstext, Priority priority)
+ {
+ WriteLine(Rfc2812.Wallops(wallopstext), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="wallopstext"></param>
+ public void RfcWallops(string wallopstext)
+ {
+ WriteLine(Rfc2812.Wallops(wallopstext));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void RfcUserhost(string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Userhost(nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ public void RfcUserhost(string nickname)
+ {
+ WriteLine(Rfc2812.Userhost(nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ /// <param name="priority"></param>
+ public void RfcUserhost(string[] nicknames, Priority priority)
+ {
+ WriteLine(Rfc2812.Userhost(nicknames), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ public void RfcUserhost(string[] nicknames)
+ {
+ WriteLine(Rfc2812.Userhost(nicknames));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ /// <param name="priority"></param>
+ public void RfcIson(string nickname, Priority priority)
+ {
+ WriteLine(Rfc2812.Ison(nickname), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nickname"></param>
+ public void RfcIson(string nickname)
+ {
+ WriteLine(Rfc2812.Ison(nickname));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ /// <param name="priority"></param>
+ public void RfcIson(string[] nicknames, Priority priority)
+ {
+ WriteLine(Rfc2812.Ison(nicknames), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="nicknames"></param>
+ public void RfcIson(string[] nicknames)
+ {
+ WriteLine(Rfc2812.Ison(nicknames));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="priority"></param>
+ public void RfcQuit(Priority priority)
+ {
+ WriteLine(Rfc2812.Quit(), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void RfcQuit()
+ {
+ WriteLine(Rfc2812.Quit());
+ }
+
+ public void RfcQuit(string quitmessage, Priority priority)
+ {
+ WriteLine(Rfc2812.Quit(quitmessage), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="quitmessage"></param>
+ public void RfcQuit(string quitmessage)
+ {
+ WriteLine(Rfc2812.Quit(quitmessage));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ /// <param name="comment"></param>
+ /// <param name="priority"></param>
+ public void RfcSquit(string server, string comment, Priority priority)
+ {
+ WriteLine(Rfc2812.Squit(server, comment), priority);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="server"></param>
+ /// <param name="comment"></param>
+ public void RfcSquit(string server, string comment)
+ {
+ WriteLine(Rfc2812.Squit(server, comment));
+ }
+#endregion
+ }
+}
diff --git a/SmartIrc4net/src/IrcCommands/Rfc2812.cs b/SmartIrc4net/src/IrcCommands/Rfc2812.cs
new file mode 100644
index 0000000..f77731e
--- /dev/null
+++ b/SmartIrc4net/src/IrcCommands/Rfc2812.cs
@@ -0,0 +1,675 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Text;
+using System.Globalization;
+using System.Text.RegularExpressions;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public sealed class Rfc2812
+ {
+ // nickname = ( letter / special ) *8( letter / digit / special / "-" )
+ // letter = %x41-5A / %x61-7A ; A-Z / a-z
+ // digit = %x30-39 ; 0-9
+ // special = %x5B-60 / %x7B-7D
+ // ; "[", "]", "\", "`", "_", "^", "{", "|", "}"
+ private static Regex _NicknameRegex = new Regex(@"^[A-Za-z\[\]\\`_^{|}][A-Za-z0-9\[\]\\`_\-^{|}]+$", RegexOptions.Compiled);
+
+ private Rfc2812()
+ {
+ }
+
+ /// <summary>
+ /// Checks if the passed nickname is valid according to the RFC
+ ///
+ /// Use with caution, many IRC servers are not conform with this!
+ /// </summary>
+ public static bool IsValidNickname(string nickname)
+ {
+ if ((nickname != null) &&
+ (nickname.Length > 0) &&
+ (_NicknameRegex.Match(nickname).Success)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public static string Pass(string password)
+ {
+ return "PASS "+password;
+ }
+
+ public static string Nick(string nickname)
+ {
+ return "NICK "+nickname;
+ }
+
+ public static string User(string username, int usermode, string realname)
+ {
+ return "USER "+username+" "+usermode.ToString()+" * :"+realname;
+ }
+
+ public static string Oper(string name, string password)
+ {
+ return "OPER "+name+" "+password;
+ }
+
+ public static string Privmsg(string destination, string message)
+ {
+ return "PRIVMSG "+destination+" :"+message;
+ }
+
+ public static string Notice(string destination, string message)
+ {
+ return "NOTICE "+destination+" :"+message;
+ }
+
+ public static string Join(string channel)
+ {
+ return "JOIN "+channel;
+ }
+
+ public static string Join(string[] channels)
+ {
+ string channellist = String.Join(",", channels);
+ return "JOIN "+channellist;
+ }
+
+ public static string Join(string channel, string key)
+ {
+ return "JOIN "+channel+" "+key;
+ }
+
+ public static string Join(string[] channels, string[] keys)
+ {
+ string channellist = String.Join(",", channels);
+ string keylist = String.Join(",", keys);
+ return "JOIN "+channellist+" "+keylist;
+ }
+
+ public static string Part(string channel)
+ {
+ return "PART "+channel;
+ }
+
+ public static string Part(string[] channels)
+ {
+ string channellist = String.Join(",", channels);
+ return "PART "+channellist;
+ }
+
+ public static string Part(string channel, string partmessage)
+ {
+ return "PART "+channel+" :"+partmessage;
+ }
+
+ public static string Part(string[] channels, string partmessage)
+ {
+ string channellist = String.Join(",", channels);
+ return "PART "+channellist+" :"+partmessage;
+ }
+
+ public static string Kick(string channel, string nickname)
+ {
+ return "KICK "+channel+" "+nickname;
+ }
+
+ public static string Kick(string channel, string nickname, string comment)
+ {
+ return "KICK "+channel+" "+nickname+" :"+comment;
+ }
+
+ public static string Kick(string[] channels, string nickname)
+ {
+ string channellist = String.Join(",", channels);
+ return "KICK "+channellist+" "+nickname;
+ }
+
+ public static string Kick(string[] channels, string nickname, string comment)
+ {
+ string channellist = String.Join(",", channels);
+ return "KICK "+channellist+" "+nickname+" :"+comment;
+ }
+
+ public static string Kick(string channel, string[] nicknames)
+ {
+ string nicknamelist = String.Join(",", nicknames);
+ return "KICK "+channel+" "+nicknamelist;
+ }
+
+ public static string Kick(string channel, string[] nicknames, string comment)
+ {
+ string nicknamelist = String.Join(",", nicknames);
+ return "KICK "+channel+" "+nicknamelist+" :"+comment;
+ }
+
+ public static string Kick(string[] channels, string[] nicknames)
+ {
+ string channellist = String.Join(",", channels);
+ string nicknamelist = String.Join(",", nicknames);
+ return "KICK "+channellist+" "+nicknamelist;
+ }
+
+ public static string Kick(string[] channels, string[] nicknames, string comment)
+ {
+ string channellist = String.Join(",", channels);
+ string nicknamelist = String.Join(",", nicknames);
+ return "KICK "+channellist+" "+nicknamelist+" :"+comment;
+ }
+
+ public static string Motd()
+ {
+ return "MOTD";
+ }
+
+ public static string Motd(string target)
+ {
+ return "MOTD "+target;
+ }
+
+ [Obsolete("use Lusers() method instead")]
+ public static string Luser()
+ {
+ return Lusers();
+ }
+
+ public static string Lusers()
+ {
+ return "LUSERS";
+ }
+
+ [Obsolete("use Lusers(string) method instead")]
+ public static string Luser(string mask)
+ {
+ return Lusers(mask);
+ }
+
+ public static string Lusers(string mask)
+ {
+ return "LUSER "+mask;
+ }
+
+ [Obsolete("use Lusers(string, string) method instead")]
+ public static string Luser(string mask, string target)
+ {
+ return Lusers(mask, target);
+ }
+
+ public static string Lusers(string mask, string target)
+ {
+ return "LUSER "+mask+" "+target;
+ }
+
+ public static string Version()
+ {
+ return "VERSION";
+ }
+
+ public static string Version(string target)
+ {
+ return "VERSION "+target;
+ }
+
+ public static string Stats()
+ {
+ return "STATS";
+ }
+
+ public static string Stats(string query)
+ {
+ return "STATS "+query;
+ }
+
+ public static string Stats(string query, string target)
+ {
+ return "STATS "+query+" "+target;
+ }
+
+ public static string Links()
+ {
+ return "LINKS";
+ }
+
+ public static string Links(string servermask)
+ {
+ return "LINKS "+servermask;
+ }
+
+ public static string Links(string remoteserver, string servermask)
+ {
+ return "LINKS "+remoteserver+" "+servermask;
+ }
+
+ public static string Time()
+ {
+ return "TIME";
+ }
+
+ public static string Time(string target)
+ {
+ return "TIME "+target;
+ }
+
+ public static string Connect(string targetserver, string port)
+ {
+ return "CONNECT "+targetserver+" "+port;
+ }
+
+ public static string Connect(string targetserver, string port, string remoteserver)
+ {
+ return "CONNECT "+targetserver+" "+port+" "+remoteserver;
+ }
+
+ public static string Trace()
+ {
+ return "TRACE";
+ }
+
+ public static string Trace(string target)
+ {
+ return "TRACE "+target;
+ }
+
+ public static string Admin()
+ {
+ return "ADMIN";
+ }
+
+ public static string Admin(string target)
+ {
+ return "ADMIN "+target;
+ }
+
+ public static string Info()
+ {
+ return "INFO";
+ }
+
+ public static string Info(string target)
+ {
+ return "INFO "+target;
+ }
+
+ public static string Servlist()
+ {
+ return "SERVLIST";
+ }
+
+ public static string Servlist(string mask)
+ {
+ return "SERVLIST "+mask;
+ }
+
+ public static string Servlist(string mask, string type)
+ {
+ return "SERVLIST "+mask+" "+type;
+ }
+
+ public static string Squery(string servicename, string servicetext)
+ {
+ return "SQUERY "+servicename+" :"+servicetext;
+ }
+
+ public static string List()
+ {
+ return "LIST";
+ }
+
+ public static string List(string channel)
+ {
+ return "LIST "+channel;
+ }
+
+ public static string List(string[] channels)
+ {
+ string channellist = String.Join(",", channels);
+ return "LIST "+channellist;
+ }
+
+ public static string List(string channel, string target)
+ {
+ return "LIST "+channel+" "+target;
+ }
+
+ public static string List(string[] channels, string target)
+ {
+ string channellist = String.Join(",", channels);
+ return "LIST "+channellist+" "+target;
+ }
+
+ public static string Names()
+ {
+ return "NAMES";
+ }
+
+ public static string Names(string channel)
+ {
+ return "NAMES "+channel;
+ }
+
+ public static string Names(string[] channels)
+ {
+ string channellist = String.Join(",", channels);
+ return "NAMES "+channellist;
+ }
+
+ public static string Names(string channel, string target)
+ {
+ return "NAMES "+channel+" "+target;
+ }
+
+ public static string Names(string[] channels, string target)
+ {
+ string channellist = String.Join(",", channels);
+ return "NAMES "+channellist+" "+target;
+ }
+
+ public static string Topic(string channel)
+ {
+ return "TOPIC "+channel;
+ }
+
+ public static string Topic(string channel, string newtopic)
+ {
+ return "TOPIC "+channel+" :"+newtopic;
+ }
+
+ public static string Mode(string target)
+ {
+ return "MODE "+target;
+ }
+
+ public static string Mode(string target, string newmode)
+ {
+ return "MODE "+target+" "+newmode;
+ }
+
+ public static string Mode(string target, string[] newModes, string[] newModeParameters)
+ {
+ if (newModes == null) {
+ throw new ArgumentNullException("newModes");
+ }
+ if (newModeParameters == null) {
+ throw new ArgumentNullException("newModeParameters");
+ }
+ if (newModes.Length != newModeParameters.Length) {
+ throw new ArgumentException("newModes and newModeParameters must have the same size.");
+ }
+
+ StringBuilder newMode = new StringBuilder(newModes.Length);
+ StringBuilder newModeParameter = new StringBuilder();
+ // as per RFC 3.2.3, maximum is 3 modes changes at once
+ int maxModeChanges = 3;
+ if (newModes.Length > maxModeChanges) {
+ throw new ArgumentOutOfRangeException(
+ "newModes.Length",
+ newModes.Length,
+ String.Format("Mode change list is too large (> {0}).", maxModeChanges)
+ );
+ }
+
+ for (int i = 0; i <= newModes.Length; i += maxModeChanges) {
+ for (int j = 0; j < maxModeChanges; j++) {
+ if (i + j >= newModes.Length) {
+ break;
+ }
+ newMode.Append(newModes[i + j]);
+ }
+
+ for (int j = 0; j < maxModeChanges; j++) {
+ if (i + j >= newModeParameters.Length) {
+ break;
+ }
+ newModeParameter.Append(newModeParameters[i + j]);
+ newModeParameter.Append(" ");
+ }
+ }
+ if (newModeParameter.Length > 0) {
+ // remove trailing space
+ newModeParameter.Length--;
+ newMode.Append(" ");
+ newMode.Append(newModeParameter.ToString());
+ }
+
+ return Mode(target, newMode.ToString());
+ }
+
+ public static string Service(string nickname, string distribution, string info)
+ {
+ return "SERVICE "+nickname+" * "+distribution+" * * :"+info;
+ }
+
+ public static string Invite(string nickname, string channel)
+ {
+ return "INVITE "+nickname+" "+channel;
+ }
+
+ public static string Who()
+ {
+ return "WHO";
+ }
+
+ public static string Who(string mask)
+ {
+ return "WHO "+mask;
+ }
+
+ public static string Who(string mask, bool ircop)
+ {
+ if (ircop) {
+ return "WHO "+mask+" o";
+ } else {
+ return "WHO "+mask;
+ }
+ }
+
+ public static string Whois(string mask)
+ {
+ return "WHOIS "+mask;
+ }
+
+ public static string Whois(string[] masks)
+ {
+ string masklist = String.Join(",", masks);
+ return "WHOIS "+masklist;
+ }
+
+ public static string Whois(string target, string mask)
+ {
+ return "WHOIS "+target+" "+mask;
+ }
+
+ public static string Whois(string target, string[] masks)
+ {
+ string masklist = String.Join(",", masks);
+ return "WHOIS "+target+" "+masklist;
+ }
+
+ public static string Whowas(string nickname)
+ {
+ return "WHOWAS "+nickname;
+ }
+
+ public static string Whowas(string[] nicknames)
+ {
+ string nicknamelist = String.Join(",", nicknames);
+ return "WHOWAS "+nicknamelist;
+ }
+
+ public static string Whowas(string nickname, string count)
+ {
+ return "WHOWAS "+nickname+" "+count+" ";
+ }
+
+ public static string Whowas(string[] nicknames, string count)
+ {
+ string nicknamelist = String.Join(",", nicknames);
+ return "WHOWAS "+nicknamelist+" "+count+" ";
+ }
+
+ public static string Whowas(string nickname, string count, string target)
+ {
+ return "WHOWAS "+nickname+" "+count+" "+target;
+ }
+
+ public static string Whowas(string[] nicknames, string count, string target)
+ {
+ string nicknamelist = String.Join(",", nicknames);
+ return "WHOWAS "+nicknamelist+" "+count+" "+target;
+ }
+
+ public static string Kill(string nickname, string comment)
+ {
+ return "KILL "+nickname+" :"+comment;
+ }
+
+ public static string Ping(string server)
+ {
+ return "PING "+server;
+ }
+
+ public static string Ping(string server, string server2)
+ {
+ return "PING "+server+" "+server2;
+ }
+
+ public static string Pong(string server)
+ {
+ return "PONG "+server;
+ }
+
+ public static string Pong(string server, string server2)
+ {
+ return "PONG "+server+" "+server2;
+ }
+
+ public static string Error(string errormessage)
+ {
+ return "ERROR :"+errormessage;
+ }
+
+ public static string Away()
+ {
+ return "AWAY";
+ }
+
+ public static string Away(string awaytext)
+ {
+ return "AWAY :"+awaytext;
+ }
+
+ public static string Rehash()
+ {
+ return "REHASH";
+ }
+
+ public static string Die()
+ {
+ return "DIE";
+ }
+
+ public static string Restart()
+ {
+ return "RESTART";
+ }
+
+ public static string Summon(string user)
+ {
+ return "SUMMON "+user;
+ }
+
+ public static string Summon(string user, string target)
+ {
+ return "SUMMON "+user+" "+target;
+ }
+
+ public static string Summon(string user, string target, string channel)
+ {
+ return "SUMMON "+user+" "+target+" "+channel;
+ }
+
+ public static string Users()
+ {
+ return "USERS";
+ }
+
+ public static string Users(string target)
+ {
+ return "USERS "+target;
+ }
+
+ public static string Wallops(string wallopstext)
+ {
+ return "WALLOPS :"+wallopstext;
+ }
+
+ public static string Userhost(string nickname)
+ {
+ return "USERHOST "+nickname;
+ }
+
+ public static string Userhost(string[] nicknames)
+ {
+ string nicknamelist = String.Join(" ", nicknames);
+ return "USERHOST "+nicknamelist;
+ }
+
+ public static string Ison(string nickname)
+ {
+ return "ISON "+nickname;
+ }
+
+ public static string Ison(string[] nicknames)
+ {
+ string nicknamelist = String.Join(" ", nicknames);
+ return "ISON "+nicknamelist;
+ }
+
+ public static string Quit()
+ {
+ return "QUIT";
+ }
+
+ public static string Quit(string quitmessage)
+ {
+ return "QUIT :"+quitmessage;
+ }
+
+ public static string Squit(string server, string comment)
+ {
+ return "SQUIT "+server+" :"+comment;
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcConnection/Delegates.cs b/SmartIrc4net/src/IrcConnection/Delegates.cs
new file mode 100644
index 0000000..0789dfc
--- /dev/null
+++ b/SmartIrc4net/src/IrcConnection/Delegates.cs
@@ -0,0 +1,34 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+namespace Meebey.SmartIrc4net
+{
+ public delegate void ReadLineEventHandler(object sender, ReadLineEventArgs e);
+ public delegate void WriteLineEventHandler(object sender, WriteLineEventArgs e);
+ public delegate void AutoConnectErrorEventHandler(object sender, AutoConnectErrorEventArgs e);
+}
diff --git a/SmartIrc4net/src/IrcConnection/EventArgs.cs b/SmartIrc4net/src/IrcConnection/EventArgs.cs
new file mode 100644
index 0000000..0d3a9aa
--- /dev/null
+++ b/SmartIrc4net/src/IrcConnection/EventArgs.cs
@@ -0,0 +1,106 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Collections.Specialized;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ public class ReadLineEventArgs : EventArgs
+ {
+ private string _Line;
+
+ public string Line {
+ get {
+ return _Line;
+ }
+ }
+
+ internal ReadLineEventArgs(string line)
+ {
+ _Line = line;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class WriteLineEventArgs : EventArgs
+ {
+ private string _Line;
+
+ public string Line {
+ get {
+ return _Line;
+ }
+ }
+
+ internal WriteLineEventArgs(string line)
+ {
+ _Line = line;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public class AutoConnectErrorEventArgs : EventArgs
+ {
+ private Exception _Exception;
+ private string _Address;
+ private int _Port;
+
+ public Exception Exception {
+ get {
+ return _Exception;
+ }
+ }
+
+ public string Address {
+ get {
+ return _Address;
+ }
+ }
+
+ public int Port {
+ get {
+ return _Port;
+ }
+ }
+
+ internal AutoConnectErrorEventArgs(string address, int port, Exception ex)
+ {
+ _Address = address;
+ _Port = port;
+ _Exception = ex;
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcConnection/IrcConnection.cs b/SmartIrc4net/src/IrcConnection/IrcConnection.cs
new file mode 100644
index 0000000..a3385ed
--- /dev/null
+++ b/SmartIrc4net/src/IrcConnection/IrcConnection.cs
@@ -0,0 +1,1473 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2009 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Collections;
+using System.IO;
+using System.Net;
+using System.Net.Security;
+using System.Net.Sockets;
+using System.Reflection;
+using System.Text;
+using System.Security.Cryptography.X509Certificates;
+using System.Security.Authentication;
+using System.Threading;
+using Starksoft.Net.Proxy;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ public class IrcConnection
+ {
+ private string _VersionNumber;
+ private string _VersionString;
+ private string[] _AddressList = {"localhost"};
+ private int _CurrentAddress;
+ private int _Port;
+ private bool _UseSsl;
+ private bool _ValidateServerCertificate;
+ private X509Certificate _SslClientCertificate;
+ private StreamReader _Reader;
+ private StreamWriter _Writer;
+ private ReadThread _ReadThread;
+ private WriteThread _WriteThread;
+ private IdleWorkerThread _IdleWorkerThread;
+ private TcpClient _TcpClient;
+ private Hashtable _SendBuffer = Hashtable.Synchronized(new Hashtable());
+ private int _SendDelay = 200;
+ private bool _IsRegistered;
+ private bool _IsConnected;
+ private bool _IsConnectionError;
+ private bool _IsDisconnecting;
+ private int _AutoRetryAttempt;
+ private bool _AutoRetry;
+ private int _AutoRetryDelay = 30;
+ private int _AutoRetryLimit = 3;
+ private bool _AutoReconnect;
+ private Encoding _Encoding = Encoding.Default;
+ private int _SocketReceiveTimeout = 600;
+ private int _SocketSendTimeout = 600;
+ private int _IdleWorkerInterval = 60;
+ private int _PingInterval = 60;
+ private int _PingTimeout = 300;
+ private DateTime _LastPingSent;
+ private DateTime _LastPongReceived;
+ private TimeSpan _Lag;
+ private string _ProxyHost;
+ private int _ProxyPort;
+ private ProxyType _ProxyType = ProxyType.None;
+ private string _ProxyUsername;
+ private string _ProxyPassword;
+
+ /// <event cref="OnReadLine">
+ /// Raised when a \r\n terminated line is read from the socket
+ /// </event>
+ public event ReadLineEventHandler OnReadLine;
+ /// <event cref="OnWriteLine">
+ /// Raised when a \r\n terminated line is written to the socket
+ /// </event>
+ public event WriteLineEventHandler OnWriteLine;
+ /// <event cref="OnConnect">
+ /// Raised before the connect attempt
+ /// </event>
+ public event EventHandler OnConnecting;
+ /// <event cref="OnConnect">
+ /// Raised on successful connect
+ /// </event>
+ public event EventHandler OnConnected;
+ /// <event cref="OnConnect">
+ /// Raised before the connection is closed
+ /// </event>
+ public event EventHandler OnDisconnecting;
+ /// <event cref="OnConnect">
+ /// Raised when the connection is closed
+ /// </event>
+ public event EventHandler OnDisconnected;
+ /// <event cref="OnConnectionError">
+ /// Raised when the connection got into an error state
+ /// </event>
+ public event EventHandler OnConnectionError;
+ /// <event cref="AutoConnectErrorEventHandler">
+ /// Raised when the connection got into an error state during auto connect loop
+ /// </event>
+ public event AutoConnectErrorEventHandler OnAutoConnectError;
+
+ /// <summary>
+ /// When a connection error is detected this property will return true
+ /// </summary>
+ protected bool IsConnectionError {
+ get {
+ lock (this) {
+ return _IsConnectionError;
+ }
+ }
+ set {
+ lock (this) {
+ _IsConnectionError = value;
+ }
+ }
+ }
+
+ protected bool IsDisconnecting {
+ get {
+ lock (this) {
+ return _IsDisconnecting;
+ }
+ }
+ set {
+ lock (this) {
+ _IsDisconnecting = value;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets the current address of the connection
+ /// </summary>
+ public string Address {
+ get {
+ return _AddressList[_CurrentAddress];
+ }
+ }
+
+ /// <summary>
+ /// Gets the address list of the connection
+ /// </summary>
+ public string[] AddressList {
+ get {
+ return _AddressList;
+ }
+ }
+
+ /// <summary>
+ /// Gets the used port of the connection
+ /// </summary>
+ public int Port {
+ get {
+ return _Port;
+ }
+ }
+
+ /// <summary>
+ /// By default nothing is done when the library looses the connection
+ /// to the server.
+ /// Default: false
+ /// </summary>
+ /// <value>
+ /// true, if the library should reconnect on lost connections
+ /// false, if the library should not take care of it
+ /// </value>
+ public bool AutoReconnect {
+ get {
+ return _AutoReconnect;
+ }
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.Connection.Info("AutoReconnect enabled");
+ } else {
+ Logger.Connection.Info("AutoReconnect disabled");
+ }
+#endif
+ _AutoReconnect = value;
+ }
+ }
+
+ /// <summary>
+ /// If the library should retry to connect when the connection fails.
+ /// Default: false
+ /// </summary>
+ /// <value>
+ /// true, if the library should retry to connect
+ /// false, if the library should not retry
+ /// </value>
+ public bool AutoRetry {
+ get {
+ return _AutoRetry;
+ }
+ set {
+#if LOG4NET
+ if (value) {
+ Logger.Connection.Info("AutoRetry enabled");
+ } else {
+ Logger.Connection.Info("AutoRetry disabled");
+ }
+#endif
+ _AutoRetry = value;
+ }
+ }
+
+ /// <summary>
+ /// Delay between retry attempts in Connect() in seconds.
+ /// Default: 30
+ /// </summary>
+ public int AutoRetryDelay {
+ get {
+ return _AutoRetryDelay;
+ }
+ set {
+ _AutoRetryDelay = value;
+ }
+ }
+
+ /// <summary>
+ /// Maximum number of retries to connect to the server
+ /// Default: 3
+ /// </summary>
+ public int AutoRetryLimit {
+ get {
+ return _AutoRetryLimit;
+ }
+ set {
+ _AutoRetryLimit = value;
+ }
+ }
+
+ /// <summary>
+ /// Returns the current amount of reconnect attempts
+ /// Default: 3
+ /// </summary>
+ public int AutoRetryAttempt {
+ get {
+ return _AutoRetryAttempt;
+ }
+ }
+
+ /// <summary>
+ /// To prevent flooding the IRC server, it's required to delay each
+ /// message, given in milliseconds.
+ /// Default: 200
+ /// </summary>
+ public int SendDelay {
+ get {
+ return _SendDelay;
+ }
+ set {
+ _SendDelay = value;
+ }
+ }
+
+ /// <summary>
+ /// On successful registration on the IRC network, this is set to true.
+ /// </summary>
+ public bool IsRegistered {
+ get {
+ return _IsRegistered;
+ }
+ }
+
+ /// <summary>
+ /// On successful connect to the IRC server, this is set to true.
+ /// </summary>
+ public bool IsConnected {
+ get {
+ return _IsConnected;
+ }
+ }
+
+ /// <summary>
+ /// Gets the SmartIrc4net version number
+ /// </summary>
+ public string VersionNumber {
+ get {
+ return _VersionNumber;
+ }
+ }
+
+ /// <summary>
+ /// Gets the full SmartIrc4net version string
+ /// </summary>
+ public string VersionString {
+ get {
+ return _VersionString;
+ }
+ }
+
+ /// <summary>
+ /// Encoding which is used for reading and writing to the socket
+ /// Default: encoding of the system
+ /// </summary>
+ public Encoding Encoding {
+ get {
+ return _Encoding;
+ }
+ set {
+ _Encoding = value;
+ }
+ }
+
+ /// <summary>
+ /// Enables/disables using SSL for the connection
+ /// Default: false
+ /// </summary>
+ public bool UseSsl {
+ get {
+ return _UseSsl;
+ }
+ set {
+ _UseSsl = value;
+ }
+ }
+
+ /// <summary>
+ /// Specifies if the certificate of the server is validated
+ /// Default: true
+ /// </summary>
+ public bool ValidateServerCertificate {
+ get {
+ return _ValidateServerCertificate;
+ }
+ set {
+ _ValidateServerCertificate = value;
+ }
+ }
+
+ /// <summary>
+ /// Specifies the client certificate used for the SSL connection
+ /// Default: null
+ /// </summary>
+ public X509Certificate SslClientCertificate {
+ get {
+ return _SslClientCertificate;
+ }
+ set {
+ _SslClientCertificate = value;
+ }
+ }
+
+ /// <summary>
+ /// Timeout in seconds for receiving data from the socket
+ /// Default: 600
+ /// </summary>
+ public int SocketReceiveTimeout {
+ get {
+ return _SocketReceiveTimeout;
+ }
+ set {
+ _SocketReceiveTimeout = value;
+ }
+ }
+
+ /// <summary>
+ /// Timeout in seconds for sending data to the socket
+ /// Default: 600
+ /// </summary>
+ public int SocketSendTimeout {
+ get {
+ return _SocketSendTimeout;
+ }
+ set {
+ _SocketSendTimeout = value;
+ }
+ }
+
+ /// <summary>
+ /// Interval in seconds to run the idle worker
+ /// Default: 60
+ /// </summary>
+ public int IdleWorkerInterval {
+ get {
+ return _IdleWorkerInterval;
+ }
+ set {
+ _IdleWorkerInterval = value;
+ }
+ }
+
+ /// <summary>
+ /// Interval in seconds to send a PING
+ /// Default: 60
+ /// </summary>
+ public int PingInterval {
+ get {
+ return _PingInterval;
+ }
+ set {
+ _PingInterval = value;
+ }
+ }
+
+ /// <summary>
+ /// Timeout in seconds for server response to a PING
+ /// Default: 600
+ /// </summary>
+ public int PingTimeout {
+ get {
+ return _PingTimeout;
+ }
+ set {
+ _PingTimeout = value;
+ }
+ }
+
+ /// <summary>
+ /// Latency between client and the server
+ /// </summary>
+ public TimeSpan Lag {
+ get {
+ if (_LastPingSent > _LastPongReceived) {
+ // there is an outstanding ping, thus we don't have a current lag value
+ return DateTime.Now - _LastPingSent;
+ }
+
+ return _Lag;
+ }
+ }
+
+
+ /// <summary>
+ /// If you want to use a Proxy, set the ProxyHost to Host of the Proxy you want to use.
+ /// </summary>
+ public string ProxyHost {
+ get {
+ return _ProxyHost;
+ }
+ set {
+ _ProxyHost = value;
+ }
+ }
+
+ /// <summary>
+ /// If you want to use a Proxy, set the ProxyPort to Port of the Proxy you want to use.
+ /// </summary>
+ public int ProxyPort {
+ get {
+ return _ProxyPort;
+ }
+ set {
+ _ProxyPort = value;
+ }
+ }
+
+ /// <summary>
+ /// Standard Setting is to use no Proxy Server, if you Set this to any other value,
+ /// you have to set the ProxyHost and ProxyPort aswell (and give credentials if needed)
+ /// Default: ProxyType.None
+ /// </summary>
+ public ProxyType ProxyType {
+ get {
+ return _ProxyType;
+ }
+ set {
+ _ProxyType = value;
+ }
+ }
+
+ /// <summary>
+ /// Username to your Proxy Server
+ /// </summary>
+ public string ProxyUsername {
+ get {
+ return _ProxyUsername;
+ }
+ set {
+ _ProxyUsername = value;
+ }
+ }
+
+ /// <summary>
+ /// Password to your Proxy Server
+ /// </summary>
+ public string ProxyPassword {
+ get {
+ return _ProxyPassword;
+ }
+ set {
+ _ProxyPassword = value;
+ }
+ }
+
+ /// <summary>
+ /// Initializes the message queues, read and write thread
+ /// </summary>
+ public IrcConnection()
+ {
+#if LOG4NET
+ Logger.Init();
+ Logger.Main.Debug("IrcConnection created");
+#endif
+ _SendBuffer[Priority.High] = Queue.Synchronized(new Queue());
+ _SendBuffer[Priority.AboveMedium] = Queue.Synchronized(new Queue());
+ _SendBuffer[Priority.Medium] = Queue.Synchronized(new Queue());
+ _SendBuffer[Priority.BelowMedium] = Queue.Synchronized(new Queue());
+ _SendBuffer[Priority.Low] = Queue.Synchronized(new Queue());
+
+ // setup own callbacks
+ OnReadLine += new ReadLineEventHandler(_SimpleParser);
+ OnConnectionError += new EventHandler(_OnConnectionError);
+
+ _ReadThread = new ReadThread(this);
+ _WriteThread = new WriteThread(this);
+ _IdleWorkerThread = new IdleWorkerThread(this);
+
+ Assembly assm = Assembly.GetAssembly(this.GetType());
+ AssemblyName assm_name = assm.GetName(false);
+
+ AssemblyProductAttribute pr = (AssemblyProductAttribute)assm.GetCustomAttributes(typeof(AssemblyProductAttribute), false)[0];
+
+ _VersionNumber = assm_name.Version.ToString();
+ _VersionString = pr.Product+" "+_VersionNumber;
+ }
+
+#if LOG4NET
+ ~IrcConnection()
+ {
+ Logger.Main.Debug("IrcConnection destroyed");
+ }
+#endif
+
+ /// <overloads>this method has 2 overloads</overloads>
+ /// <summary>
+ /// Connects to the specified server and port, when the connection fails
+ /// the next server in the list will be used.
+ /// </summary>
+ /// <param name="addresslist">List of servers to connect to</param>
+ /// <param name="port">Portnumber to connect to</param>
+ /// <exception cref="CouldNotConnectException">The connection failed</exception>
+ /// <exception cref="AlreadyConnectedException">If there is already an active connection</exception>
+ public void Connect(string[] addresslist, int port)
+ {
+ if (_IsConnected) {
+ throw new AlreadyConnectedException("Already connected to: " + Address + ":" + Port);
+ }
+
+ _AutoRetryAttempt++;
+#if LOG4NET
+ Logger.Connection.Info(String.Format("connecting... (attempt: {0})",
+ _AutoRetryAttempt));
+#endif
+
+ _AddressList = (string[])addresslist.Clone();
+ _Port = port;
+
+ if (OnConnecting != null) {
+ OnConnecting(this, EventArgs.Empty);
+ }
+ try {
+ System.Net.IPAddress ip = System.Net.Dns.Resolve(Address).AddressList[0];
+
+ _TcpClient = new TcpClient();
+ _TcpClient.NoDelay = true;
+ _TcpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 1);
+ // set timeout, after this the connection will be aborted
+ _TcpClient.ReceiveTimeout = _SocketReceiveTimeout * 1000;
+ _TcpClient.SendTimeout = _SocketSendTimeout * 1000;
+
+ if (_ProxyType != ProxyType.None) {
+ IProxyClient proxyClient = null;
+ ProxyClientFactory proxyFactory = new ProxyClientFactory();
+ // HACK: map our ProxyType to Starksoft's ProxyType
+ Starksoft.Net.Proxy.ProxyType proxyType =
+ (Starksoft.Net.Proxy.ProxyType) Enum.Parse(
+ typeof(ProxyType), _ProxyType.ToString(), true
+ );
+
+ if (_ProxyUsername == null && _ProxyPassword == null) {
+ proxyClient = proxyFactory.CreateProxyClient(
+ proxyType
+ );
+ } else {
+ proxyClient = proxyFactory.CreateProxyClient(
+ proxyType,
+ _ProxyHost,
+ _ProxyPort,
+ _ProxyUsername,
+ _ProxyPassword
+ );
+ }
+
+ _TcpClient.Connect(_ProxyHost, _ProxyPort);
+ proxyClient.TcpClient = _TcpClient;
+ proxyClient.CreateConnection(ip.ToString(), port);
+ } else {
+ _TcpClient.Connect(ip, port);
+ }
+
+ Stream stream = _TcpClient.GetStream();
+ if (_UseSsl) {
+ RemoteCertificateValidationCallback certValidation;
+ if (_ValidateServerCertificate) {
+ certValidation = delegate(object sender,
+ X509Certificate certificate,
+ X509Chain chain,
+ SslPolicyErrors sslPolicyErrors) {
+ if (sslPolicyErrors == SslPolicyErrors.None) {
+ return true;
+ }
+
+#if LOG4NET
+ Logger.Connection.Error(
+ "Connect(): Certificate error: " +
+ sslPolicyErrors
+ );
+#endif
+ return false;
+ };
+ } else {
+ certValidation = delegate { return true; };
+ }
+ SslStream sslStream = new SslStream(stream, false,
+ certValidation);
+ try {
+ if (_SslClientCertificate != null) {
+ var certs = new X509Certificate2Collection();
+ certs.Add(_SslClientCertificate);
+ sslStream.AuthenticateAsClient(Address, certs,
+ SslProtocols.Default,
+ false);
+ } else {
+ sslStream.AuthenticateAsClient(Address);
+ }
+ } catch (IOException ex) {
+#if LOG4NET
+ Logger.Connection.Error(
+ "Connect(): AuthenticateAsClient() failed!"
+ );
+#endif
+ throw new CouldNotConnectException("Could not connect to: " + Address + ":" + Port + " " + ex.Message, ex);
+ }
+ stream = sslStream;
+ }
+ _Reader = new StreamReader(stream, _Encoding);
+ _Writer = new StreamWriter(stream, _Encoding);
+
+ if (_Encoding.GetPreamble().Length > 0) {
+ // HACK: we have an encoding that has some kind of preamble
+ // like UTF-8 has a BOM, this will confuse the IRCd!
+ // Thus we send a \r\n so the IRCd can safely ignore that
+ // garbage.
+ _Writer.WriteLine();
+ // make sure we flush the BOM+CRLF correctly
+ _Writer.Flush();
+ }
+
+ // Connection was succeful, reseting the connect counter
+ _AutoRetryAttempt = 0;
+
+ // updating the connection error state, so connecting is possible again
+ IsConnectionError = false;
+ _IsConnected = true;
+
+ // lets power up our threads
+ _ReadThread.Start();
+ _WriteThread.Start();
+ _IdleWorkerThread.Start();
+
+#if LOG4NET
+ Logger.Connection.Info("connected");
+#endif
+ if (OnConnected != null) {
+ OnConnected(this, EventArgs.Empty);
+ }
+ } catch (AuthenticationException ex) {
+#if LOG4NET
+ Logger.Connection.Error("Connect(): Exception", ex);
+#endif
+ throw new CouldNotConnectException("Could not connect to: " + Address + ":" + Port + " " + ex.Message, ex);
+ } catch (Exception e) {
+ if (_Reader != null) {
+ try {
+ _Reader.Close();
+ } catch (ObjectDisposedException) {
+ }
+ }
+ if (_Writer != null) {
+ try {
+ _Writer.Close();
+ } catch (ObjectDisposedException) {
+ }
+ }
+ if (_TcpClient != null) {
+ _TcpClient.Close();
+ }
+ _IsConnected = false;
+ IsConnectionError = true;
+
+#if LOG4NET
+ Logger.Connection.Info("connection failed: "+e.Message, e);
+#endif
+ if (e is CouldNotConnectException) {
+ // error was fatal, bail out
+ throw;
+ }
+
+ if (_AutoRetry &&
+ (_AutoRetryLimit == -1 ||
+ _AutoRetryLimit == 0 ||
+ _AutoRetryLimit <= _AutoRetryAttempt)) {
+ if (OnAutoConnectError != null) {
+ OnAutoConnectError(this, new AutoConnectErrorEventArgs(Address, Port, e));
+ }
+#if LOG4NET
+ Logger.Connection.Debug("delaying new connect attempt for "+_AutoRetryDelay+" sec");
+#endif
+ Thread.Sleep(_AutoRetryDelay * 1000);
+ _NextAddress();
+ // FIXME: this is recursion
+ Connect(_AddressList, _Port);
+ } else {
+ throw new CouldNotConnectException("Could not connect to: "+Address+":"+Port+" "+e.Message, e);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Connects to the specified server and port.
+ /// </summary>
+ /// <param name="address">Server address to connect to</param>
+ /// <param name="port">Port number to connect to</param>
+ public void Connect(string address, int port)
+ {
+ Connect(new string[] { address }, port);
+ }
+
+ /// <summary>
+ /// Reconnects to the server
+ /// </summary>
+ /// <exception cref="NotConnectedException">
+ /// If there was no active connection
+ /// </exception>
+ /// <exception cref="CouldNotConnectException">
+ /// The connection failed
+ /// </exception>
+ /// <exception cref="AlreadyConnectedException">
+ /// If there is already an active connection
+ /// </exception>
+ public void Reconnect()
+ {
+#if LOG4NET
+ Logger.Connection.Info("reconnecting...");
+#endif
+ Disconnect();
+ Connect(_AddressList, _Port);
+ }
+
+ /// <summary>
+ /// Disconnects from the server
+ /// </summary>
+ /// <exception cref="NotConnectedException">
+ /// If there was no active connection
+ /// </exception>
+ public void Disconnect()
+ {
+ if (!IsConnected) {
+ throw new NotConnectedException("The connection could not be disconnected because there is no active connection");
+ }
+
+#if LOG4NET
+ Logger.Connection.Info("disconnecting...");
+#endif
+ if (OnDisconnecting != null) {
+ OnDisconnecting(this, EventArgs.Empty);
+ }
+
+ IsDisconnecting = true;
+
+ _ReadThread.Stop();
+ _WriteThread.Stop();
+ _TcpClient.Close();
+ _IsConnected = false;
+ _IsRegistered = false;
+
+ IsDisconnecting = false;
+
+ if (OnDisconnected != null) {
+ OnDisconnected(this, EventArgs.Empty);
+ }
+
+#if LOG4NET
+ Logger.Connection.Info("disconnected");
+#endif
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="blocking"></param>
+ public void Listen(bool blocking)
+ {
+ if (blocking) {
+ while (IsConnected) {
+ ReadLine(true);
+ }
+ } else {
+ while (ReadLine(false).Length > 0) {
+ // loop as long as we receive messages
+ }
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void Listen()
+ {
+ Listen(true);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="blocking"></param>
+ public void ListenOnce(bool blocking)
+ {
+ ReadLine(blocking);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void ListenOnce()
+ {
+ ListenOnce(true);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="blocking"></param>
+ /// <returns></returns>
+ public string ReadLine(bool blocking)
+ {
+ string data = "";
+ if (blocking) {
+ // block till the queue has data, but bail out on connection error
+ while (IsConnected &&
+ !IsConnectionError &&
+ _ReadThread.Queue.Count == 0) {
+ Thread.Sleep(10);
+ }
+ }
+
+ if (IsConnected &&
+ _ReadThread.Queue.Count > 0) {
+ data = (string)(_ReadThread.Queue.Dequeue());
+ }
+
+ if (data != null && data.Length > 0) {
+#if LOG4NET
+ Logger.Queue.Debug("read: \""+data+"\"");
+#endif
+ if (OnReadLine != null) {
+ OnReadLine(this, new ReadLineEventArgs(data));
+ }
+ }
+
+ if (IsConnectionError &&
+ !IsDisconnecting &&
+ OnConnectionError != null) {
+ OnConnectionError(this, EventArgs.Empty);
+ }
+
+ return data;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="data"></param>
+ /// <param name="priority"></param>
+ public void WriteLine(string data, Priority priority)
+ {
+ if (priority == Priority.Critical) {
+ if (!IsConnected) {
+ throw new NotConnectedException();
+ }
+
+ _WriteLine(data);
+ } else {
+ ((Queue)_SendBuffer[priority]).Enqueue(data);
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="data"></param>
+ public void WriteLine(string data)
+ {
+ WriteLine(data, Priority.Medium);
+ }
+
+ private bool _WriteLine(string data)
+ {
+ if (IsConnected) {
+ try {
+ _Writer.Write(data + "\r\n");
+ _Writer.Flush();
+ } catch (IOException) {
+#if LOG4NET
+ Logger.Socket.Warn("sending data failed, connection lost");
+#endif
+ IsConnectionError = true;
+ return false;
+ } catch (ObjectDisposedException) {
+#if LOG4NET
+ Logger.Socket.Warn("sending data failed (stream error), connection lost");
+#endif
+ IsConnectionError = true;
+ return false;
+ }
+
+#if LOG4NET
+ Logger.Socket.Debug("sent: \""+data+"\"");
+#endif
+ if (OnWriteLine != null) {
+ OnWriteLine(this, new WriteLineEventArgs(data));
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ private void _NextAddress()
+ {
+ _CurrentAddress++;
+ if (_CurrentAddress >= _AddressList.Length) {
+ _CurrentAddress = 0;
+ }
+#if LOG4NET
+ Logger.Connection.Info("set server to: "+Address);
+#endif
+ }
+
+ private void _SimpleParser(object sender, ReadLineEventArgs args)
+ {
+ string rawline = args.Line;
+ string[] rawlineex = rawline.Split(new char[] {' '});
+ string messagecode = "";
+
+ if (rawline[0] == ':') {
+ messagecode = rawlineex[1];
+
+ ReplyCode replycode = ReplyCode.Null;
+ try {
+ replycode = (ReplyCode)int.Parse(messagecode);
+ } catch (FormatException) {
+ }
+
+ if (replycode != ReplyCode.Null) {
+ switch (replycode) {
+ case ReplyCode.Welcome:
+ _IsRegistered = true;
+#if LOG4NET
+ Logger.Connection.Info("logged in");
+#endif
+ break;
+ }
+ } else {
+ switch (rawlineex[1]) {
+ case "PONG":
+ DateTime now = DateTime.Now;
+ _LastPongReceived = now;
+ _Lag = now - _LastPingSent;
+
+#if LOG4NET
+ Logger.Connection.Debug("PONG received, took: " + _Lag.TotalMilliseconds + " ms");
+#endif
+ break;
+ }
+ }
+ } else {
+ messagecode = rawlineex[0];
+ switch (messagecode) {
+ case "ERROR":
+ // FIXME: handle server errors differently than connection errors!
+ //IsConnectionError = true;
+ break;
+ }
+ }
+ }
+
+ private void _OnConnectionError(object sender, EventArgs e)
+ {
+ try {
+ if (AutoReconnect) {
+ // lets try to recover the connection
+ Reconnect();
+ } else {
+ // make sure we clean up
+ Disconnect();
+ }
+ } catch (ConnectionException) {
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ private class ReadThread
+ {
+#if LOG4NET
+ private static readonly log4net.ILog _Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+#endif
+ private IrcConnection _Connection;
+ private Thread _Thread;
+ private Queue _Queue = Queue.Synchronized(new Queue());
+
+ public Queue Queue {
+ get {
+ return _Queue;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="connection"></param>
+ public ReadThread(IrcConnection connection)
+ {
+ _Connection = connection;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void Start()
+ {
+ _Thread = new Thread(new ThreadStart(_Worker));
+ _Thread.Name = "ReadThread ("+_Connection.Address+":"+_Connection.Port+")";
+ _Thread.IsBackground = true;
+ _Thread.Start();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void Stop()
+ {
+#if LOG4NET
+ _Logger.Debug("Stop()");
+#endif
+
+#if LOG4NET
+ _Logger.Debug("Stop(): aborting thread...");
+#endif
+ _Thread.Abort();
+ // make sure we close the stream after the thread is gone, else
+ // the thread will think the connection is broken!
+#if LOG4NET
+ _Logger.Debug("Stop(): joining thread...");
+#endif
+ _Thread.Join();
+
+#if LOG4NET
+ _Logger.Debug("Stop(): closing reader...");
+#endif
+ try {
+ _Connection._Reader.Close();
+ } catch (ObjectDisposedException) {
+ }
+ }
+
+ private void _Worker()
+ {
+#if LOG4NET
+ Logger.Socket.Debug("ReadThread started");
+#endif
+ try {
+ string data = "";
+ try {
+ while (_Connection.IsConnected &&
+ ((data = _Connection._Reader.ReadLine()) != null)) {
+ _Queue.Enqueue(data);
+#if LOG4NET
+ Logger.Socket.Debug("received: \""+data+"\"");
+#endif
+ }
+ } catch (IOException e) {
+#if LOG4NET
+ Logger.Socket.Warn("IOException: "+e.Message);
+#endif
+ } finally {
+#if LOG4NET
+ Logger.Socket.Warn("connection lost");
+#endif
+ // only flag this as connection error if we are not
+ // cleanly disconnecting
+ if (!_Connection.IsDisconnecting) {
+ _Connection.IsConnectionError = true;
+ }
+ }
+ } catch (ThreadAbortException) {
+ Thread.ResetAbort();
+#if LOG4NET
+ Logger.Socket.Debug("ReadThread aborted");
+#endif
+ } catch (Exception ex) {
+#if LOG4NET
+ Logger.Socket.Error(ex);
+#endif
+ }
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ private class WriteThread
+ {
+ private IrcConnection _Connection;
+ private Thread _Thread;
+ private int _HighCount;
+ private int _AboveMediumCount;
+ private int _MediumCount;
+ private int _BelowMediumCount;
+ private int _LowCount;
+ private int _AboveMediumSentCount;
+ private int _MediumSentCount;
+ private int _BelowMediumSentCount;
+ private int _AboveMediumThresholdCount = 4;
+ private int _MediumThresholdCount = 2;
+ private int _BelowMediumThresholdCount = 1;
+ private int _BurstCount;
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="connection"></param>
+ public WriteThread(IrcConnection connection)
+ {
+ _Connection = connection;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void Start()
+ {
+ _Thread = new Thread(new ThreadStart(_Worker));
+ _Thread.Name = "WriteThread ("+_Connection.Address+":"+_Connection.Port+")";
+ _Thread.IsBackground = true;
+ _Thread.Start();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void Stop()
+ {
+#if LOG4NET
+ Logger.Connection.Debug("Stopping WriteThread...");
+#endif
+
+ _Thread.Abort();
+ // make sure we close the stream after the thread is gone, else
+ // the thread will think the connection is broken!
+ _Thread.Join();
+
+ try {
+ _Connection._Writer.Close();
+ } catch (ObjectDisposedException) {
+ }
+ }
+
+ private void _Worker()
+ {
+#if LOG4NET
+ Logger.Socket.Debug("WriteThread started");
+#endif
+ try {
+ try {
+ while (_Connection.IsConnected) {
+ _CheckBuffer();
+ Thread.Sleep(_Connection._SendDelay);
+ }
+ } catch (IOException e) {
+#if LOG4NET
+ Logger.Socket.Warn("IOException: " + e.Message);
+#endif
+ } finally {
+#if LOG4NET
+ Logger.Socket.Warn("connection lost");
+#endif
+ // only flag this as connection error if we are not
+ // cleanly disconnecting
+ if (!_Connection.IsDisconnecting) {
+ _Connection.IsConnectionError = true;
+ }
+ }
+ } catch (ThreadAbortException) {
+ Thread.ResetAbort();
+#if LOG4NET
+ Logger.Socket.Debug("WriteThread aborted");
+#endif
+ } catch (Exception ex) {
+#if LOG4NET
+ Logger.Socket.Error(ex);
+#endif
+ }
+ }
+
+#region WARNING: complex scheduler, don't even think about changing it!
+ // WARNING: complex scheduler, don't even think about changing it!
+ private void _CheckBuffer()
+ {
+ // only send data if we are succefully registered on the IRC network
+ if (!_Connection._IsRegistered) {
+ return;
+ }
+
+ _HighCount = ((Queue)_Connection._SendBuffer[Priority.High]).Count;
+ _AboveMediumCount = ((Queue)_Connection._SendBuffer[Priority.AboveMedium]).Count;
+ _MediumCount = ((Queue)_Connection._SendBuffer[Priority.Medium]).Count;
+ _BelowMediumCount = ((Queue)_Connection._SendBuffer[Priority.BelowMedium]).Count;
+ _LowCount = ((Queue)_Connection._SendBuffer[Priority.Low]).Count;
+
+ if (_CheckHighBuffer() &&
+ _CheckAboveMediumBuffer() &&
+ _CheckMediumBuffer() &&
+ _CheckBelowMediumBuffer() &&
+ _CheckLowBuffer()) {
+ // everything is sent, resetting all counters
+ _AboveMediumSentCount = 0;
+ _MediumSentCount = 0;
+ _BelowMediumSentCount = 0;
+ _BurstCount = 0;
+ }
+
+ if (_BurstCount < 3) {
+ _BurstCount++;
+ //_CheckBuffer();
+ }
+ }
+
+ private bool _CheckHighBuffer()
+ {
+ if (_HighCount > 0) {
+ string data = (string)((Queue)_Connection._SendBuffer[Priority.High]).Dequeue();
+ if (_Connection._WriteLine(data) == false) {
+#if LOG4NET
+ Logger.Queue.Warn("Sending data was not sucessful, data is requeued!");
+#endif
+ ((Queue)_Connection._SendBuffer[Priority.High]).Enqueue(data);
+ }
+
+ if (_HighCount > 1) {
+ // there is more data to send
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private bool _CheckAboveMediumBuffer()
+ {
+ if ((_AboveMediumCount > 0) &&
+ (_AboveMediumSentCount < _AboveMediumThresholdCount)) {
+ string data = (string)((Queue)_Connection._SendBuffer[Priority.AboveMedium]).Dequeue();
+ if (_Connection._WriteLine(data) == false) {
+#if LOG4NET
+ Logger.Queue.Warn("Sending data was not sucessful, data is requeued!");
+#endif
+ ((Queue)_Connection._SendBuffer[Priority.AboveMedium]).Enqueue(data);
+ }
+ _AboveMediumSentCount++;
+
+ if (_AboveMediumSentCount < _AboveMediumThresholdCount) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private bool _CheckMediumBuffer()
+ {
+ if ((_MediumCount > 0) &&
+ (_MediumSentCount < _MediumThresholdCount)) {
+ string data = (string)((Queue)_Connection._SendBuffer[Priority.Medium]).Dequeue();
+ if (_Connection._WriteLine(data) == false) {
+#if LOG4NET
+ Logger.Queue.Warn("Sending data was not sucessful, data is requeued!");
+#endif
+ ((Queue)_Connection._SendBuffer[Priority.Medium]).Enqueue(data);
+ }
+ _MediumSentCount++;
+
+ if (_MediumSentCount < _MediumThresholdCount) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private bool _CheckBelowMediumBuffer()
+ {
+ if ((_BelowMediumCount > 0) &&
+ (_BelowMediumSentCount < _BelowMediumThresholdCount)) {
+ string data = (string)((Queue)_Connection._SendBuffer[Priority.BelowMedium]).Dequeue();
+ if (_Connection._WriteLine(data) == false) {
+#if LOG4NET
+ Logger.Queue.Warn("Sending data was not sucessful, data is requeued!");
+#endif
+ ((Queue)_Connection._SendBuffer[Priority.BelowMedium]).Enqueue(data);
+ }
+ _BelowMediumSentCount++;
+
+ if (_BelowMediumSentCount < _BelowMediumThresholdCount) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private bool _CheckLowBuffer()
+ {
+ if (_LowCount > 0) {
+ if ((_HighCount > 0) ||
+ (_AboveMediumCount > 0) ||
+ (_MediumCount > 0) ||
+ (_BelowMediumCount > 0)) {
+ return true;
+ }
+
+ string data = (string)((Queue)_Connection._SendBuffer[Priority.Low]).Dequeue();
+ if (_Connection._WriteLine(data) == false) {
+#if LOG4NET
+ Logger.Queue.Warn("Sending data was not sucessful, data is requeued!");
+#endif
+ ((Queue)_Connection._SendBuffer[Priority.Low]).Enqueue(data);
+ }
+
+ if (_LowCount > 1) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ // END OF WARNING, below this you can read/change again ;)
+#endregion
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ private class IdleWorkerThread
+ {
+ private IrcConnection _Connection;
+ private Thread _Thread;
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="connection"></param>
+ public IdleWorkerThread(IrcConnection connection)
+ {
+ _Connection = connection;
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void Start()
+ {
+ DateTime now = DateTime.Now;
+ _Connection._LastPingSent = now;
+ _Connection._LastPongReceived = now;
+
+ _Thread = new Thread(new ThreadStart(_Worker));
+ _Thread.Name = "IdleWorkerThread ("+_Connection.Address+":"+_Connection.Port+")";
+ _Thread.IsBackground = true;
+ _Thread.Start();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public void Stop()
+ {
+ _Thread.Abort();
+ }
+
+ private void _Worker()
+ {
+#if LOG4NET
+ Logger.Socket.Debug("IdleWorkerThread started");
+#endif
+ try {
+ while (_Connection.IsConnected ) {
+ Thread.Sleep(_Connection._IdleWorkerInterval);
+
+ // only send active pings if we are registered
+ if (!_Connection.IsRegistered) {
+ continue;
+ }
+
+ DateTime now = DateTime.Now;
+ int last_ping_sent = (int)(now - _Connection._LastPingSent).TotalSeconds;
+ int last_pong_rcvd = (int)(now - _Connection._LastPongReceived).TotalSeconds;
+ // determins if the resoponse time is ok
+ if (last_ping_sent < _Connection._PingTimeout) {
+ if (_Connection._LastPingSent > _Connection._LastPongReceived) {
+ // there is a pending ping request, we have to wait
+ continue;
+ }
+
+ // determines if it need to send another ping yet
+ if (last_pong_rcvd > _Connection._PingInterval) {
+ _Connection.WriteLine(Rfc2812.Ping(_Connection.Address), Priority.Critical);
+ _Connection._LastPingSent = now;
+ //_Connection._LastPongReceived = now;
+ } // else connection is fine, just continue
+ } else {
+ if (_Connection.IsDisconnecting) {
+ break;
+ }
+#if LOG4NET
+ Logger.Socket.Warn("ping timeout, connection lost");
+#endif
+ // only flag this as connection error if we are not
+ // cleanly disconnecting
+ _Connection.IsConnectionError = true;
+ break;
+ }
+ }
+ } catch (ThreadAbortException) {
+ Thread.ResetAbort();
+#if LOG4NET
+ Logger.Socket.Debug("IdleWorkerThread aborted");
+#endif
+ } catch (Exception ex) {
+#if LOG4NET
+ Logger.Socket.Error(ex);
+#endif
+ }
+ }
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcConnection/IrcProperties.cs b/SmartIrc4net/src/IrcConnection/IrcProperties.cs
new file mode 100644
index 0000000..2904602
--- /dev/null
+++ b/SmartIrc4net/src/IrcConnection/IrcProperties.cs
@@ -0,0 +1,48 @@
+/*
+ * $Id: IrcConnection.cs 208 2006-01-28 17:11:59Z meebey $
+ * $URL: svn+ssh://svn.qnetp.net/svn/smartirc/SmartIrc4net/trunk/src/IrcConnection/IrcConnection.cs $
+ * $Rev: 208 $
+ * $Author: meebey $
+ * $Date: 2006-01-28 18:11:59 +0100 (Sat, 28 Jan 2006) $
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.IO;
+using System.Text;
+using System.Collections;
+using System.Threading;
+using System.Reflection;
+using System.Net.Sockets;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ /*
+ public class IrcProperties
+ {
+ }
+ */
+}
diff --git a/SmartIrc4net/src/IrcConnection/ProxyType.cs b/SmartIrc4net/src/IrcConnection/ProxyType.cs
new file mode 100644
index 0000000..9e952c0
--- /dev/null
+++ b/SmartIrc4net/src/IrcConnection/ProxyType.cs
@@ -0,0 +1,37 @@
+/*
+ * $Id$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2009 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+
+namespace Meebey.SmartIrc4net
+{
+ public enum ProxyType
+ {
+ None,
+ Http,
+ Socks4,
+ Socks4a,
+ Socks5
+ }
+}
diff --git a/SmartIrc4net/src/IrcFeatures/DccChat.cs b/SmartIrc4net/src/IrcFeatures/DccChat.cs
new file mode 100644
index 0000000..27f5ffc
--- /dev/null
+++ b/SmartIrc4net/src/IrcFeatures/DccChat.cs
@@ -0,0 +1,188 @@
+/*
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch> <http://www.apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.IO;
+using System.Net;
+using System.Threading;
+using System.Net.Sockets;
+
+namespace Meebey.SmartIrc4net
+{
+
+
+ /// <summary>
+ /// Dcc Chat Connection, Line Based Text
+ /// </summary>
+ public class DccChat : DccConnection
+ {
+ #region Private Variables
+ private StreamReader _sr;
+ private StreamWriter _sw;
+ private int _lines;
+ #endregion
+
+ #region Public Properties
+ public int Lines {
+ get {
+ return _lines;
+ }
+ }
+ #endregion
+
+ /// <summary>
+ /// Constructor of DCC CHat for local DCC Chat Request to a certain user.
+ /// </summary>
+ /// <param name="irc">IrcFeature Class</param>
+ /// <param name="user">Chat Destination (channels are no valid targets)</param>
+ /// <param name="externalIpAdress">Our externally reachable IP Adress (can be anything if passive)</param>
+ /// <param name="passive">if you have no reachable ports!</param>
+ /// <param name="priority">Non DCC Message Priority</param>
+ internal DccChat(IrcFeatures irc, string user, IPAddress externalIpAdress, bool passive, Priority priority) : base()
+ {
+ this.Irc = irc;
+ this.ExternalIPAdress = externalIpAdress;
+ this.User = user;
+
+ if(passive) {
+ irc.SendMessage(SendType.CtcpRequest, user, "DCC CHAT chat " + HostToDccInt(externalIpAdress).ToString() + " 0 " + session, priority);
+ this.Disconnect();
+ } else {
+ DccServer = new TcpListener(new IPEndPoint(IPAddress.Any, 0));
+ DccServer.Start();
+ LocalEndPoint = (IPEndPoint)DccServer.LocalEndpoint;
+ irc.SendMessage(SendType.CtcpRequest, user, "DCC CHAT chat " + HostToDccInt(externalIpAdress).ToString() + " " + LocalEndPoint.Port, priority);
+ }
+
+ }
+
+ /// <summary>
+ /// Constructor of a DCC Chat for a Incoming DCC Chat Request
+ /// </summary>
+ /// <param name="irc">IrcFeature Class</param>
+ /// <param name="externalIpAdress">Our externally reachable IP Adress</param>
+ /// <param name="e">The Ctcp Event which initiated this constructor</param>
+ internal DccChat(IrcFeatures irc, IPAddress externalIpAdress, CtcpEventArgs e) : base ()
+ {
+ this.Irc = irc;
+ this.ExternalIPAdress = externalIpAdress;
+ this.User = e.Data.Nick;
+
+ long ip; int port;
+ if (e.Data.MessageArray.Length > 4) {
+ bool okIP = long.TryParse(e.Data.MessageArray[3], out ip);
+ bool okPo = int.TryParse(FilterMarker(e.Data.MessageArray[4]), out port); // port 0 = passive
+ if((e.Data.MessageArray[2]=="chat") && okIP && okPo) {
+ RemoteEndPoint = new IPEndPoint(IPAddress.Parse(DccIntToHost(ip)), port);
+ if (e.Data.MessageArray.Length > 5 && e.Data.MessageArray[5] != "T") {
+ this.AcceptRequest(); // Since we initated the Request, we accept DCC
+ return; // No OnDccChatRequestEvent Event! (we know that we want a connection)
+ }
+ DccChatRequestEvent(new DccEventArgs(this));
+ return;
+ } else {
+ irc.SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC Chat Parameter Error");
+ }
+ } else {
+ irc.SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC Chat not enough parameters");
+ }
+ this.isValid = false;
+ }
+
+ internal override void InitWork(Object stateInfo)
+ {
+ if (!Valid)
+ return;
+ if (DccServer != null) {
+ Connection = DccServer.AcceptTcpClient();
+ RemoteEndPoint = (IPEndPoint)Connection.Client.RemoteEndPoint;
+ DccServer.Stop();
+ isConnected = true;
+ } else {
+ while(!isConnected) {
+ Thread.Sleep(500); // We wait till Request is Accepted (or jump out when rejected)
+ if (reject) {
+ isValid = false;
+ return;
+ }
+ }
+ }
+
+ DccChatStartEvent(new DccEventArgs(this));
+
+ _sr = new StreamReader(Connection.GetStream(), Irc.Encoding);
+ _sw = new StreamWriter(Connection.GetStream(), Irc.Encoding);
+ _sw.AutoFlush = true;
+
+ string line;
+ while(((line = _sr.ReadLine())!=null) && (isConnected)) {
+ DccChatReceiveLineEvent(new DccChatEventArgs(this, line));
+ _lines++;
+ }
+ isValid = false;
+ isConnected = false;
+ DccChatStopEvent(new DccEventArgs(this));
+
+ }
+
+ #region Public Methods for the DCC Chat Object
+ /// <summary>
+ /// Accept an incoming Chatrequest, returns false if anything but a Connect happens
+ /// </summary>
+ /// <returns></returns>
+ public bool AcceptRequest()
+ {
+ if (isConnected)
+ return false;
+ try {
+ if(RemoteEndPoint.Port==0) {
+ DccServer = new TcpListener(new IPEndPoint(IPAddress.Any, 0));
+ DccServer.Start();
+ LocalEndPoint = (IPEndPoint)DccServer.LocalEndpoint;
+ Irc.SendMessage(SendType.CtcpRequest, User, "DCC CHAT chat " + HostToDccInt(ExternalIPAdress).ToString() + " " + LocalEndPoint.Port);
+ } else {
+ Connection = new TcpClient();
+ Connection.Connect(RemoteEndPoint);
+ isConnected = true;
+ }
+ return true;
+ } catch(Exception) {
+ isValid = false;
+ isConnected = false;
+ return false;
+ }
+ }
+
+ public void WriteLine(string message) {
+ if(isConnected) {
+ _sw.WriteLine(message);
+ _lines++;
+ DccChatSentLineEvent(new DccChatEventArgs(this, message));
+ } else {
+ throw new NotConnectedException("DCC Chat is not Connected");
+ }
+ }
+ #endregion
+
+ }
+}
diff --git a/SmartIrc4net/src/IrcFeatures/DccConnection.cs b/SmartIrc4net/src/IrcFeatures/DccConnection.cs
new file mode 100644
index 0000000..af4b9a6
--- /dev/null
+++ b/SmartIrc4net/src/IrcFeatures/DccConnection.cs
@@ -0,0 +1,234 @@
+/*
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch> <http://www.apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.IO;
+using System.Net;
+using System.Threading;
+using System.Net.Sockets;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ /// Baseclass for all DccConnections
+ /// </summary>
+ public class DccConnection
+ {
+ #region Private Variables
+ protected IrcFeatures Irc;
+ protected TcpListener DccServer;
+ protected TcpClient Connection;
+ protected IPEndPoint LocalEndPoint;
+ protected IPEndPoint RemoteEndPoint;
+ protected IPAddress ExternalIPAdress;
+ protected DateTime Timeout;
+ protected string User;
+
+ protected bool isConnected = false;
+ protected bool isValid = true;
+
+ protected bool reject = false;
+ protected long session;
+ private class Session
+ {
+ private static long next;
+ internal static long Next {
+ get {
+ return ++next;
+ }
+ }
+ }
+ #endregion
+
+ #region Public Fields
+ /// <summary>
+ /// Returns false when the Connections is not Valid (before or after Connection)
+ /// </summary>
+ public bool Connected{
+ get {
+ return isConnected;
+ }
+ }
+
+ /// <summary>
+ /// Returns false when the Connections is not Valid anymore (only at the end)
+ /// </summary>
+ public bool Valid{
+ get {
+ return isValid && (isConnected || (DateTime.Now < Timeout));
+ }
+ }
+
+ /// <summary>
+ /// Returns the Nick of the User we have a DCC with
+ /// </summary>
+ public string Nick {
+ get {
+ return User;
+ }
+ }
+
+ #endregion
+
+ #region Public DCC Events
+ public event DccConnectionHandler OnDccChatRequestEvent;
+ protected virtual void DccChatRequestEvent(DccEventArgs e) {
+ if (OnDccChatRequestEvent!=null) {OnDccChatRequestEvent(this, e); }
+ Irc.DccChatRequestEvent(e);
+ }
+
+ public event DccSendRequestHandler OnDccSendRequestEvent;
+ protected virtual void DccSendRequestEvent(DccSendRequestEventArgs e) {
+ if (OnDccSendRequestEvent!=null) {OnDccSendRequestEvent(this, e); }
+ Irc.DccSendRequestEvent(e);
+ }
+
+ public event DccConnectionHandler OnDccChatStartEvent;
+ protected virtual void DccChatStartEvent(DccEventArgs e) {
+ if (OnDccChatStartEvent!=null) {OnDccChatStartEvent(this, e); }
+ Irc.DccChatStartEvent(e);
+ }
+
+ public event DccConnectionHandler OnDccSendStartEvent;
+ protected virtual void DccSendStartEvent(DccEventArgs e) {
+ if (OnDccSendStartEvent!=null) {OnDccSendStartEvent(this, e); }
+ Irc.DccSendStartEvent(e);
+ }
+
+ public event DccChatLineHandler OnDccChatReceiveLineEvent;
+ protected virtual void DccChatReceiveLineEvent(DccChatEventArgs e) {
+ if (OnDccChatReceiveLineEvent!=null) {OnDccChatReceiveLineEvent(this, e); }
+ Irc.DccChatReceiveLineEvent(e);
+ }
+
+ public event DccSendPacketHandler OnDccSendReceiveBlockEvent;
+ protected virtual void DccSendReceiveBlockEvent(DccSendEventArgs e) {
+ if (OnDccSendReceiveBlockEvent!=null) {OnDccSendReceiveBlockEvent(this, e); }
+ Irc.DccSendReceiveBlockEvent(e);
+ }
+
+ public event DccChatLineHandler OnDccChatSentLineEvent;
+ protected virtual void DccChatSentLineEvent(DccChatEventArgs e) {
+ if (OnDccChatSentLineEvent!=null) {OnDccChatSentLineEvent(this, e); }
+ Irc.DccChatSentLineEvent(e);
+ }
+
+ public event DccSendPacketHandler OnDccSendSentBlockEvent;
+ protected virtual void DccSendSentBlockEvent(DccSendEventArgs e) {
+ if (OnDccSendSentBlockEvent!=null) {OnDccSendSentBlockEvent(this, e); }
+ Irc.DccSendSentBlockEvent(e);
+ }
+
+ public event DccConnectionHandler OnDccChatStopEvent;
+ protected virtual void DccChatStopEvent(DccEventArgs e) {
+ if (OnDccChatStopEvent!=null) {OnDccChatStopEvent(this, e); }
+ Irc.DccChatStopEvent(e);
+ }
+
+ public event DccConnectionHandler OnDccSendStopEvent;
+ protected virtual void DccSendStopEvent(DccEventArgs e) {
+ if (OnDccSendStopEvent!=null) {OnDccSendStopEvent(this, e); }
+ Irc.DccSendStopEvent(e);
+ }
+ #endregion
+
+ internal DccConnection()
+ {
+ //Each DccConnection gets a Unique Identifier (just used internally until we have a TcpClient connected)
+ session = Session.Next;
+ // If a Connection is not established within 120 Seconds we invalidate the DccConnection (see property Valid)
+ Timeout = DateTime.Now.AddSeconds(120);
+ }
+
+ internal virtual void InitWork(Object stateInfo)
+ {
+ throw new NotSupportedException();
+ }
+
+ internal bool isSession(long session)
+ {
+ return (session == this.session);
+ }
+
+ #region Public Methods
+ public void RejectRequest()
+ {
+ Irc.SendMessage(SendType.CtcpReply, User, "ERRMSG DCC Rejected");
+ reject = true;
+ isValid = false;
+ }
+
+
+ public void Disconnect()
+ {
+ isConnected = false;
+ isValid = false;
+ }
+
+ public override string ToString()
+ {
+ return "DCC Session " + session + " of " + this.GetType().ToString() + " is " + ((isConnected)?"connected to "+RemoteEndPoint.Address.ToString():"not connected") + "[" + this.User + "]";
+ }
+ #endregion
+
+ #region protected Helper Functions
+ protected long HostToDccInt(IPAddress ip)
+ {
+ long temp = (ip.Address & 0xff) << 24;
+ temp |= (ip.Address & 0xff00) << 8;
+ temp |= (ip.Address >> 8) & 0xff00;
+ temp |= (ip.Address >> 24) & 0xff;
+ return temp;
+ }
+
+ protected string DccIntToHost(long ip)
+ {
+ IPEndPoint ep = new IPEndPoint(ip, 80);
+ char[] sep = { '.' };
+ string[] ipparts = ep.Address.ToString().Split(sep);
+ return ipparts[3] + "." + ipparts[2] + "." + ipparts[1] + "." + ipparts[0];
+ }
+
+ protected byte[] getAck(long SentBytes)
+ {
+ byte[] acks = new byte[4];
+ acks[0] = (byte)((SentBytes >>24 ) % 256);
+ acks[1] = (byte)((SentBytes >>16 ) % 256);
+ acks[2] = (byte)((SentBytes >>8 ) % 256);
+ acks[3] = (byte)((SentBytes ) % 256);
+ return acks;
+ }
+
+ protected string FilterMarker(string msg)
+ {
+ string result = "";
+ foreach(char c in msg)
+ {
+ if (c!=IrcConstants.CtcpChar)
+ result += c;
+ }
+ return result;
+ }
+ #endregion
+ }
+}
diff --git a/SmartIrc4net/src/IrcFeatures/DccSend.cs b/SmartIrc4net/src/IrcFeatures/DccSend.cs
new file mode 100644
index 0000000..8abbf35
--- /dev/null
+++ b/SmartIrc4net/src/IrcFeatures/DccSend.cs
@@ -0,0 +1,270 @@
+/*
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch> <http://www.apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.IO;
+using System.Net;
+using System.Threading;
+using System.Net.Sockets;
+
+namespace Meebey.SmartIrc4net
+{
+
+ /// <summary>
+ /// Dcc Send Connection, Filetransfer
+ /// </summary>
+ public class DccSend : DccConnection
+ {
+
+ #region Private Variables
+ private Stream _File;
+ private long _Filesize;
+ private string _Filename;
+ private bool _DirectionUp;
+ private long _SentBytes;
+ private DccSpeed _Speed;
+ private byte[] _Buffer = new byte[8192];
+ #endregion
+
+ #region Public Properties
+ public long SentBytes {
+ get {
+ return _SentBytes;
+ }
+ }
+ #endregion
+
+ internal DccSend(IrcFeatures irc, string user, IPAddress externalIpAdress, Stream file, string filename, long filesize, DccSpeed speed, bool passive, Priority priority) : base()
+ {
+ this.Irc = irc;
+ _DirectionUp = true;
+ _File = file;
+ _Filesize = filesize;
+ _Filename = filename;
+ _Speed = speed;
+ User = user;
+
+ if(passive) {
+ irc.SendMessage(SendType.CtcpRequest, user, "DCC SEND \"" + filename + "\" " + HostToDccInt(externalIpAdress).ToString() + " 0 " + filesize + " " + session, priority);
+ } else {
+ DccServer = new TcpListener(new IPEndPoint(IPAddress.Any, 0));
+ DccServer.Start();
+ LocalEndPoint = (IPEndPoint)DccServer.LocalEndpoint;
+ irc.SendMessage(SendType.CtcpRequest, user, "DCC SEND \"" + filename + "\" " + HostToDccInt(externalIpAdress).ToString() + " " + LocalEndPoint.Port + " " + filesize, priority);
+ }
+ }
+
+ internal DccSend(IrcFeatures irc, IPAddress externalIpAdress, CtcpEventArgs e) : base()
+ {
+ /* Remote Request */
+ this.Irc = irc;
+ _DirectionUp = false;
+ User = e.Data.Nick;
+
+ if (e.Data.MessageArray.Length > 4) {
+ long ip, filesize = 0; int port = 0;
+ bool okIP = long.TryParse(e.Data.MessageArray[3], out ip);
+ bool okPo = int.TryParse(e.Data.MessageArray[4], out port); // port 0 = passive
+ if (e.Data.MessageArray.Length > 5) {
+ bool okFs = long.TryParse(FilterMarker(e.Data.MessageArray[5]), out filesize);
+ _Filesize = filesize;
+ _Filename = e.Data.MessageArray[2].Trim(new char[] {'\"'});
+ }
+ if (okIP && okPo) {
+ RemoteEndPoint = new IPEndPoint(IPAddress.Parse(DccIntToHost(ip)), port);
+ DccSendRequestEvent(new DccSendRequestEventArgs(this, e.Data.MessageArray[2], filesize));
+ return;
+ } else {
+ irc.SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC Send Parameter Error");
+ }
+ } else {
+ irc.SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC Send not enough parameters");
+ }
+
+
+ }
+
+ internal override void InitWork(Object stateInfo)
+ {
+ if (!Valid)
+ return;
+ if (DccServer != null) {
+ Connection = DccServer.AcceptTcpClient();
+ RemoteEndPoint = (IPEndPoint)Connection.Client.RemoteEndPoint;
+ DccServer.Stop();
+ isConnected = true;
+ } else {
+ while(!isConnected) {
+ Thread.Sleep(500); // We wait till Request is Accepted (or jump out when rejected)
+ if (reject)
+ return;
+ }
+ }
+
+ DccSendStartEvent(new DccEventArgs(this));
+ int bytes;
+
+ if(_DirectionUp) {
+ do{
+ while (Connection.Available > 0) {
+ switch(_Speed)
+ {
+ case DccSpeed.Rfc:
+ Connection.GetStream().Read(_Buffer, 0, _Buffer.Length);
+ // TODO: only send x not ACKed Bytes ahead / (nobody wants this anyway)
+ break;
+ case DccSpeed.RfcSendAhead:
+ Connection.GetStream().Read(_Buffer, 0, _Buffer.Length);
+ break;
+ case DccSpeed.Turbo: // Available > 0 should not happen
+ break;
+ }
+ }
+
+ bytes = _File.Read(_Buffer, 0, _Buffer.Length);
+ try {
+ Connection.GetStream().Write(_Buffer, 0, (int)bytes);
+ } catch (IOException) {
+ bytes = 0; // Connection Lost
+ }
+
+ _SentBytes += bytes;
+
+ if (bytes > 0) {
+ DccSendSentBlockEvent(new DccSendEventArgs(this, _Buffer, bytes));
+ Console.Write(".");
+ }
+ } while(bytes > 0);
+ } else {
+ while((bytes = Connection.GetStream().Read(_Buffer,0,_Buffer.Length))>0) {
+ _File.Write(_Buffer, 0, bytes);
+ _SentBytes += bytes;
+ if (_Speed != DccSpeed.Turbo)
+ Connection.GetStream().Write(getAck(_SentBytes),0,4);
+
+ DccSendReceiveBlockEvent(new DccSendEventArgs(this, _Buffer, bytes));
+ }
+ }
+
+
+ isValid = false;
+ isConnected = false;
+ Console.WriteLine("--> Filetrangsfer Endet / Bytes sent: " + _SentBytes + " of " + _Filesize);
+ DccSendStopEvent(new DccEventArgs(this));
+ }
+
+ #region Public Methods for the DCC Send Object
+
+ /// <summary>
+ /// With this methode you can accept a DCC SEND Request you got from another User
+ /// </summary>
+ /// <param name="file">Any Stream you want use as a file, if you use offset it should be Seekable</param>
+ /// <param name="offset">Offset to start a Resume Request for the rest of a file</param>
+ /// <returns></returns>
+ public bool AcceptRequest(Stream file, long offset)
+ {
+ if (isConnected)
+ return false;
+ try {
+ if (file!=null)
+ _File = file;
+ if(RemoteEndPoint.Port==0) {
+ DccServer = new TcpListener(new IPEndPoint(IPAddress.Any, 0));
+ DccServer.Start();
+ LocalEndPoint = (IPEndPoint)DccServer.LocalEndpoint;
+ Irc.SendMessage(SendType.CtcpRequest, User, "DCC SEND \"" + _Filename + "\" " + HostToDccInt(ExternalIPAdress).ToString() + " " + LocalEndPoint.Port + " " + _Filesize);
+ } else {
+ if(offset==0) {
+ Connection = new TcpClient();
+ Connection.Connect(RemoteEndPoint);
+ isConnected = true;
+ } else {
+ if(_File.CanSeek) {
+ _File.Seek(offset, SeekOrigin.Begin);
+ _SentBytes = offset;
+ Irc.SendMessage(SendType.CtcpRequest, User, "DCC RESUME \"" + _Filename + "\" " + RemoteEndPoint.Port + " " + offset);
+ } else {
+ /* Resume of a file which is not seekable : I dont care, its your filestream! */
+ _SentBytes = offset;
+ Irc.SendMessage(SendType.CtcpRequest, User, "DCC RESUME \"" + _Filename + "\" " + RemoteEndPoint.Port + " " + offset);
+ }
+ }
+ }
+ return true;
+ } catch(Exception) {
+ isValid = false;
+ isConnected = false;
+ return false;
+ }
+ }
+ #endregion
+
+ #region Handler for Passive / Resume DCC
+ internal bool TryResume(CtcpEventArgs e) {
+ if (User == e.Data.Nick) {
+ if ((e.Data.MessageArray.Length > 4) && (_Filename == e.Data.MessageArray[2].Trim(new char[] {'\"'}))) {
+ long offset = 0;
+ long.TryParse(FilterMarker(e.Data.MessageArray[4]), out offset);
+ if (_File.CanSeek) {
+ if (e.Data.MessageArray.Length > 5) {
+ Irc.SendMessage(SendType.CtcpRequest, e.Data.Nick, "DCC ACCEPT " + e.Data.MessageArray[2] + " " + e.Data.MessageArray[3] + " " + e.Data.MessageArray[4] + " " + FilterMarker(e.Data.MessageArray[5]));
+ } else {
+ Irc.SendMessage(SendType.CtcpRequest, e.Data.Nick, "DCC ACCEPT " + e.Data.MessageArray[2] + " " + e.Data.MessageArray[3] + " " + FilterMarker(e.Data.MessageArray[4]));
+ }
+
+ _File.Seek(offset, SeekOrigin.Begin);
+ _SentBytes = offset;
+ return true;
+ } else {
+ Irc.SendMessage(SendType.CtcpRequest, e.Data.Nick, "ERRMSG DCC File not seekable");
+ }
+ }
+ }
+ return false;
+ }
+
+ internal bool TryAccept(CtcpEventArgs e) {
+ if (User == e.Data.Nick) {
+ if ((e.Data.MessageArray.Length > 4) && (_Filename == e.Data.MessageArray[2].Trim(new char[] {'\"'}))) {
+ return this.AcceptRequest(null, 0);
+ }
+ }
+ return false;
+ }
+
+ internal bool SetRemote(CtcpEventArgs e) {
+ long ip;
+ int port = 0;
+ bool okIP = long.TryParse(e.Data.MessageArray[3], out ip);
+ bool okPo = int.TryParse(e.Data.MessageArray[4], out port); // port 0 = passive
+ if (okIP && okPo) {
+ RemoteEndPoint = new IPEndPoint(IPAddress.Parse(DccIntToHost(ip)), port);
+ return true;
+ }
+ return false;
+ }
+
+ #endregion
+
+ }
+}
diff --git a/SmartIrc4net/src/IrcFeatures/Delegates.cs b/SmartIrc4net/src/IrcFeatures/Delegates.cs
new file mode 100644
index 0000000..d7c1817
--- /dev/null
+++ b/SmartIrc4net/src/IrcFeatures/Delegates.cs
@@ -0,0 +1,50 @@
+/*
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch> <http://www.apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ /// Delegates to handle individual ctcp commands
+ /// </summary>
+ public delegate void CtcpDelegate(CtcpEventArgs eventArgs);
+
+ /// <summary>
+ /// Delegate for the Standard DCC EVent
+ /// </summary>
+ public delegate void DccConnectionHandler(object sender, DccEventArgs e);
+
+ /// <summary>
+ /// Delegate for DCC Events involving Sending or Receiving Lines of Text
+ /// </summary>
+ public delegate void DccChatLineHandler(object sender, DccChatEventArgs e);
+
+ /// <summary>
+ /// Delegate for DCC EVents involving Sending or Receiving Packets of Binary Data
+ /// </summary>
+ public delegate void DccSendPacketHandler(object sender, DccSendEventArgs e);
+
+ /// <summary>
+ /// Special Delegate for Incoming Requests to Receive a File
+ /// </summary>
+ public delegate void DccSendRequestHandler(object sender, DccSendRequestEventArgs e);
+}
diff --git a/SmartIrc4net/src/IrcFeatures/EventArgs.cs b/SmartIrc4net/src/IrcFeatures/EventArgs.cs
new file mode 100644
index 0000000..ddb02bf
--- /dev/null
+++ b/SmartIrc4net/src/IrcFeatures/EventArgs.cs
@@ -0,0 +1,137 @@
+/*
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch> <http://www.apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Meebey.SmartIrc4net
+{
+
+ /// <summary>
+ /// Base DCC Event Arguments
+ /// </summary>
+ public class DccEventArgs : EventArgs
+ {
+
+ private DccConnection _dcc;
+
+ public DccConnection dcc {
+ get {
+ return _dcc;
+ }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="dccClient"></param>
+ /// <param name="stream">If there are multiple streams on a DCC (a channel DCC) this identifies the stream</param>
+ internal DccEventArgs(DccConnection dcc)
+ {
+ this._dcc = dcc;
+ }
+ }
+
+ /// <summary>
+ /// Dcc Event Args Involving Lines of Text
+ /// </summary>
+ public class DccChatEventArgs : DccEventArgs
+ {
+ private string _Message;
+
+ public string Message {
+ get {
+ return _Message;
+ }
+ }
+
+ private string[] _MessageArray;
+
+ public string[] MessageArray {
+ get {
+ return _MessageArray;
+ }
+ }
+
+ internal DccChatEventArgs(DccConnection dcc, string messageLine) : base(dcc)
+ {
+ char[] whiteSpace = {' '};
+ this._Message = messageLine;
+ this._MessageArray = messageLine.Split(new char[] {' '});
+ }
+ }
+
+ /// <summary>
+ /// Dcc Event Args involving Packets of Bytes
+ /// </summary>
+ public class DccSendEventArgs : DccEventArgs
+ {
+ private byte[] _Package;
+
+ public byte[] Package {
+ get {
+ return _Package;
+ }
+ }
+
+ private int _PackageSize;
+
+ public int PackageSize {
+ get {
+ return _PackageSize;
+ }
+ }
+
+ internal DccSendEventArgs(DccConnection dcc, byte[] package, int packageSize) : base(dcc)
+ {
+ this._Package = package;
+ this._PackageSize = packageSize;
+ }
+ }
+
+ /// <summary>
+ /// Special DCC Event Arg for Receiving File Requests
+ /// </summary>
+ public class DccSendRequestEventArgs : DccEventArgs
+ {
+ private string _Filename;
+ public string Filename {
+ get {
+ return _Filename;
+ }
+ }
+
+ private long _Filesize;
+ public long Filesize {
+ get {
+ return _Filesize;
+ }
+ }
+
+ internal DccSendRequestEventArgs(DccConnection dcc, string filename, long filesize) : base(dcc)
+ {
+ this._Filename = filename;
+ this._Filesize = filesize;
+ }
+ }
+}
diff --git a/SmartIrc4net/src/IrcFeatures/IrcConstants.cs b/SmartIrc4net/src/IrcFeatures/IrcConstants.cs
new file mode 100644
index 0000000..6034afc
--- /dev/null
+++ b/SmartIrc4net/src/IrcFeatures/IrcConstants.cs
@@ -0,0 +1,80 @@
+/*
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch> <http://www.apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ /// Special IRC Charakters
+ /// </summary>
+ public class IrcConstants {
+ public const char CtcpChar = '\x1';
+ public const char IrcBold = '\x2';
+ public const char IrcColor = '\x3';
+ public const char IrcReverse = '\x16';
+ public const char IrcNormal = '\xf';
+ public const char IrcUnderline = '\x1f';
+ public const char CtcpQuoteChar = '\x20';
+
+ }
+
+ public enum DccSpeed
+ {
+ /// <summary>
+ /// slow, ack every packet
+ /// </summary>
+ Rfc,
+ /// <summary>
+ /// hack, ignore acks, just send at max speed
+ /// </summary>
+ RfcSendAhead,
+ /// <summary>
+ /// fast, Turbo extension, no acks (Virc)
+ /// </summary>
+ Turbo
+ }
+
+ /// <summary>
+ /// Mirc Compatible Colors
+ /// </summary>
+ public enum IrcColors {
+ White = 0,
+ Black = 1,
+ Blue = 2,
+ Green = 3,
+ LightRed = 4,
+ Brown = 5,
+ Purple = 6,
+ Orange = 7,
+ Yellow = 8,
+ LightGreen = 9,
+ Cyan = 10,
+ LightCyan = 11,
+ LightBlue = 12,
+ Pink = 13,
+ Grey = 14,
+ LightGrey = 15,
+ Transparent = 99
+ }
+}
diff --git a/SmartIrc4net/src/IrcFeatures/IrcFeatures.cs b/SmartIrc4net/src/IrcFeatures/IrcFeatures.cs
new file mode 100644
index 0000000..f4cbce6
--- /dev/null
+++ b/SmartIrc4net/src/IrcFeatures/IrcFeatures.cs
@@ -0,0 +1,456 @@
+/*
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2008-2009 Thomas Bruderer <apophis@apophis.ch> <http://www.apophis.ch>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System;
+using System.IO;
+using System.Net;
+using System.Threading;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+
+namespace Meebey.SmartIrc4net
+{
+ /// <summary>
+ /// Description of IrcFeatures2.
+ /// </summary>
+ ///
+ public class IrcFeatures : IrcClient
+ {
+ #region Public Field Access
+ public IPAddress ExternalIpAdress {
+ get {
+ return _ExternalIpAdress;
+ }
+ set {
+ _ExternalIpAdress = value;
+ }
+ }
+
+ /// <summary>
+ /// Access to all DccConnections, Its not possible to change the collection itself,
+ /// but you can use the public Members of the DccCollections or its inherited Classes.
+ /// </summary>
+ public ReadOnlyCollection<DccConnection> DccConnections {
+ get {
+ return new ReadOnlyCollection<DccConnection>(_DccConnections);
+ }
+ }
+
+ /// <summary>
+ /// To handle more or less CTCP Events, modify this collection to your needs.
+ /// You can also change the Delegates to your own implementations.
+ /// </summary>
+ public Dictionary<string, CtcpDelegate> CtcpDelegates {
+ get {
+ return _CtcpDelegates;
+ }
+ }
+
+ /// <summary>
+ /// This Info is shown with the CTCP UserInfo Request
+ /// </summary>
+ public string CtcpUserInfo
+ {
+ get {
+ return _CtcpUserInfo;
+ }
+ set {
+ _CtcpUserInfo = value;
+ }
+ }
+
+ /// <summary>
+ /// This Url will be mentioned with the CTCP Url Request
+ /// </summary>
+ public string CtcpUrl
+ {
+ get {
+ return _CtcpUrl;
+ }
+ set {
+ _CtcpUrl = value;
+ }
+ }
+
+ /// <summary>
+ /// The Source of the IRC Program is show in the CTCP Source Request
+ /// </summary>
+ public string CtcpSource
+ {
+ get {
+ return _CtcpSource;
+ }
+ set {
+ _CtcpSource = value;
+ }
+ }
+ #endregion
+
+ #region private variables
+ private IPAddress _ExternalIpAdress;
+ private List<DccConnection> _DccConnections = new List<DccConnection>();
+ private Dictionary<string, CtcpDelegate> _CtcpDelegates = new Dictionary<string, CtcpDelegate>(StringComparer.CurrentCultureIgnoreCase);
+ private string _CtcpUserInfo;
+ private string _CtcpUrl;
+ private string _CtcpSource;
+ internal DccSpeed Speed = DccSpeed.RfcSendAhead;
+ #endregion
+
+ #region Public DCC Events (Global: All Dcc Events)
+ public event DccConnectionHandler OnDccChatRequestEvent;
+ public void DccChatRequestEvent(DccEventArgs e) {
+ if (OnDccChatRequestEvent!=null) {OnDccChatRequestEvent(this, e); }
+ }
+
+ public event DccSendRequestHandler OnDccSendRequestEvent;
+ public void DccSendRequestEvent(DccSendRequestEventArgs e) {
+ if (OnDccSendRequestEvent!=null) {OnDccSendRequestEvent(this, e); }
+ }
+
+ public event DccConnectionHandler OnDccChatStartEvent;
+ public void DccChatStartEvent(DccEventArgs e) {
+ if (OnDccChatStartEvent!=null) {OnDccChatStartEvent(this, e); }
+ }
+
+ public event DccConnectionHandler OnDccSendStartEvent;
+ public void DccSendStartEvent(DccEventArgs e) {
+ if (OnDccSendStartEvent!=null) {OnDccSendStartEvent(this, e); }
+ }
+
+ public event DccChatLineHandler OnDccChatReceiveLineEvent;
+ public void DccChatReceiveLineEvent(DccChatEventArgs e) {
+ if (OnDccChatReceiveLineEvent!=null) {OnDccChatReceiveLineEvent(this, e); }
+ }
+
+ public event DccSendPacketHandler OnDccSendReceiveBlockEvent;
+ public void DccSendReceiveBlockEvent(DccSendEventArgs e) {
+ if (OnDccSendReceiveBlockEvent!=null) {OnDccSendReceiveBlockEvent(this, e); }
+ }
+
+ public event DccChatLineHandler OnDccChatSentLineEvent;
+ public void DccChatSentLineEvent(DccChatEventArgs e) {
+ if (OnDccChatSentLineEvent!=null) {OnDccChatSentLineEvent(this, e); }
+ }
+
+ public event DccSendPacketHandler OnDccSendSentBlockEvent;
+ internal void DccSendSentBlockEvent(DccSendEventArgs e) {
+ if (OnDccSendSentBlockEvent!=null) {OnDccSendSentBlockEvent(this, e); }
+ }
+
+ public event DccConnectionHandler OnDccChatStopEvent;
+ public void DccChatStopEvent(DccEventArgs e) {
+ if (OnDccChatStopEvent!=null) {OnDccChatStopEvent(this, e); }
+ }
+
+ public event DccConnectionHandler OnDccSendStopEvent;
+ public void DccSendStopEvent(DccEventArgs e) {
+ if (OnDccSendStopEvent!=null) {OnDccSendStopEvent(this, e); }
+ }
+
+ #endregion
+
+ #region Public Interface Methods
+ public IrcFeatures() : base()
+ {
+ // This method calls all the ctcp handlers defined below (or added anywhere else)
+ this.OnCtcpRequest += new CtcpEventHandler(this.CtcpRequestsHandler);
+
+ // Adding ctcp handler, all commands are lower case (.ToLower() in handler)
+ _CtcpDelegates.Add("version", this.CtcpVersionDelegate);
+ _CtcpDelegates.Add("clientinfo", this.CtcpClientInfoDelegate);
+ _CtcpDelegates.Add("time", this.CtcpTimeDelegate);
+ _CtcpDelegates.Add("userinfo", this.CtcpUserInfoDelegate);
+ _CtcpDelegates.Add("url", this.CtcpUrlDelegate);
+ _CtcpDelegates.Add("source", this.CtcpSourceDelegate);
+ _CtcpDelegates.Add("finger", this.CtcpFingerDelegate);
+ // The DCC Handler
+ _CtcpDelegates.Add("dcc", this.CtcpDccDelegate);
+ // Don't remove the Ping handler without your own implementation
+ _CtcpDelegates.Add("ping", this.CtcpPingDelegate);
+ }
+
+ /// <summary>
+ /// Init a DCC Chat Session
+ /// </summary>
+ /// <param name="user">User to DCC</param>
+ public void InitDccChat(string user) {
+ this.InitDccChat(user, false);
+ }
+
+ /// <summary>
+ /// Init a DCC Chat Session
+ /// </summary>
+ /// <param name="user">User to DCC</param>
+ /// <param name="passive">Passive DCC</param>
+ public void InitDccChat(string user, bool passive) {
+ this.InitDccChat(user, passive, Priority.Medium);
+ }
+
+ /// <summary>
+ /// Init a DCC Chat Session
+ /// </summary>
+ /// <param name="user">User to DCC</param>
+ /// <param name="passive">Passive DCC</param>
+ /// <param name="priority">Non Dcc Message Priority for Negotiation</param>
+ public void InitDccChat(string user, bool passive, Priority priority) {
+ DccChat chat = new DccChat(this, user, _ExternalIpAdress, passive, priority);
+ _DccConnections.Add(chat);
+ ThreadPool.QueueUserWorkItem(new WaitCallback(chat.InitWork));
+ RemoveInvalidDccConnections();
+ }
+
+
+ /// <summary>
+ /// Send a local File
+ /// </summary>
+ /// <param name="user">Destination of the File (no channel)</param>
+ /// <param name="filepath">complete filepath, absolute or relative (carefull)</param>
+ public void SendFile(string user, string filepath)
+ {
+ FileInfo fi = new FileInfo(filepath);
+ if (fi.Exists) {
+ this.SendFile(user, new FileStream(filepath, FileMode.Open), fi.Name, fi.Length, DccSpeed.RfcSendAhead, false, Priority.Medium);
+ }
+ }
+
+ /// <summary>
+ /// Send a local File passivly
+ /// </summary>
+ /// <param name="user">Destination of the File (no channel)</param>
+ /// <param name="filepath">complete filepath, absolute or relative (carefull)</param>
+ /// <param name="passive">Passive DCC</param>
+ public void SendFile(string user, string filepath, bool passive)
+ {
+ FileInfo fi = new FileInfo(filepath);
+ if (fi.Exists) {
+ this.SendFile(user, new FileStream(filepath, FileMode.Open), fi.Name, fi.Length, DccSpeed.RfcSendAhead, passive, Priority.Medium);
+ }
+ }
+
+ /// <summary>
+ /// Send any Stream, active initiator, fast RfC method
+ /// </summary>
+ /// <param name="user">Destination of the File (no channel)</param>
+ /// <param name="file">You can send any stream here</param>
+ /// <param name="filename">give a filename for the remote User</param>
+ /// <param name="filesize">give the length of the stream</param>
+ public void SendFile(string user, Stream file, string filename, long filesize) {
+ this.SendFile(user, file, filename, filesize, DccSpeed.RfcSendAhead, false);
+ }
+
+ /// <summary>
+ /// Send any Stream, full flexibility in Dcc Connection Negotiation
+ /// </summary>
+ /// <param name="user">Destination of the File (no channel)</param>
+ /// <param name="file">You can send any stream here</param>
+ /// <param name="filename">give a filename for the remote User</param>
+ /// <param name="filesize">give the length of the stream</param>
+ /// <param name="speed">What ACK Managment should be used</param>
+ /// <param name="passive">Passive DCC</param>
+ public void SendFile(string user, Stream file, string filename, long filesize, DccSpeed speed, bool passive) {
+ this.SendFile(user, file, filename, filesize, speed, passive, Priority.Medium);
+ }
+
+ /// <summary>
+ /// Send any Stream, full flexibility in Dcc Connection Negotiation
+ /// </summary>
+ /// <param name="user">Destination of the File (no channel)</param>
+ /// <param name="file">You can send any stream here</param>
+ /// <param name="filename">give a filename for the remote User</param>
+ /// <param name="filesize">give the length of the stream</param>
+ /// <param name="speed">What ACK Managment should be used</param>
+ /// <param name="passive">Passive DCC</param>
+ /// <param name="priority">Non Dcc Message Priority for Negotiation</param>
+ public void SendFile(string user, Stream file, string filename, long filesize, DccSpeed speed, bool passive, Priority priority) {
+ DccSend send = new DccSend(this, user, _ExternalIpAdress, file, filename, filesize, speed, passive, priority);
+ _DccConnections.Add(send);
+ ThreadPool.QueueUserWorkItem(new WaitCallback(send.InitWork));
+ RemoveInvalidDccConnections();
+ }
+ #endregion
+
+ #region Private Methods
+ private void CtcpRequestsHandler(object sender, CtcpEventArgs e)
+ {
+ if (_CtcpDelegates.ContainsKey(e.CtcpCommand)) {
+ _CtcpDelegates[e.CtcpCommand].Invoke(e);
+ } else {
+ /* No CTCP Handler for this Command */
+ }
+ RemoveInvalidDccConnections();
+ }
+ #endregion
+
+ #region implemented ctcp delegates, can be overwritten by changing the ctcpDelagtes Dictionary
+ private void CtcpVersionDelegate(CtcpEventArgs e)
+ {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "VERSION " + ((CtcpVersion==null)?VersionString:CtcpVersion));
+ }
+
+ private void CtcpClientInfoDelegate(CtcpEventArgs e)
+ {
+ string clientInfo = "CLIENTINFO";
+ foreach(KeyValuePair<string, CtcpDelegate> kvp in _CtcpDelegates) {
+ clientInfo = clientInfo+" "+kvp.Key.ToUpper();
+ }
+ SendMessage(SendType.CtcpReply, e.Data.Nick, clientInfo);
+ }
+
+ private void CtcpPingDelegate(CtcpEventArgs e)
+ {
+ if (e.Data.Message.Length > 7) {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "PING "+e.Data.Message.Substring(6, (e.Data.Message.Length-7)));
+ } else {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "PING"); //according to RFC, it should be PONG!
+ }
+ }
+
+ /// <summary>
+ /// This is the correct Rfc Ping Delegate, which is not used because all other clients do not use the PING According to RfC
+ /// </summary>
+ /// <param name="e"></param>
+ private void CtcpRfcPingDelegate(CtcpEventArgs e)
+ {
+ if (e.Data.Message.Length > 7) {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "PONG "+e.Data.Message.Substring(6, (e.Data.Message.Length-7)));
+ } else {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "PONG");
+ }
+ }
+
+
+ private void CtcpTimeDelegate(CtcpEventArgs e)
+ {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "TIME " + DateTime.Now.ToString("r"));
+ }
+
+ private void CtcpUserInfoDelegate(CtcpEventArgs e)
+ {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "USERINFO " + ((CtcpUserInfo==null)?"No user info given.":CtcpUserInfo));
+ }
+
+ private void CtcpUrlDelegate(CtcpEventArgs e)
+ {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "URL " + ((CtcpUrl==null)?"http://www.google.com":CtcpUrl));
+ }
+
+ private void CtcpSourceDelegate(CtcpEventArgs e)
+ {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "SOURCE " + ((CtcpSource==null)?"http://smartirc4net.meebey.net":CtcpSource));
+ }
+
+ private void CtcpFingerDelegate(CtcpEventArgs e)
+ {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "FINGER Don't touch little Helga there! " );
+ //SendMessage(SendType.CtcpReply, e.Data.Nick, "FINGER " + this.Realname + " (" + this.Email + ") Idle " + this.Idle + " seconds (" + ((string.IsNullOrEmpty(this.Reason))?this.Reason:"-") + ") " );
+ }
+
+ private void CtcpDccDelegate(CtcpEventArgs e)
+ {
+ if (e.Data.MessageArray.Length < 2) {
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC missing parameters");
+ } else {
+ switch(e.Data.MessageArray[1]) {
+ case "CHAT":
+ DccChat chat = new DccChat(this, _ExternalIpAdress, e);
+ _DccConnections.Add(chat);
+ ThreadPool.QueueUserWorkItem(new WaitCallback(chat.InitWork));
+ break;
+ case "SEND":
+ if (e.Data.MessageArray.Length > 6 && (FilterMarker(e.Data.MessageArray[6]) != "T")) {
+ long session = -1;
+ long.TryParse(FilterMarker(e.Data.MessageArray[6]), out session);
+ foreach(DccConnection dc in _DccConnections) {
+ if(dc.isSession(session)) {
+ ((DccSend)dc).SetRemote(e);
+ ((DccSend)dc).AcceptRequest(null, 0);
+ return;
+ }
+ }
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG Invalid passive DCC");
+ } else {
+ DccSend send = new DccSend(this, _ExternalIpAdress, e);
+ _DccConnections.Add(send);
+ ThreadPool.QueueUserWorkItem(new WaitCallback(send.InitWork));
+ }
+ break;
+ case "RESUME":
+ foreach(DccConnection dc in _DccConnections) {
+ if((dc is DccSend) && (((DccSend)dc).TryResume(e))) {
+ return;
+ }
+ }
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG Invalid DCC RESUME");
+ break;
+ case "ACCEPT":
+ foreach(DccConnection dc in _DccConnections) {
+ if((dc is DccSend) && (((DccSend)dc).TryAccept(e))) {
+ return;
+ }
+ }
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG Invalid DCC ACCEPT");
+ break;
+ case "XMIT":
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC XMIT not implemented");
+ break;
+ default:
+ SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC "+e.CtcpParameter+" unavailable");
+ break;
+ }
+ }
+ }
+
+ /// <summary>
+ /// cleanup all old invalide DCCs (late cleaning)
+ /// </summary>
+ /// <param name="dc"></param>
+ private void RemoveInvalidDccConnections()
+ {
+ //
+ List<DccConnection> invalidDc= new List<DccConnection>();
+ foreach (DccConnection dc in _DccConnections) {
+ if ((!dc.Valid) && (!dc.Connected)) {
+ invalidDc.Add(dc);
+ }
+ }
+
+ foreach (DccConnection dc in invalidDc) {
+ _DccConnections.Remove(dc);
+ }
+ }
+
+ private string FilterMarker(string msg)
+ {
+ string result = "";
+ foreach(char c in msg)
+ {
+ if (c!=IrcConstants.CtcpChar)
+ result += c;
+ }
+ return result;
+ }
+
+ #endregion
+ }
+}
diff --git a/SmartIrc4net/src/Logger.cs b/SmartIrc4net/src/Logger.cs
new file mode 100644
index 0000000..31a5d2c
--- /dev/null
+++ b/SmartIrc4net/src/Logger.cs
@@ -0,0 +1,201 @@
+/*
+ * $Id$
+ * $URL$
+ * $Rev$
+ * $Author$
+ * $Date$
+ *
+ * SmartIrc4net - the IRC library for .NET/C# <http://smartirc4net.sf.net>
+ *
+ * Copyright (c) 2003-2005 Mirco Bauer <meebey@meebey.net> <http://www.meebey.net>
+ *
+ * Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
+ *
+ * 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
+ */
+
+using System.IO;
+using System.Collections;
+
+namespace Meebey.SmartIrc4net
+{
+#if LOG4NET
+ /// <summary>
+ ///
+ /// </summary>
+ public enum LogCategory
+ {
+ Main,
+ Connection,
+ Socket,
+ Queue,
+ IrcMessages,
+ MessageTypes,
+ MessageParser,
+ ActionHandler,
+ TimeHandler,
+ MessageHandler,
+ ChannelSyncing,
+ UserSyncing,
+ Modules,
+ Dcc
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <threadsafety static="true" instance="true" />
+ internal class Logger
+ {
+ private static SortedList _LoggerList = new SortedList();
+ private static bool _Init;
+
+ private Logger()
+ {
+ }
+
+ public static void Init()
+ {
+ if (_Init) {
+ return;
+ }
+
+ _Init = true;
+
+ /*
+ FileInfo fi = new FileInfo("SmartIrc4net_log.config");
+ if (fi.Exists) {
+ log4net.Config.DOMConfigurator.ConfigureAndWatch(fi);
+ } else {
+ log4net.Config.BasicConfigurator.Configure();
+ }
+ */
+
+ _LoggerList[LogCategory.Main] = log4net.LogManager.GetLogger("MAIN");
+ _LoggerList[LogCategory.Socket] = log4net.LogManager.GetLogger("SOCKET");
+ _LoggerList[LogCategory.Queue] = log4net.LogManager.GetLogger("QUEUE");
+ _LoggerList[LogCategory.Connection] = log4net.LogManager.GetLogger("CONNECTION");
+ _LoggerList[LogCategory.IrcMessages] = log4net.LogManager.GetLogger("IRCMESSAGE");
+ _LoggerList[LogCategory.MessageParser] = log4net.LogManager.GetLogger("MESSAGEPARSER");
+ _LoggerList[LogCategory.MessageTypes] = log4net.LogManager.GetLogger("MESSAGETYPES");
+ _LoggerList[LogCategory.ActionHandler] = log4net.LogManager.GetLogger("ACTIONHANDLER");
+ _LoggerList[LogCategory.TimeHandler] = log4net.LogManager.GetLogger("TIMEHANDLER");
+ _LoggerList[LogCategory.MessageHandler] = log4net.LogManager.GetLogger("MESSAGEHANDLER");
+ _LoggerList[LogCategory.ChannelSyncing] = log4net.LogManager.GetLogger("CHANNELSYNCING");
+ _LoggerList[LogCategory.UserSyncing] = log4net.LogManager.GetLogger("USERSYNCING");
+ _LoggerList[LogCategory.Modules] = log4net.LogManager.GetLogger("MODULES");
+ _LoggerList[LogCategory.Dcc] = log4net.LogManager.GetLogger("DCC");
+ }
+
+ public static log4net.ILog Main
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.Main];
+ }
+ }
+
+ public static log4net.ILog Socket
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.Socket];
+ }
+ }
+
+ public static log4net.ILog Queue
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.Queue];
+ }
+ }
+
+ public static log4net.ILog Connection
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.Connection];
+ }
+ }
+
+ public static log4net.ILog IrcMessages
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.IrcMessages];
+ }
+ }
+
+ public static log4net.ILog MessageParser
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.MessageParser];
+ }
+ }
+
+ public static log4net.ILog MessageTypes
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.MessageTypes];
+ }
+ }
+
+ public static log4net.ILog ActionHandler
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.ActionHandler];
+ }
+ }
+
+ public static log4net.ILog TimeHandler
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.TimeHandler];
+ }
+ }
+
+ public static log4net.ILog MessageHandler
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.MessageHandler];
+ }
+ }
+
+ public static log4net.ILog ChannelSyncing
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.ChannelSyncing];
+ }
+ }
+
+ public static log4net.ILog UserSyncing
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.UserSyncing];
+ }
+ }
+
+ public static log4net.ILog Modules
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.Modules];
+ }
+ }
+
+ public static log4net.ILog Dcc
+ {
+ get {
+ return (log4net.ILog)_LoggerList[LogCategory.Dcc];
+ }
+ }
+ }
+#endif
+}
diff --git a/SmartIrc4net/src/Makefile.am b/SmartIrc4net/src/Makefile.am
new file mode 100644
index 0000000..8fe0aef
--- /dev/null
+++ b/SmartIrc4net/src/Makefile.am
@@ -0,0 +1,55 @@
+TARGET_DIR = $(top_builddir)/bin
+KEYFILE = $(top_srcdir)/$(PACKAGE_NAME).snk
+ASSEMBLY = $(ASSEMBLY_NAME).dll
+ASSEMBLY_TARGET = $(TARGET_DIR)/$(ASSEMBLY)
+ASSEMBLY_XML = $(ASSEMBLY_NAME).xml
+ASSEMBLY_XML_TARGET = $(TARGET_DIR)/$(ASSEMBLY_XML)
+ASSEMBLY_PC = $(top_srcdir)/$(PACKAGE_NAME).pc
+NDOC = ndoc-console
+NDOC_TARGET_DIR = docs/html
+SOURCE_PATTERNS = *.cs */*.cs */*/*.cs
+SOURCE_FILES = $(foreach pattern, $(SOURCE_PATTERNS), $(wildcard $(srcdir)/$(pattern)))
+GACUTIL_INSTALL = $(GACUTIL) -i $(ASSEMBLY_TARGET) -f $(GACUTIL_FLAGS)
+GACUTIL_UNINSTALL = $(GACUTIL) -u $(ASSEMBLY_NAME) $(GACUTIL_FLAGS)
+
+# automake magic variables
+EXTRA_DIST = $(SOURCE_FILES)
+CLEANFILES = $(ASSEMBLY_TARGET) $(ASSEMBLY_TARGET).mdb $(ASSEMBLY_XML_TARGET)
+
+if INSTALL_PKG_LIB
+pkglib_DATA = $(ASSEMBLY_TARGET)
+endif
+
+if INSTALL_PKG_CONFIG
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = $(ASSEMBLY_PC)
+endif
+# end of magic
+
+all: $(ASSEMBLY_TARGET)
+
+$(ASSEMBLY_TARGET): $(SOURCE_FILES)
+ $(INSTALL) -d $(TARGET_DIR)
+ $(CSC) $(CSC_FLAGS) -keyfile:$(KEYFILE) -doc:$(ASSEMBLY_XML_TARGET) -target:library -out:$@ $^
+
+docs: $(ASSEMBLY_TARGET)
+ $(NDOC) $(ASSEMBLY) \
+ -documenter=MSDN -OutputTarget=Web -OutputDirectory=$(NDOC_TARGET_DIR) \
+ -Title="SmartIrc4net API documentation" -SdkLinksOnWeb=true \
+ -AssemblyVersionInfo=AssemblyVersion
+
+if INSTALL_PKG_GAC
+install-data-local:
+ echo "$(GACUTIL_INSTALL)"; \
+ $(GACUTIL_INSTALL) || exit 1;
+
+uninstall-local:
+ echo "$(GACUTIL_UNINSTALL)"; \
+ $(GACUTIL_UNINSTALL) || exit 1;
+endif
+
+# HACK: autofoo stubbornly creates the $pkglibdir/$package directory
+if !INSTALL_PKG_LIB
+installdirs:
+install-pkglibDATA:
+endif
diff --git a/SmartIrc4net/src/Makefile.in b/SmartIrc4net/src/Makefile.in
new file mode 100644
index 0000000..bb037cf
--- /dev/null
+++ b/SmartIrc4net/src/Makefile.in
@@ -0,0 +1,440 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = src
+DIST_COMMON = $(srcdir)/AssemblyInfo.cs.in $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/expansions.m4 \
+ $(top_srcdir)/mono.m4 $(top_srcdir)/programs.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = AssemblyInfo.cs
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkglibdir)"
+DATA = $(pkgconfig_DATA) $(pkglib_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+ASSEMBLY_DESCRIPTION = @ASSEMBLY_DESCRIPTION@
+ASSEMBLY_NAME = @ASSEMBLY_NAME@
+ASSEMBLY_TITLE = @ASSEMBLY_TITLE@
+ASSEMBLY_VERSION = @ASSEMBLY_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CLR = @CLR@
+CSC = @CSC@
+CSC_FLAGS = @CSC_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+GACUTIL = @GACUTIL@
+GACUTIL_FLAGS = @GACUTIL_FLAGS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TARGET_DIR = $(top_builddir)/bin
+KEYFILE = $(top_srcdir)/$(PACKAGE_NAME).snk
+ASSEMBLY = $(ASSEMBLY_NAME).dll
+ASSEMBLY_TARGET = $(TARGET_DIR)/$(ASSEMBLY)
+ASSEMBLY_XML = $(ASSEMBLY_NAME).xml
+ASSEMBLY_XML_TARGET = $(TARGET_DIR)/$(ASSEMBLY_XML)
+ASSEMBLY_PC = $(top_srcdir)/$(PACKAGE_NAME).pc
+NDOC = ndoc-console
+NDOC_TARGET_DIR = docs/html
+SOURCE_PATTERNS = *.cs */*.cs */*/*.cs
+SOURCE_FILES = $(foreach pattern, $(SOURCE_PATTERNS), $(wildcard $(srcdir)/$(pattern)))
+GACUTIL_INSTALL = $(GACUTIL) -i $(ASSEMBLY_TARGET) -f $(GACUTIL_FLAGS)
+GACUTIL_UNINSTALL = $(GACUTIL) -u $(ASSEMBLY_NAME) $(GACUTIL_FLAGS)
+
+# automake magic variables
+EXTRA_DIST = $(SOURCE_FILES)
+CLEANFILES = $(ASSEMBLY_TARGET) $(ASSEMBLY_TARGET).mdb $(ASSEMBLY_XML_TARGET)
+@INSTALL_PKG_LIB_TRUE@pkglib_DATA = $(ASSEMBLY_TARGET)
+@INSTALL_PKG_CONFIG_TRUE@pkgconfigdir = $(libdir)/pkgconfig
+@INSTALL_PKG_CONFIG_TRUE@pkgconfig_DATA = $(ASSEMBLY_PC)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+AssemblyInfo.cs: $(top_builddir)/config.status $(srcdir)/AssemblyInfo.cs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+@INSTALL_PKG_LIB_TRUE@install-pkglibDATA: $(pkglib_DATA)
+@INSTALL_PKG_LIB_TRUE@ @$(NORMAL_INSTALL)
+@INSTALL_PKG_LIB_TRUE@ test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+ @list='$(pkglib_DATA)'; test -n "$(pkglibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkglibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkglibdir)" || exit $$?; \
+ done
+
+uninstall-pkglibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_DATA)'; test -n "$(pkglibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkglibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkglibdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+@INSTALL_PKG_LIB_TRUE@installdirs:
+@INSTALL_PKG_LIB_TRUE@ for dir in "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkglibdir)"; do \
+@INSTALL_PKG_LIB_TRUE@ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+@INSTALL_PKG_LIB_TRUE@ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@INSTALL_PKG_GAC_FALSE@uninstall-local:
+@INSTALL_PKG_GAC_FALSE@install-data-local:
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-pkgconfigDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibDATA
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-pkgconfigDATA \
+ uninstall-pkglibDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-data-local install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-pkgconfigDATA install-pkglibDATA install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
+ uninstall-am uninstall-local uninstall-pkgconfigDATA \
+ uninstall-pkglibDATA
+
+# end of magic
+
+all: $(ASSEMBLY_TARGET)
+
+$(ASSEMBLY_TARGET): $(SOURCE_FILES)
+ $(INSTALL) -d $(TARGET_DIR)
+ $(CSC) $(CSC_FLAGS) -keyfile:$(KEYFILE) -doc:$(ASSEMBLY_XML_TARGET) -target:library -out:$@ $^
+
+docs: $(ASSEMBLY_TARGET)
+ $(NDOC) $(ASSEMBLY) \
+ -documenter=MSDN -OutputTarget=Web -OutputDirectory=$(NDOC_TARGET_DIR) \
+ -Title="SmartIrc4net API documentation" -SdkLinksOnWeb=true \
+ -AssemblyVersionInfo=AssemblyVersion
+
+@INSTALL_PKG_GAC_TRUE@install-data-local:
+@INSTALL_PKG_GAC_TRUE@ echo "$(GACUTIL_INSTALL)"; \
+@INSTALL_PKG_GAC_TRUE@ $(GACUTIL_INSTALL) || exit 1;
+
+@INSTALL_PKG_GAC_TRUE@uninstall-local:
+@INSTALL_PKG_GAC_TRUE@ echo "$(GACUTIL_UNINSTALL)"; \
+@INSTALL_PKG_GAC_TRUE@ $(GACUTIL_UNINSTALL) || exit 1;
+
+# HACK: autofoo stubbornly creates the $pkglibdir/$package directory
+@INSTALL_PKG_LIB_FALSE@installdirs:
+@INSTALL_PKG_LIB_FALSE@install-pkglibDATA:
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SmartIrc4net/src/StarkSoftProxy/EventArgs/CreateConnectionAsyncCompletedEventArgs.cs b/SmartIrc4net/src/StarkSoftProxy/EventArgs/CreateConnectionAsyncCompletedEventArgs.cs
new file mode 100644
index 0000000..2cbe57c
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/EventArgs/CreateConnectionAsyncCompletedEventArgs.cs
@@ -0,0 +1,60 @@
+/*
+ * Authors: Benton Stark
+ *
+ * Copyright (c) 2007-2009 Starksoft, LLC (http://www.starksoft.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+using System;
+using System.Net.Sockets;
+using System.ComponentModel;
+
+namespace Starksoft.Net.Proxy
+{
+ /// <summary>
+ /// Event arguments class for the EncryptAsyncCompleted event.
+ /// </summary>
+ public class CreateConnectionAsyncCompletedEventArgs : AsyncCompletedEventArgs
+ {
+ private TcpClient _proxyConnection;
+
+ /// <summary>
+ /// Constructor.
+ /// </summary>
+ /// <param name="error">Exception information generated by the event.</param>
+ /// <param name="cancelled">Cancelled event flag. This flag is set to true if the event was cancelled.</param>
+ /// <param name="proxyConnection">Proxy Connection. The initialized and open TcpClient proxy connection.</param>
+ public CreateConnectionAsyncCompletedEventArgs(Exception error, bool cancelled, TcpClient proxyConnection)
+ : base(error, cancelled, null)
+ {
+ _proxyConnection = proxyConnection;
+ }
+
+ /// <summary>
+ /// The proxy connection.
+ /// </summary>
+ public TcpClient ProxyConnection
+ {
+ get { return _proxyConnection; }
+ }
+ }
+
+}
diff --git a/SmartIrc4net/src/StarkSoftProxy/Exceptions/ProxyException.cs b/SmartIrc4net/src/StarkSoftProxy/Exceptions/ProxyException.cs
new file mode 100644
index 0000000..3222e0a
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/Exceptions/ProxyException.cs
@@ -0,0 +1,77 @@
+/*
+ * Authors: Benton Stark
+ *
+ * Copyright (c) 2007-2009 Starksoft, LLC (http://www.starksoft.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+using System;
+using System.Runtime.Serialization;
+
+namespace Starksoft.Net.Proxy
+{
+
+ /// <summary>
+ /// This exception is thrown when a general, unexpected proxy error.
+ /// </summary>
+ [Serializable()]
+ public class ProxyException : Exception
+ {
+ /// <summary>
+ /// Constructor.
+ /// </summary>
+ public ProxyException()
+ {
+ }
+
+ /// <summary>
+ /// Constructor.
+ /// </summary>
+ /// <param name="message">Exception message text.</param>
+ public ProxyException(string message)
+ : base(message)
+ {
+ }
+
+ /// <summary>
+ /// Constructor.
+ /// </summary>
+ /// <param name="message">Exception message text.</param>
+ /// <param name="innerException">The inner exception object.</param>
+ public ProxyException(string message, Exception innerException)
+ :
+ base(message, innerException)
+ {
+ }
+
+ /// <summary>
+ /// Constructor.
+ /// </summary>
+ /// <param name="info">Serialization information.</param>
+ /// <param name="context">Stream context information.</param>
+ protected ProxyException(SerializationInfo info,
+ StreamingContext context)
+ : base(info, context)
+ {
+ }
+ }
+
+} \ No newline at end of file
diff --git a/SmartIrc4net/src/StarkSoftProxy/HttpProxyClient.cs b/SmartIrc4net/src/StarkSoftProxy/HttpProxyClient.cs
new file mode 100644
index 0000000..e4a6e9c
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/HttpProxyClient.cs
@@ -0,0 +1,461 @@
+/*
+ * Authors: Benton Stark
+ *
+ * Copyright (c) 2007-2009 Starksoft, LLC (http://www.starksoft.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+using System;
+using System.Text;
+using System.Net.Sockets;
+using System.Threading;
+using System.Globalization;
+using System.ComponentModel;
+
+namespace Starksoft.Net.Proxy
+{
+ /// <summary>
+ /// HTTP connection proxy class. This class implements the HTTP standard proxy protocol.
+ /// <para>
+ /// You can use this class to set up a connection to an HTTP proxy server. Calling the
+ /// CreateConnection() method initiates the proxy connection and returns a standard
+ /// System.Net.Socks.TcpClient object that can be used as normal. The proxy plumbing
+ /// is all handled for you.
+ /// </para>
+ /// <code>
+ ///
+ /// </code>
+ /// </summary>
+ public class HttpProxyClient : IProxyClient
+ {
+ private string _proxyHost;
+ private int _proxyPort;
+ private HttpResponseCodes _respCode;
+ private string _respText;
+ private TcpClient _tcpClient;
+
+ private const int HTTP_PROXY_DEFAULT_PORT = 8080;
+ private const string HTTP_PROXY_CONNECT_CMD = "CONNECT {0}:{1} HTTP/1.0\r\nHOST {0}:{1}\r\n\r\n";
+ private const int WAIT_FOR_DATA_INTERVAL = 50; // 50 ms
+ private const int WAIT_FOR_DATA_TIMEOUT = 15000; // 15 seconds
+ private const string PROXY_NAME = "HTTP";
+
+ private enum HttpResponseCodes
+ {
+ None = 0,
+ Continue = 100,
+ SwitchingProtocols = 101,
+ OK = 200,
+ Created = 201,
+ Accepted = 202,
+ NonAuthoritiveInformation = 203,
+ NoContent = 204,
+ ResetContent = 205,
+ PartialContent = 206,
+ MultipleChoices = 300,
+ MovedPermanetly = 301,
+ Found = 302,
+ SeeOther = 303,
+ NotModified = 304,
+ UserProxy = 305,
+ TemporaryRedirect = 307,
+ BadRequest = 400,
+ Unauthorized = 401,
+ PaymentRequired = 402,
+ Forbidden = 403,
+ NotFound = 404,
+ MethodNotAllowed = 405,
+ NotAcceptable = 406,
+ ProxyAuthenticantionRequired = 407,
+ RequestTimeout = 408,
+ Conflict = 409,
+ Gone = 410,
+ PreconditionFailed = 411,
+ RequestEntityTooLarge = 413,
+ RequestURITooLong = 414,
+ UnsupportedMediaType = 415,
+ RequestedRangeNotSatisfied = 416,
+ ExpectationFailed = 417,
+ InternalServerError = 500,
+ NotImplemented = 501,
+ BadGateway = 502,
+ ServiceUnavailable = 503,
+ GatewayTimeout = 504,
+ HTTPVersionNotSupported = 505
+ }
+
+ /// <summary>
+ /// Constructor.
+ /// </summary>
+ public HttpProxyClient() { }
+
+ /// <summary>
+ /// Creates a HTTP proxy client object using the supplied TcpClient object connection.
+ /// </summary>
+ /// <param name="tcpClient">A TcpClient connection object.</param>
+ public HttpProxyClient(TcpClient tcpClient)
+ {
+ if (tcpClient == null)
+ throw new ArgumentNullException("tcpClient");
+
+ _tcpClient = tcpClient;
+ }
+
+
+ /// <summary>
+ /// Constructor. The default HTTP proxy port 8080 is used.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy.</param>
+ public HttpProxyClient(string proxyHost)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ _proxyHost = proxyHost;
+ _proxyPort = HTTP_PROXY_DEFAULT_PORT;
+ }
+
+ /// <summary>
+ /// Constructor.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyPort">Port number for the proxy server.</param>
+ public HttpProxyClient(string proxyHost, int proxyPort)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ if (proxyPort <= 0 || proxyPort > 65535)
+ throw new ArgumentOutOfRangeException("proxyPort", "port must be greater than zero and less than 65535");
+
+ _proxyHost = proxyHost;
+ _proxyPort = proxyPort;
+ }
+
+ /// <summary>
+ /// Gets or sets host name or IP address of the proxy server.
+ /// </summary>
+ public string ProxyHost
+ {
+ get { return _proxyHost; }
+ set { _proxyHost = value; }
+ }
+
+ /// <summary>
+ /// Gets or sets port number for the proxy server.
+ /// </summary>
+ public int ProxyPort
+ {
+ get { return _proxyPort; }
+ set { _proxyPort = value; }
+ }
+
+ /// <summary>
+ /// Gets String representing the name of the proxy.
+ /// </summary>
+ /// <remarks>This property will always return the value 'HTTP'</remarks>
+ public string ProxyName
+ {
+ get { return PROXY_NAME; }
+ }
+
+ /// <summary>
+ /// Gets or sets the TcpClient object.
+ /// This property can be set prior to executing CreateConnection to use an existing TcpClient connection.
+ /// </summary>
+ public TcpClient TcpClient
+ {
+ get { return _tcpClient; }
+ set { _tcpClient = value; }
+ }
+
+
+ /// <summary>
+ /// Creates a remote TCP connection through a proxy server to the destination host on the destination port.
+ /// </summary>
+ /// <param name="destinationHost">Destination host name or IP address.</param>
+ /// <param name="destinationPort">Port number to connect to on the destination host.</param>
+ /// <returns>
+ /// Returns an open TcpClient object that can be used normally to communicate
+ /// with the destination server
+ /// </returns>
+ /// <remarks>
+ /// This method creates a connection to the proxy server and instructs the proxy server
+ /// to make a pass through connection to the specified destination host on the specified
+ /// port.
+ /// </remarks>
+ public TcpClient CreateConnection(string destinationHost, int destinationPort)
+ {
+ try
+ {
+ // if we have no connection, create one
+ if (_tcpClient == null)
+ {
+ if (String.IsNullOrEmpty(_proxyHost))
+ throw new ProxyException("ProxyHost property must contain a value.");
+
+ if (_proxyPort <= 0 || _proxyPort > 65535)
+ throw new ProxyException("ProxyPort value must be greater than zero and less than 65535");
+
+ // create new tcp client object to the proxy server
+ _tcpClient = new TcpClient();
+
+ // attempt to open the connection
+ _tcpClient.Connect(_proxyHost, _proxyPort);
+ }
+
+ // send connection command to proxy host for the specified destination host and port
+ SendConnectionCommand(destinationHost, destinationPort);
+
+ // return the open proxied tcp client object to the caller for normal use
+ return _tcpClient;
+ }
+ catch (SocketException ex)
+ {
+ throw new ProxyException(String.Format(CultureInfo.InvariantCulture, "Connection to proxy host {0} on port {1} failed.", Utils.GetHost(_tcpClient), Utils.GetPort(_tcpClient)), ex);
+ }
+ }
+
+
+ private void SendConnectionCommand(string host, int port)
+ {
+ NetworkStream stream = _tcpClient.GetStream();
+
+ // PROXY SERVER REQUEST
+ // =======================================================================
+ //CONNECT starksoft.com:443 HTTP/1.0 <CR><LF>
+ //HOST starksoft.com:443<CR><LF>
+ //[... other HTTP header lines ending with <CR><LF> if required]>
+ //<CR><LF> // Last Empty Line
+
+ string connectCmd = String.Format(CultureInfo.InvariantCulture, HTTP_PROXY_CONNECT_CMD, host, port.ToString(CultureInfo.InvariantCulture));
+ byte[] request = ASCIIEncoding.ASCII.GetBytes(connectCmd);
+
+ // send the connect request
+ stream.Write(request, 0, request.Length);
+
+ // wait for the proxy server to respond
+ WaitForData(stream);
+
+ // PROXY SERVER RESPONSE
+ // =======================================================================
+ //HTTP/1.0 200 Connection Established<CR><LF>
+ //[.... other HTTP header lines ending with <CR><LF>..
+ //ignore all of them]
+ //<CR><LF> // Last Empty Line
+
+ // create an byte response array
+ byte[] response = new byte[_tcpClient.ReceiveBufferSize];
+ StringBuilder sbuilder = new StringBuilder();
+ int bytes = 0;
+ long total = 0;
+
+ do
+ {
+ bytes = stream.Read(response, 0, _tcpClient.ReceiveBufferSize);
+ total += bytes;
+ sbuilder.Append(System.Text.ASCIIEncoding.UTF8.GetString(response, 0, bytes));
+ } while (stream.DataAvailable);
+
+ ParseResponse(sbuilder.ToString());
+
+ // evaluate the reply code for an error condition
+ if (_respCode != HttpResponseCodes.OK)
+ HandleProxyCommandError(host, port);
+ }
+
+ private void HandleProxyCommandError(string host, int port)
+ {
+ string msg;
+
+ switch (_respCode)
+ {
+ case HttpResponseCodes.None:
+ msg = String.Format(CultureInfo.InvariantCulture, "Proxy destination {0} on port {1} failed to return a recognized HTTP response code. Server response: {2}", Utils.GetHost(_tcpClient), Utils.GetPort(_tcpClient), _respText);
+ break;
+
+ case HttpResponseCodes.BadGateway:
+ //HTTP/1.1 502 Proxy Error (The specified Secure Sockets Layer (SSL) port is not allowed. ISA Server is not configured to allow SSL requests from this port. Most Web browsers use port 443 for SSL requests.)
+ msg = String.Format(CultureInfo.InvariantCulture, "Proxy destination {0} on port {1} responded with a 502 code - Bad Gateway. If you are connecting to a Microsoft ISA destination please refer to knowledge based article Q283284 for more information. Server response: {2}", Utils.GetHost(_tcpClient), Utils.GetPort(_tcpClient), _respText);
+ break;
+
+ default:
+ msg = String.Format(CultureInfo.InvariantCulture, "Proxy destination {0} on port {1} responded with a {2} code - {3}", Utils.GetHost(_tcpClient), Utils.GetPort(_tcpClient), ((int)_respCode).ToString(CultureInfo.InvariantCulture), _respText);
+ break;
+ }
+
+ // throw a new application exception
+ throw new ProxyException(msg);
+ }
+
+ private void WaitForData(NetworkStream stream)
+ {
+ int sleepTime = 0;
+ while (!stream.DataAvailable)
+ {
+ Thread.Sleep(WAIT_FOR_DATA_INTERVAL);
+ sleepTime += WAIT_FOR_DATA_INTERVAL;
+ if (sleepTime > WAIT_FOR_DATA_TIMEOUT)
+ throw new ProxyException(String.Format("A timeout while waiting for the proxy server at {0} on port {1} to respond.", Utils.GetHost(_tcpClient), Utils.GetPort(_tcpClient) ));
+ }
+ }
+
+ private void ParseResponse(string response)
+ {
+ string[] data = null;
+
+ // get rid of the LF character if it exists and then split the string on all CR
+ data = response.Replace('\n', ' ').Split('\r');
+
+ ParseCodeAndText(data[0]);
+ }
+
+ private void ParseCodeAndText(string line)
+ {
+ int begin = 0;
+ int end = 0;
+ string val = null;
+
+ if (line.IndexOf("HTTP") == -1)
+ throw new ProxyException(String.Format("No HTTP response received from proxy destination. Server response: {0}.", line));
+
+ begin = line.IndexOf(" ") + 1;
+ end = line.IndexOf(" ", begin);
+
+ val = line.Substring(begin, end - begin);
+ Int32 code = 0;
+
+ if (!Int32.TryParse(val, out code))
+ throw new ProxyException(String.Format("An invalid response code was received from proxy destination. Server response: {0}.", line));
+
+ _respCode = (HttpResponseCodes)code;
+ _respText = line.Substring(end + 1).Trim();
+ }
+
+
+
+#region "Async Methods"
+
+ private BackgroundWorker _asyncWorker;
+ private Exception _asyncException;
+ bool _asyncCancelled;
+
+ /// <summary>
+ /// Gets a value indicating whether an asynchronous operation is running.
+ /// </summary>
+ /// <remarks>Returns true if an asynchronous operation is running; otherwise, false.
+ /// </remarks>
+ public bool IsBusy
+ {
+ get { return _asyncWorker == null ? false : _asyncWorker.IsBusy; }
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether an asynchronous operation is cancelled.
+ /// </summary>
+ /// <remarks>Returns true if an asynchronous operation is cancelled; otherwise, false.
+ /// </remarks>
+ public bool IsAsyncCancelled
+ {
+ get { return _asyncCancelled; }
+ }
+
+ /// <summary>
+ /// Cancels any asychronous operation that is currently active.
+ /// </summary>
+ public void CancelAsync()
+ {
+ if (_asyncWorker != null && !_asyncWorker.CancellationPending && _asyncWorker.IsBusy)
+ {
+ _asyncCancelled = true;
+ _asyncWorker.CancelAsync();
+ }
+ }
+
+ private void CreateAsyncWorker()
+ {
+ if (_asyncWorker != null)
+ _asyncWorker.Dispose();
+ _asyncException = null;
+ _asyncWorker = null;
+ _asyncCancelled = false;
+ _asyncWorker = new BackgroundWorker();
+ }
+
+ /// <summary>
+ /// Event handler for CreateConnectionAsync method completed.
+ /// </summary>
+ public event EventHandler<CreateConnectionAsyncCompletedEventArgs> CreateConnectionAsyncCompleted;
+
+ /// <summary>
+ /// Asynchronously creates a remote TCP connection through a proxy server to the destination host on the destination port.
+ /// </summary>
+ /// <param name="destinationHost">Destination host name or IP address.</param>
+ /// <param name="destinationPort">Port number to connect to on the destination host.</param>
+ /// <returns>
+ /// Returns an open TcpClient object that can be used normally to communicate
+ /// with the destination server
+ /// </returns>
+ /// <remarks>
+ /// This method creates a connection to the proxy server and instructs the proxy server
+ /// to make a pass through connection to the specified destination host on the specified
+ /// port.
+ /// </remarks>
+ public void CreateConnectionAsync(string destinationHost, int destinationPort)
+ {
+ if (_asyncWorker != null && _asyncWorker.IsBusy)
+ throw new InvalidOperationException("The HttpProxy object is already busy executing another asynchronous operation. You can only execute one asychronous method at a time.");
+
+ CreateAsyncWorker();
+ _asyncWorker.WorkerSupportsCancellation = true;
+ _asyncWorker.DoWork += new DoWorkEventHandler(CreateConnectionAsync_DoWork);
+ _asyncWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CreateConnectionAsync_RunWorkerCompleted);
+ Object[] args = new Object[2];
+ args[0] = destinationHost;
+ args[1] = destinationPort;
+ _asyncWorker.RunWorkerAsync(args);
+ }
+
+ private void CreateConnectionAsync_DoWork(object sender, DoWorkEventArgs e)
+ {
+ try
+ {
+ Object[] args = (Object[])e.Argument;
+ e.Result = CreateConnection((string)args[0], (int)args[1]);
+ }
+ catch (Exception ex)
+ {
+ _asyncException = ex;
+ }
+ }
+
+ private void CreateConnectionAsync_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ if (CreateConnectionAsyncCompleted != null)
+ CreateConnectionAsyncCompleted(this, new CreateConnectionAsyncCompletedEventArgs(_asyncException, _asyncCancelled, (TcpClient)e.Result));
+ }
+
+
+
+#endregion
+
+ }
+}
diff --git a/SmartIrc4net/src/StarkSoftProxy/IProxyClient.cs b/SmartIrc4net/src/StarkSoftProxy/IProxyClient.cs
new file mode 100644
index 0000000..5f4f8d8
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/IProxyClient.cs
@@ -0,0 +1,97 @@
+/*
+ * Authors: Benton Stark
+ *
+ * Copyright (c) 2007-2009 Starksoft, LLC (http://www.starksoft.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net.Sockets;
+
+namespace Starksoft.Net.Proxy
+{
+ /// <summary>
+ /// Proxy client interface. This is the interface that all proxy clients must implement.
+ /// </summary>
+ public interface IProxyClient
+ {
+
+ /// <summary>
+ /// Event handler for CreateConnectionAsync method completed.
+ /// </summary>
+ event EventHandler<CreateConnectionAsyncCompletedEventArgs> CreateConnectionAsyncCompleted;
+
+ /// <summary>
+ /// Gets or sets proxy host name or IP address.
+ /// </summary>
+ string ProxyHost { get; set; }
+
+ /// <summary>
+ /// Gets or sets proxy port number.
+ /// </summary>
+ int ProxyPort { get; set; }
+
+ /// <summary>
+ /// Gets String representing the name of the proxy.
+ /// </summary>
+ string ProxyName { get; }
+
+ /// <summary>
+ /// Gets or set the TcpClient object if one was specified in the constructor.
+ /// </summary>
+ TcpClient TcpClient { get; set; }
+
+ /// <summary>
+ /// Creates a remote TCP connection through a proxy server to the destination host on the destination port.
+ /// </summary>
+ /// <param name="destinationHost">Destination host name or IP address.</param>
+ /// <param name="destinationPort">Port number to connect to on the destination host.</param>
+ /// <returns>
+ /// Returns an open TcpClient object that can be used normally to communicate
+ /// with the destination server
+ /// </returns>
+ /// <remarks>
+ /// This method creates a connection to the proxy server and instructs the proxy server
+ /// to make a pass through connection to the specified destination host on the specified
+ /// port.
+ /// </remarks>
+ TcpClient CreateConnection(string destinationHost, int destinationPort);
+
+ /// <summary>
+ /// Asynchronously creates a remote TCP connection through a proxy server to the destination host on the destination port.
+ /// </summary>
+ /// <param name="destinationHost">Destination host name or IP address.</param>
+ /// <param name="destinationPort">Port number to connect to on the destination host.</param>
+ /// <returns>
+ /// Returns an open TcpClient object that can be used normally to communicate
+ /// with the destination server
+ /// </returns>
+ /// <remarks>
+ /// This method creates a connection to the proxy server and instructs the proxy server
+ /// to make a pass through connection to the specified destination host on the specified
+ /// port.
+ /// </remarks>
+ void CreateConnectionAsync(string destinationHost, int destinationPort);
+
+ }
+}
diff --git a/SmartIrc4net/src/StarkSoftProxy/ProxyClientFactory.cs b/SmartIrc4net/src/StarkSoftProxy/ProxyClientFactory.cs
new file mode 100644
index 0000000..cfd5a75
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/ProxyClientFactory.cs
@@ -0,0 +1,208 @@
+/*
+ * Authors: Benton Stark
+ *
+ * Copyright (c) 2007-2009 Starksoft, LLC (http://www.starksoft.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net.Sockets;
+
+namespace Starksoft.Net.Proxy
+{
+ /// <summary>
+ /// The type of proxy.
+ /// </summary>
+ public enum ProxyType
+ {
+ /// <summary>
+ /// No Proxy specified. Note this option will cause an exception to be thrown if used to create a proxy object by the factory.
+ /// </summary>
+ None,
+ /// <summary>
+ /// HTTP Proxy
+ /// </summary>
+ Http,
+ /// <summary>
+ /// SOCKS v4 Proxy
+ /// </summary>
+ Socks4,
+ /// <summary>
+ /// SOCKS v4a Proxy
+ /// </summary>
+ Socks4a,
+ /// <summary>
+ /// SOCKS v5 Proxy
+ /// </summary>
+ Socks5
+ }
+
+ /// <summary>
+ /// Factory class for creating new proxy client objects.
+ /// </summary>
+ /// <remarks>
+ /// <code>
+ /// // create an instance of the client proxy factory
+ /// ProxyClientFactory factory = new ProxyClientFactory();
+ ///
+ /// // use the proxy client factory to generically specify the type of proxy to create
+ /// // the proxy factory method CreateProxyClient returns an IProxyClient object
+ /// IProxyClient proxy = factory.CreateProxyClient(ProxyType.Http, "localhost", 6588);
+ ///
+ /// // create a connection through the proxy to www.starksoft.com over port 80
+ /// System.Net.Sockets.TcpClient tcpClient = proxy.CreateConnection("www.starksoft.com", 80);
+ /// </code>
+ /// </remarks>
+ public class ProxyClientFactory
+ {
+
+ /// <summary>
+ /// Factory method for creating new proxy client objects.
+ /// </summary>
+ /// <param name="type">The type of proxy client to create.</param>
+ /// <returns>Proxy client object.</returns>
+ public IProxyClient CreateProxyClient(ProxyType type)
+ {
+ if (type == ProxyType.None)
+ throw new ArgumentOutOfRangeException("type");
+
+ switch (type)
+ {
+ case ProxyType.Http:
+ return new HttpProxyClient();
+ case ProxyType.Socks4:
+ return new Socks4ProxyClient();
+ case ProxyType.Socks4a:
+ return new Socks4aProxyClient();
+ case ProxyType.Socks5:
+ return new Socks5ProxyClient();
+ default:
+ throw new ProxyException(String.Format("Unknown proxy type {0}.", type.ToString()));
+ }
+ }
+
+ /// <summary>
+ /// Factory method for creating new proxy client objects using an existing TcpClient connection object.
+ /// </summary>
+ /// <param name="type">The type of proxy client to create.</param>
+ /// <param name="tcpClient">Open TcpClient object.</param>
+ /// <returns>Proxy client object.</returns>
+ public IProxyClient CreateProxyClient(ProxyType type, TcpClient tcpClient)
+ {
+ if (type == ProxyType.None)
+ throw new ArgumentOutOfRangeException("type");
+
+ switch (type)
+ {
+ case ProxyType.Http:
+ return new HttpProxyClient(tcpClient);
+ case ProxyType.Socks4:
+ return new Socks4ProxyClient(tcpClient);
+ case ProxyType.Socks4a:
+ return new Socks4aProxyClient(tcpClient);
+ case ProxyType.Socks5:
+ return new Socks5ProxyClient(tcpClient);
+ default:
+ throw new ProxyException(String.Format("Unknown proxy type {0}.", type.ToString()));
+ }
+ }
+
+ /// <summary>
+ /// Factory method for creating new proxy client objects.
+ /// </summary>
+ /// <param name="type">The type of proxy client to create.</param>
+ /// <param name="proxyHost">The proxy host or IP address.</param>
+ /// <param name="proxyPort">The proxy port number.</param>
+ /// <returns>Proxy client object.</returns>
+ public IProxyClient CreateProxyClient(ProxyType type, string proxyHost, int proxyPort)
+ {
+ if (type == ProxyType.None)
+ throw new ArgumentOutOfRangeException("type");
+
+ switch (type)
+ {
+ case ProxyType.Http:
+ return new HttpProxyClient(proxyHost, proxyPort);
+ case ProxyType.Socks4:
+ return new Socks4ProxyClient(proxyHost, proxyPort);
+ case ProxyType.Socks4a:
+ return new Socks4aProxyClient(proxyHost, proxyPort);
+ case ProxyType.Socks5:
+ return new Socks5ProxyClient(proxyHost, proxyPort);
+ default:
+ throw new ProxyException(String.Format("Unknown proxy type {0}.", type.ToString()));
+ }
+ }
+
+ /// <summary>
+ /// Factory method for creating new proxy client objects.
+ /// </summary>
+ /// <param name="type">The type of proxy client to create.</param>
+ /// <param name="proxyHost">The proxy host or IP address.</param>
+ /// <param name="proxyPort">The proxy port number.</param>
+ /// <param name="proxyUsername">The proxy username. This parameter is only used by Socks4 and Socks5 proxy objects.</param>
+ /// <param name="proxyPassword">The proxy user password. This parameter is only used Socks5 proxy objects.</param>
+ /// <returns>Proxy client object.</returns>
+ public IProxyClient CreateProxyClient(ProxyType type, string proxyHost, int proxyPort, string proxyUsername, string proxyPassword)
+ {
+ if (type == ProxyType.None)
+ throw new ArgumentOutOfRangeException("type");
+
+ switch (type)
+ {
+ case ProxyType.Http:
+ return new HttpProxyClient(proxyHost, proxyPort);
+ case ProxyType.Socks4:
+ return new Socks4ProxyClient(proxyHost, proxyPort, proxyUsername);
+ case ProxyType.Socks4a:
+ return new Socks4aProxyClient(proxyHost, proxyPort, proxyUsername);
+ case ProxyType.Socks5:
+ return new Socks5ProxyClient(proxyHost, proxyPort, proxyUsername, proxyPassword);
+ default:
+ throw new ProxyException(String.Format("Unknown proxy type {0}.", type.ToString()));
+ }
+ }
+
+ /// <summary>
+ /// Factory method for creating new proxy client objects.
+ /// </summary>
+ /// <param name="type">The type of proxy client to create.</param>
+ /// <param name="tcpClient">Open TcpClient object.</param>
+ /// <param name="proxyHost">The proxy host or IP address.</param>
+ /// <param name="proxyPort">The proxy port number.</param>
+ /// <param name="proxyUsername">The proxy username. This parameter is only used by Socks4 and Socks5 proxy objects.</param>
+ /// <param name="proxyPassword">The proxy user password. This parameter is only used Socks5 proxy objects.</param>
+ /// <returns>Proxy client object.</returns>
+ public IProxyClient CreateProxyClient(ProxyType type, TcpClient tcpClient, string proxyHost, int proxyPort, string proxyUsername, string proxyPassword)
+ {
+ IProxyClient c = CreateProxyClient(type, proxyHost, proxyPort, proxyUsername, proxyPassword);
+ c.TcpClient = tcpClient;
+ return c;
+ }
+
+
+ }
+
+
+
+}
diff --git a/SmartIrc4net/src/StarkSoftProxy/Socks4ProxyClient.cs b/SmartIrc4net/src/StarkSoftProxy/Socks4ProxyClient.cs
new file mode 100644
index 0000000..548d6bd
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/Socks4ProxyClient.cs
@@ -0,0 +1,577 @@
+/*
+ * Authors: Benton Stark
+ *
+ * Copyright (c) 2007-2009 Starksoft, LLC (http://www.starksoft.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+using System;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.Globalization;
+using System.IO;
+using System.Threading;
+using System.ComponentModel;
+
+namespace Starksoft.Net.Proxy
+{
+ /// <summary>
+ /// Socks4 connection proxy class. This class implements the Socks4 standard proxy protocol.
+ /// </summary>
+ /// <remarks>
+ /// This class implements the Socks4 proxy protocol standard for TCP communciations.
+ /// </remarks>
+ public class Socks4ProxyClient : IProxyClient
+ {
+ private const int WAIT_FOR_DATA_INTERVAL = 50; // 50 ms
+ private const int WAIT_FOR_DATA_TIMEOUT = 15000; // 15 seconds
+ private const string PROXY_NAME = "SOCKS4";
+ private TcpClient _tcpClient;
+
+ private string _proxyHost;
+ private int _proxyPort;
+ private string _proxyUserId;
+
+ /// <summary>
+ /// Default Socks4 proxy port.
+ /// </summary>
+ internal const int SOCKS_PROXY_DEFAULT_PORT = 1080;
+ /// <summary>
+ /// Socks4 version number.
+ /// </summary>
+ internal const byte SOCKS4_VERSION_NUMBER = 4;
+ /// <summary>
+ /// Socks4 connection command value.
+ /// </summary>
+ internal const byte SOCKS4_CMD_CONNECT = 0x01;
+ /// <summary>
+ /// Socks4 bind command value.
+ /// </summary>
+ internal const byte SOCKS4_CMD_BIND = 0x02;
+ /// <summary>
+ /// Socks4 reply request grant response value.
+ /// </summary>
+ internal const byte SOCKS4_CMD_REPLY_REQUEST_GRANTED = 90;
+ /// <summary>
+ /// Socks4 reply request rejected or failed response value.
+ /// </summary>
+ internal const byte SOCKS4_CMD_REPLY_REQUEST_REJECTED_OR_FAILED = 91;
+ /// <summary>
+ /// Socks4 reply request rejected becauase the proxy server can not connect to the IDENTD server value.
+ /// </summary>
+ internal const byte SOCKS4_CMD_REPLY_REQUEST_REJECTED_CANNOT_CONNECT_TO_IDENTD = 92;
+ /// <summary>
+ /// Socks4 reply request rejected because of a different IDENTD server.
+ /// </summary>
+ internal const byte SOCKS4_CMD_REPLY_REQUEST_REJECTED_DIFFERENT_IDENTD = 93;
+
+ /// <summary>
+ /// Create a Socks4 proxy client object. The default proxy port 1080 is used.
+ /// </summary>
+ public Socks4ProxyClient() { }
+
+ /// <summary>
+ /// Creates a Socks4 proxy client object using the supplied TcpClient object connection.
+ /// </summary>
+ /// <param name="tcpClient">A TcpClient connection object.</param>
+ public Socks4ProxyClient(TcpClient tcpClient)
+ {
+ if (tcpClient == null)
+ throw new ArgumentNullException("tcpClient");
+
+ _tcpClient = tcpClient;
+ }
+
+ /// <summary>
+ /// Create a Socks4 proxy client object. The default proxy port 1080 is used.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyUserId">Proxy user identification information.</param>
+ public Socks4ProxyClient(string proxyHost, string proxyUserId)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ if (proxyUserId == null)
+ throw new ArgumentNullException("proxyUserId");
+
+ _proxyHost = proxyHost;
+ _proxyPort = SOCKS_PROXY_DEFAULT_PORT;
+ _proxyUserId = proxyUserId;
+ }
+
+ /// <summary>
+ /// Create a Socks4 proxy client object.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyPort">Port used to connect to proxy server.</param>
+ /// <param name="proxyUserId">Proxy user identification information.</param>
+ public Socks4ProxyClient(string proxyHost, int proxyPort, string proxyUserId)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ if (proxyPort <= 0 || proxyPort > 65535)
+ throw new ArgumentOutOfRangeException("proxyPort", "port must be greater than zero and less than 65535");
+
+ if (proxyUserId == null)
+ throw new ArgumentNullException("proxyUserId");
+
+ _proxyHost = proxyHost;
+ _proxyPort = proxyPort;
+ _proxyUserId = proxyUserId;
+ }
+
+ /// <summary>
+ /// Create a Socks4 proxy client object. The default proxy port 1080 is used.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ public Socks4ProxyClient(string proxyHost)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ _proxyHost = proxyHost;
+ _proxyPort = SOCKS_PROXY_DEFAULT_PORT;
+ }
+
+ /// <summary>
+ /// Create a Socks4 proxy client object.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyPort">Port used to connect to proxy server.</param>
+ public Socks4ProxyClient(string proxyHost, int proxyPort)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ if (proxyPort <= 0 || proxyPort > 65535)
+ throw new ArgumentOutOfRangeException("proxyPort", "port must be greater than zero and less than 65535");
+
+ _proxyHost = proxyHost;
+ _proxyPort = proxyPort;
+ }
+
+ /// <summary>
+ /// Gets or sets host name or IP address of the proxy server.
+ /// </summary>
+ public string ProxyHost
+ {
+ get { return _proxyHost; }
+ set { _proxyHost = value; }
+ }
+
+ /// <summary>
+ /// Gets or sets port used to connect to proxy server.
+ /// </summary>
+ public int ProxyPort
+ {
+ get { return _proxyPort; }
+ set { _proxyPort = value; }
+ }
+
+ /// <summary>
+ /// Gets String representing the name of the proxy.
+ /// </summary>
+ /// <remarks>This property will always return the value 'SOCKS4'</remarks>
+ virtual public string ProxyName
+ {
+ get { return PROXY_NAME; }
+ }
+
+ /// <summary>
+ /// Gets or sets proxy user identification information.
+ /// </summary>
+ public string ProxyUserId
+ {
+ get { return _proxyUserId; }
+ set { _proxyUserId = value; }
+ }
+
+ /// <summary>
+ /// Gets or sets the TcpClient object.
+ /// This property can be set prior to executing CreateConnection to use an existing TcpClient connection.
+ /// </summary>
+ public TcpClient TcpClient
+ {
+ get { return _tcpClient; }
+ set { _tcpClient = value; }
+ }
+
+ /// <summary>
+ /// Creates a TCP connection to the destination host through the proxy server
+ /// host.
+ /// </summary>
+ /// <param name="destinationHost">Destination host name or IP address of the destination server.</param>
+ /// <param name="destinationPort">Port number to connect to on the destination server.</param>
+ /// <returns>
+ /// Returns an open TcpClient object that can be used normally to communicate
+ /// with the destination server
+ /// </returns>
+ /// <remarks>
+ /// This method creates a connection to the proxy server and instructs the proxy server
+ /// to make a pass through connection to the specified destination host on the specified
+ /// port.
+ /// </remarks>
+ public TcpClient CreateConnection(string destinationHost, int destinationPort)
+ {
+ if (String.IsNullOrEmpty(destinationHost))
+ throw new ArgumentNullException("destinationHost");
+
+ if (destinationPort <= 0 || destinationPort > 65535)
+ throw new ArgumentOutOfRangeException("destinationPort", "port must be greater than zero and less than 65535");
+
+ try
+ {
+ // if we have no connection, create one
+ if (_tcpClient == null)
+ {
+ if (String.IsNullOrEmpty(_proxyHost))
+ throw new ProxyException("ProxyHost property must contain a value.");
+
+ if (_proxyPort <= 0 || _proxyPort > 65535)
+ throw new ProxyException("ProxyPort value must be greater than zero and less than 65535");
+
+ // create new tcp client object to the proxy server
+ _tcpClient = new TcpClient();
+
+ // attempt to open the connection
+ _tcpClient.Connect(_proxyHost, _proxyPort);
+ }
+
+ // send connection command to proxy host for the specified destination host and port
+ SendCommand(_tcpClient.GetStream(), SOCKS4_CMD_CONNECT, destinationHost, destinationPort, _proxyUserId);
+
+ // return the open proxied tcp client object to the caller for normal use
+ return _tcpClient;
+ }
+ catch (Exception ex)
+ {
+ throw new ProxyException(String.Format(CultureInfo.InvariantCulture, "Connection to proxy host {0} on port {1} failed.", Utils.GetHost(_tcpClient), Utils.GetPort(_tcpClient)), ex);
+ }
+ }
+
+
+ /// <summary>
+ /// Sends a command to the proxy server.
+ /// </summary>
+ /// <param name="proxy">Proxy server data stream.</param>
+ /// <param name="command">Proxy byte command to execute.</param>
+ /// <param name="destinationHost">Destination host name or IP address.</param>
+ /// <param name="destinationPort">Destination port number</param>
+ /// <param name="userId">IDENTD user ID value.</param>
+ internal virtual void SendCommand(NetworkStream proxy, byte command, string destinationHost, int destinationPort, string userId)
+ {
+ // PROXY SERVER REQUEST
+ // The client connects to the SOCKS server and sends a CONNECT request when
+ // it wants to establish a connection to an application server. The client
+ // includes in the request packet the IP address and the port number of the
+ // destination host, and userid, in the following format.
+ //
+ // +----+----+----+----+----+----+----+----+----+----+....+----+
+ // | VN | CD | DSTPORT | DSTIP | USERID |NULL|
+ // +----+----+----+----+----+----+----+----+----+----+....+----+
+ // # of bytes: 1 1 2 4 variable 1
+ //
+ // VN is the SOCKS protocol version number and should be 4. CD is the
+ // SOCKS command code and should be 1 for CONNECT request. NULL is a byte
+ // of all zero bits.
+
+ // userId needs to be a zero length string so that the GetBytes method
+ // works properly
+ if (userId == null)
+ userId = "";
+
+ byte[] destIp = GetIPAddressBytes(destinationHost);
+ byte[] destPort = GetDestinationPortBytes(destinationPort);
+ byte[] userIdBytes = ASCIIEncoding.ASCII.GetBytes(userId);
+ byte[] request = new byte[9 + userIdBytes.Length];
+
+ // set the bits on the request byte array
+ request[0] = SOCKS4_VERSION_NUMBER;
+ request[1] = command;
+ destPort.CopyTo(request, 2);
+ destIp.CopyTo(request, 4);
+ userIdBytes.CopyTo(request, 8);
+ request[8 + userIdBytes.Length] = 0x00; // null (byte with all zeros) terminator for userId
+
+ // send the connect request
+ proxy.Write(request, 0, request.Length);
+
+ // wait for the proxy server to respond
+ WaitForData(proxy);
+
+ // PROXY SERVER RESPONSE
+ // The SOCKS server checks to see whether such a request should be granted
+ // based on any combination of source IP address, destination IP address,
+ // destination port number, the userid, and information it may obtain by
+ // consulting IDENT, cf. RFC 1413. If the request is granted, the SOCKS
+ // server makes a connection to the specified port of the destination host.
+ // A reply packet is sent to the client when this connection is established,
+ // or when the request is rejected or the operation fails.
+ //
+ // +----+----+----+----+----+----+----+----+
+ // | VN | CD | DSTPORT | DSTIP |
+ // +----+----+----+----+----+----+----+----+
+ // # of bytes: 1 1 2 4
+ //
+ // VN is the version of the reply code and should be 0. CD is the result
+ // code with one of the following values:
+ //
+ // 90: request granted
+ // 91: request rejected or failed
+ // 92: request rejected becuase SOCKS server cannot connect to
+ // identd on the client
+ // 93: request rejected because the client program and identd
+ // report different user-ids
+ //
+ // The remaining fields are ignored.
+ //
+ // The SOCKS server closes its connection immediately after notifying
+ // the client of a failed or rejected request. For a successful request,
+ // the SOCKS server gets ready to relay traffic on both directions. This
+ // enables the client to do I/O on its connection as if it were directly
+ // connected to the application server.
+
+ // create an 8 byte response array
+ byte[] response = new byte[8];
+
+ // read the resonse from the network stream
+ proxy.Read(response, 0, 8);
+
+ // evaluate the reply code for an error condition
+ if (response[1] != SOCKS4_CMD_REPLY_REQUEST_GRANTED)
+ HandleProxyCommandError(response, destinationHost, destinationPort);
+ }
+
+ /// <summary>
+ /// Translate the host name or IP address to a byte array.
+ /// </summary>
+ /// <param name="destinationHost">Host name or IP address.</param>
+ /// <returns>Byte array representing IP address in bytes.</returns>
+ internal byte[] GetIPAddressBytes(string destinationHost)
+ {
+ IPAddress ipAddr = null;
+
+ // if the address doesn't parse then try to resolve with dns
+ if (!IPAddress.TryParse(destinationHost, out ipAddr))
+ {
+ try
+ {
+ ipAddr = Dns.GetHostEntry(destinationHost).AddressList[0];
+ }
+ catch (Exception ex)
+ {
+ throw new ProxyException(String.Format(CultureInfo.InvariantCulture, "A error occurred while attempting to DNS resolve the host name {0}.", destinationHost), ex);
+ }
+ }
+
+ // return address bytes
+ return ipAddr.GetAddressBytes();
+ }
+
+ /// <summary>
+ /// Translate the destination port value to a byte array.
+ /// </summary>
+ /// <param name="value">Destination port.</param>
+ /// <returns>Byte array representing an 16 bit port number as two bytes.</returns>
+ internal byte[] GetDestinationPortBytes(int value)
+ {
+ byte[] array = new byte[2];
+ array[0] = Convert.ToByte(value / 256);
+ array[1] = Convert.ToByte(value % 256);
+ return array;
+ }
+
+ /// <summary>
+ /// Receive a byte array from the proxy server and determine and handle and errors that may have occurred.
+ /// </summary>
+ /// <param name="response">Proxy server command response as a byte array.</param>
+ /// <param name="destinationHost">Destination host.</param>
+ /// <param name="destinationPort">Destination port number.</param>
+ internal void HandleProxyCommandError(byte[] response, string destinationHost, int destinationPort)
+ {
+
+ if (response == null)
+ throw new ArgumentNullException("response");
+
+ // extract the reply code
+ byte replyCode = response[1];
+
+ // extract the ip v4 address (4 bytes)
+ byte[] ipBytes = new byte[4];
+ for (int i = 0; i < 4; i++)
+ ipBytes[i] = response[i + 4];
+
+ // convert the ip address to an IPAddress object
+ IPAddress ipAddr = new IPAddress(ipBytes);
+
+ // extract the port number big endian (2 bytes)
+ byte[] portBytes = new byte[2];
+ portBytes[0] = response[3];
+ portBytes[1] = response[2];
+ Int16 port = BitConverter.ToInt16(portBytes, 0);
+
+ // translate the reply code error number to human readable text
+ string proxyErrorText;
+ switch (replyCode)
+ {
+ case SOCKS4_CMD_REPLY_REQUEST_REJECTED_OR_FAILED:
+ proxyErrorText = "connection request was rejected or failed";
+ break;
+ case SOCKS4_CMD_REPLY_REQUEST_REJECTED_CANNOT_CONNECT_TO_IDENTD:
+ proxyErrorText = "connection request was rejected because SOCKS destination cannot connect to identd on the client";
+ break;
+ case SOCKS4_CMD_REPLY_REQUEST_REJECTED_DIFFERENT_IDENTD:
+ proxyErrorText = "connection request rejected because the client program and identd report different user-ids";
+ break;
+ default:
+ proxyErrorText = String.Format(CultureInfo.InvariantCulture, "proxy client received an unknown reply with the code value '{0}' from the proxy destination", replyCode.ToString(CultureInfo.InvariantCulture));
+ break;
+ }
+
+ // build the exeception message string
+ string exceptionMsg = String.Format(CultureInfo.InvariantCulture, "The {0} concerning destination host {1} port number {2}. The destination reported the host as {3} port {4}.", proxyErrorText, destinationHost, destinationPort, ipAddr.ToString(), port.ToString(CultureInfo.InvariantCulture));
+
+ // throw a new application exception
+ throw new ProxyException(exceptionMsg);
+ }
+
+ internal void WaitForData(NetworkStream stream)
+ {
+ int sleepTime = 0;
+ while (!stream.DataAvailable)
+ {
+ Thread.Sleep(WAIT_FOR_DATA_INTERVAL);
+ sleepTime += WAIT_FOR_DATA_INTERVAL;
+ if (sleepTime > WAIT_FOR_DATA_TIMEOUT)
+ throw new ProxyException("A timeout while waiting for the proxy destination to respond.");
+ }
+ }
+
+
+#region "Async Methods"
+
+ private BackgroundWorker _asyncWorker;
+ private Exception _asyncException;
+ bool _asyncCancelled;
+
+ /// <summary>
+ /// Gets a value indicating whether an asynchronous operation is running.
+ /// </summary>
+ /// <remarks>Returns true if an asynchronous operation is running; otherwise, false.
+ /// </remarks>
+ public bool IsBusy
+ {
+ get { return _asyncWorker == null ? false : _asyncWorker.IsBusy; }
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether an asynchronous operation is cancelled.
+ /// </summary>
+ /// <remarks>Returns true if an asynchronous operation is cancelled; otherwise, false.
+ /// </remarks>
+ public bool IsAsyncCancelled
+ {
+ get { return _asyncCancelled; }
+ }
+
+ /// <summary>
+ /// Cancels any asychronous operation that is currently active.
+ /// </summary>
+ public void CancelAsync()
+ {
+ if (_asyncWorker != null && !_asyncWorker.CancellationPending && _asyncWorker.IsBusy)
+ {
+ _asyncCancelled = true;
+ _asyncWorker.CancelAsync();
+ }
+ }
+
+ private void CreateAsyncWorker()
+ {
+ if (_asyncWorker != null)
+ _asyncWorker.Dispose();
+ _asyncException = null;
+ _asyncWorker = null;
+ _asyncCancelled = false;
+ _asyncWorker = new BackgroundWorker();
+ }
+
+ /// <summary>
+ /// Event handler for CreateConnectionAsync method completed.
+ /// </summary>
+ public event EventHandler<CreateConnectionAsyncCompletedEventArgs> CreateConnectionAsyncCompleted;
+
+ /// <summary>
+ /// Asynchronously creates a remote TCP connection through a proxy server to the destination host on the destination port
+ /// using the supplied open TcpClient object with an open connection to proxy server.
+ /// </summary>
+ /// <param name="destinationHost">Destination host name or IP address.</param>
+ /// <param name="destinationPort">Port number to connect to on the destination host.</param>
+ /// <returns>
+ /// Returns TcpClient object that can be used normally to communicate
+ /// with the destination server.
+ /// </returns>
+ /// <remarks>
+ /// This instructs the proxy server to make a pass through connection to the specified destination host on the specified
+ /// port.
+ /// </remarks>
+ public void CreateConnectionAsync(string destinationHost, int destinationPort)
+ {
+ if (_asyncWorker != null && _asyncWorker.IsBusy)
+ throw new InvalidOperationException("The Socks4/4a object is already busy executing another asynchronous operation. You can only execute one asychronous method at a time.");
+
+ CreateAsyncWorker();
+ _asyncWorker.WorkerSupportsCancellation = true;
+ _asyncWorker.DoWork += new DoWorkEventHandler(CreateConnectionAsync_DoWork);
+ _asyncWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CreateConnectionAsync_RunWorkerCompleted);
+ Object[] args = new Object[2];
+ args[0] = destinationHost;
+ args[1] = destinationPort;
+ _asyncWorker.RunWorkerAsync(args);
+ }
+
+ private void CreateConnectionAsync_DoWork(object sender, DoWorkEventArgs e)
+ {
+ try
+ {
+ Object[] args = (Object[])e.Argument;
+ e.Result = CreateConnection((string)args[0], (int)args[1]);
+ }
+ catch (Exception ex)
+ {
+ _asyncException = ex;
+ }
+ }
+
+ private void CreateConnectionAsync_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ if (CreateConnectionAsyncCompleted != null)
+ CreateConnectionAsyncCompleted(this, new CreateConnectionAsyncCompletedEventArgs(_asyncException, _asyncCancelled, (TcpClient)e.Result));
+ }
+
+#endregion
+
+ }
+
+}
diff --git a/SmartIrc4net/src/StarkSoftProxy/Socks4aProxyClient.cs b/SmartIrc4net/src/StarkSoftProxy/Socks4aProxyClient.cs
new file mode 100644
index 0000000..6da23ee
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/Socks4aProxyClient.cs
@@ -0,0 +1,230 @@
+/*
+ * Authors: Benton Stark
+ *
+ * Copyright (c) 2007-2009 Starksoft, LLC (http://www.starksoft.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+using System;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+
+namespace Starksoft.Net.Proxy
+{
+ /// <summary>
+ /// Socks4a connection proxy class. This class implements the Socks4a standard proxy protocol
+ /// which is an extension of the Socks4 protocol
+ /// </summary>
+ /// <remarks>
+ /// In Socks version 4A if the client cannot resolve the destination host's domain name
+ /// to find its IP address the server will attempt to resolve it.
+ /// </remarks>
+ public class Socks4aProxyClient : Socks4ProxyClient
+ {
+ private const string PROXY_NAME = "SOCKS4a";
+
+ /// <summary>
+ /// Default constructor.
+ /// </summary>
+ public Socks4aProxyClient()
+ : base()
+ { }
+
+ /// <summary>
+ /// Creates a Socks4 proxy client object using the supplied TcpClient object connection.
+ /// </summary>
+ /// <param name="tcpClient">An open TcpClient object with an established connection.</param>
+ public Socks4aProxyClient(TcpClient tcpClient)
+ : base(tcpClient)
+ { }
+
+ /// <summary>
+ /// Create a Socks4a proxy client object. The default proxy port 1080 is used.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyUserId">Proxy user identification information for an IDENTD server.</param>
+ public Socks4aProxyClient(string proxyHost, string proxyUserId)
+ : base(proxyHost, proxyUserId)
+ { }
+
+ /// <summary>
+ /// Create a Socks4a proxy client object.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyPort">Port used to connect to proxy server.</param>
+ /// <param name="proxyUserId">Proxy user identification information.</param>
+ public Socks4aProxyClient(string proxyHost, int proxyPort, string proxyUserId)
+ : base(proxyHost, proxyPort, proxyUserId)
+ { }
+
+ /// <summary>
+ /// Create a Socks4 proxy client object. The default proxy port 1080 is used.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ public Socks4aProxyClient(string proxyHost) : base(proxyHost)
+ { }
+
+ /// <summary>
+ /// Create a Socks4a proxy client object.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyPort">Port used to connect to proxy server.</param>
+ public Socks4aProxyClient(string proxyHost, int proxyPort)
+ : base(proxyHost, proxyPort)
+ { }
+
+ /// <summary>
+ /// Gets String representing the name of the proxy.
+ /// </summary>
+ /// <remarks>This property will always return the value 'SOCKS4a'</remarks>
+ public override string ProxyName
+ {
+ get { return PROXY_NAME; }
+ }
+
+
+ /// <summary>
+ /// Sends a command to the proxy server.
+ /// </summary>
+ /// <param name="proxy">Proxy server data stream.</param>
+ /// <param name="command">Proxy byte command to execute.</param>
+ /// <param name="destinationHost">Destination host name or IP address.</param>
+ /// <param name="destinationPort">Destination port number</param>
+ /// <param name="userId">IDENTD user ID value.</param>
+ /// <remarks>
+ /// This method override the SendCommand message in the Sock4ProxyClient object. The override adds support for the
+ /// Socks4a extensions which allow the proxy client to optionally command the proxy server to resolve the
+ /// destination host IP address.
+ /// </remarks>
+ internal override void SendCommand(NetworkStream proxy, byte command, string destinationHost, int destinationPort, string userId)
+ {
+ // PROXY SERVER REQUEST
+ //Please read SOCKS4.protocol first for an description of the version 4
+ //protocol. This extension is intended to allow the use of SOCKS on hosts
+ //which are not capable of resolving all domain names.
+ //
+ //In version 4, the client sends the following packet to the SOCKS server
+ //to request a CONNECT or a BIND operation:
+ //
+ // +----+----+----+----+----+----+----+----+----+----+....+----+
+ // | VN | CD | DSTPORT | DSTIP | USERID |NULL|
+ // +----+----+----+----+----+----+----+----+----+----+....+----+
+ // # of bytes: 1 1 2 4 variable 1
+ //
+ //VN is the SOCKS protocol version number and should be 4. CD is the
+ //SOCKS command code and should be 1 for CONNECT or 2 for BIND. NULL
+ //is a byte of all zero bits.
+ //
+ //For version 4A, if the client cannot resolve the destination host's
+ //domain name to find its IP address, it should set the first three bytes
+ //of DSTIP to NULL and the last byte to a non-zero value. (This corresponds
+ //to IP address 0.0.0.x, with x nonzero. As decreed by IANA -- The
+ //Internet Assigned Numbers Authority -- such an address is inadmissible
+ //as a destination IP address and thus should never occur if the client
+ //can resolve the domain name.) Following the NULL byte terminating
+ //USERID, the client must sends the destination domain name and termiantes
+ //it with another NULL byte. This is used for both CONNECT and BIND requests.
+ //
+ //A server using protocol 4A must check the DSTIP in the request packet.
+ //If it represent address 0.0.0.x with nonzero x, the server must read
+ //in the domain name that the client sends in the packet. The server
+ //should resolve the domain name and make connection to the destination
+ //host if it can.
+ //
+ //SOCKSified sockd may pass domain names that it cannot resolve to
+ //the next-hop SOCKS server.
+
+ // userId needs to be a zero length string so that the GetBytes method
+ // works properly
+ if (userId == null)
+ userId = "";
+
+ byte[] destIp = {0,0,0,1}; // build the invalid ip address as specified in the 4a protocol
+ byte[] destPort = GetDestinationPortBytes(destinationPort);
+ byte[] userIdBytes = ASCIIEncoding.ASCII.GetBytes(userId);
+ byte[] hostBytes = ASCIIEncoding.ASCII.GetBytes(destinationHost);
+ byte[] request = new byte[10 + userIdBytes.Length + hostBytes.Length];
+
+ // set the bits on the request byte array
+ request[0] = SOCKS4_VERSION_NUMBER;
+ request[1] = command;
+ destPort.CopyTo(request, 2);
+ destIp.CopyTo(request, 4);
+ userIdBytes.CopyTo(request, 8); // copy the userid to the request byte array
+ request[8 + userIdBytes.Length] = 0x00; // null (byte with all zeros) terminator for userId
+ hostBytes.CopyTo(request, 9 + userIdBytes.Length); // copy the host name to the request byte array
+ request[9 + userIdBytes.Length + hostBytes.Length] = 0x00; // null (byte with all zeros) terminator for userId
+
+ // send the connect request
+ proxy.Write(request, 0, request.Length);
+
+ // wait for the proxy server to send a response
+ base.WaitForData(proxy);
+
+ // PROXY SERVER RESPONSE
+ // The SOCKS server checks to see whether such a request should be granted
+ // based on any combination of source IP address, destination IP address,
+ // destination port number, the userid, and information it may obtain by
+ // consulting IDENT, cf. RFC 1413. If the request is granted, the SOCKS
+ // server makes a connection to the specified port of the destination host.
+ // A reply packet is sent to the client when this connection is established,
+ // or when the request is rejected or the operation fails.
+ //
+ // +----+----+----+----+----+----+----+----+
+ // | VN | CD | DSTPORT | DSTIP |
+ // +----+----+----+----+----+----+----+----+
+ // # of bytes: 1 1 2 4
+ //
+ // VN is the version of the reply code and should be 0. CD is the result
+ // code with one of the following values:
+ //
+ // 90: request granted
+ // 91: request rejected or failed
+ // 92: request rejected becuase SOCKS server cannot connect to
+ // identd on the client
+ // 93: request rejected because the client program and identd
+ // report different user-ids
+ //
+ // The remaining fields are ignored.
+ //
+ // The SOCKS server closes its connection immediately after notifying
+ // the client of a failed or rejected request. For a successful request,
+ // the SOCKS server gets ready to relay traffic on both directions. This
+ // enables the client to do I/O on its connection as if it were directly
+ // connected to the application server.
+
+ // create an 8 byte response array
+ byte[] response = new byte[8];
+
+ // read the resonse from the network stream
+ proxy.Read(response, 0, 8);
+
+ // evaluate the reply code for an error condition
+ if (response[1] != SOCKS4_CMD_REPLY_REQUEST_GRANTED)
+ HandleProxyCommandError(response, destinationHost, destinationPort);
+ }
+
+
+
+ }
+}
diff --git a/SmartIrc4net/src/StarkSoftProxy/Socks5ProxyClient.cs b/SmartIrc4net/src/StarkSoftProxy/Socks5ProxyClient.cs
new file mode 100644
index 0000000..9ad618a
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/Socks5ProxyClient.cs
@@ -0,0 +1,736 @@
+/*
+ * Authors: Benton Stark
+ *
+ * Copyright (c) 2007-2009 Starksoft, LLC (http://www.starksoft.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+using System;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.Globalization;
+using System.ComponentModel;
+
+namespace Starksoft.Net.Proxy
+{
+ /// <summary>
+ /// Socks5 connection proxy class. This class implements the Socks5 standard proxy protocol.
+ /// </summary>
+ /// <remarks>
+ /// This implementation supports TCP proxy connections with a Socks v5 server.
+ /// </remarks>
+ public class Socks5ProxyClient : IProxyClient
+ {
+ private string _proxyHost;
+ private int _proxyPort;
+ private string _proxyUserName;
+ private string _proxyPassword;
+ private SocksAuthentication _proxyAuthMethod;
+ private TcpClient _tcpClient;
+
+ private const string PROXY_NAME = "SOCKS5";
+ private const int SOCKS5_DEFAULT_PORT = 1080;
+
+ private const byte SOCKS5_VERSION_NUMBER = 5;
+ private const byte SOCKS5_RESERVED = 0x00;
+ private const byte SOCKS5_AUTH_NUMBER_OF_AUTH_METHODS_SUPPORTED = 2;
+ private const byte SOCKS5_AUTH_METHOD_NO_AUTHENTICATION_REQUIRED = 0x00;
+ private const byte SOCKS5_AUTH_METHOD_GSSAPI = 0x01;
+ private const byte SOCKS5_AUTH_METHOD_USERNAME_PASSWORD = 0x02;
+ private const byte SOCKS5_AUTH_METHOD_IANA_ASSIGNED_RANGE_BEGIN = 0x03;
+ private const byte SOCKS5_AUTH_METHOD_IANA_ASSIGNED_RANGE_END = 0x7f;
+ private const byte SOCKS5_AUTH_METHOD_RESERVED_RANGE_BEGIN = 0x80;
+ private const byte SOCKS5_AUTH_METHOD_RESERVED_RANGE_END = 0xfe;
+ private const byte SOCKS5_AUTH_METHOD_REPLY_NO_ACCEPTABLE_METHODS = 0xff;
+ private const byte SOCKS5_CMD_CONNECT = 0x01;
+ private const byte SOCKS5_CMD_BIND = 0x02;
+ private const byte SOCKS5_CMD_UDP_ASSOCIATE = 0x03;
+ private const byte SOCKS5_CMD_REPLY_SUCCEEDED = 0x00;
+ private const byte SOCKS5_CMD_REPLY_GENERAL_SOCKS_SERVER_FAILURE = 0x01;
+ private const byte SOCKS5_CMD_REPLY_CONNECTION_NOT_ALLOWED_BY_RULESET = 0x02;
+ private const byte SOCKS5_CMD_REPLY_NETWORK_UNREACHABLE = 0x03;
+ private const byte SOCKS5_CMD_REPLY_HOST_UNREACHABLE = 0x04;
+ private const byte SOCKS5_CMD_REPLY_CONNECTION_REFUSED = 0x05;
+ private const byte SOCKS5_CMD_REPLY_TTL_EXPIRED = 0x06;
+ private const byte SOCKS5_CMD_REPLY_COMMAND_NOT_SUPPORTED = 0x07;
+ private const byte SOCKS5_CMD_REPLY_ADDRESS_TYPE_NOT_SUPPORTED = 0x08;
+ private const byte SOCKS5_ADDRTYPE_IPV4 = 0x01;
+ private const byte SOCKS5_ADDRTYPE_DOMAIN_NAME = 0x03;
+ private const byte SOCKS5_ADDRTYPE_IPV6 = 0x04;
+
+ /// <summary>
+ /// Authentication itemType.
+ /// </summary>
+ private enum SocksAuthentication
+ {
+ /// <summary>
+ /// No authentication used.
+ /// </summary>
+ None,
+ /// <summary>
+ /// Username and password authentication.
+ /// </summary>
+ UsernamePassword
+ }
+
+ /// <summary>
+ /// Create a Socks5 proxy client object.
+ /// </summary>
+ public Socks5ProxyClient() { }
+
+ /// <summary>
+ /// Creates a Socks5 proxy client object using the supplied TcpClient object connection.
+ /// </summary>
+ /// <param name="tcpClient">A TcpClient connection object.</param>
+ public Socks5ProxyClient(TcpClient tcpClient)
+ {
+ if (tcpClient == null)
+ throw new ArgumentNullException("tcpClient");
+
+ _tcpClient = tcpClient;
+ }
+
+ /// <summary>
+ /// Create a Socks5 proxy client object. The default proxy port 1080 is used.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ public Socks5ProxyClient(string proxyHost)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ _proxyHost = proxyHost;
+ _proxyPort = SOCKS5_DEFAULT_PORT;
+ }
+
+ /// <summary>
+ /// Create a Socks5 proxy client object.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyPort">Port used to connect to proxy server.</param>
+ public Socks5ProxyClient(string proxyHost, int proxyPort)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ if (proxyPort <= 0 || proxyPort > 65535)
+ throw new ArgumentOutOfRangeException("proxyPort", "port must be greater than zero and less than 65535");
+
+ _proxyHost = proxyHost;
+ _proxyPort = proxyPort;
+ }
+
+ /// <summary>
+ /// Create a Socks5 proxy client object. The default proxy port 1080 is used.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyUserName">Proxy authentication user name.</param>
+ /// <param name="proxyPassword">Proxy authentication password.</param>
+ public Socks5ProxyClient(string proxyHost, string proxyUserName, string proxyPassword)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ if (proxyUserName == null)
+ throw new ArgumentNullException("proxyUserName");
+
+ if (proxyPassword == null)
+ throw new ArgumentNullException("proxyPassword");
+
+ _proxyHost = proxyHost;
+ _proxyPort = SOCKS5_DEFAULT_PORT;
+ _proxyUserName = proxyUserName;
+ _proxyPassword = proxyPassword;
+ }
+
+ /// <summary>
+ /// Create a Socks5 proxy client object.
+ /// </summary>
+ /// <param name="proxyHost">Host name or IP address of the proxy server.</param>
+ /// <param name="proxyPort">Port used to connect to proxy server.</param>
+ /// <param name="proxyUserName">Proxy authentication user name.</param>
+ /// <param name="proxyPassword">Proxy authentication password.</param>
+ public Socks5ProxyClient(string proxyHost, int proxyPort, string proxyUserName, string proxyPassword)
+ {
+ if (String.IsNullOrEmpty(proxyHost))
+ throw new ArgumentNullException("proxyHost");
+
+ if (proxyPort <= 0 || proxyPort > 65535)
+ throw new ArgumentOutOfRangeException("proxyPort", "port must be greater than zero and less than 65535");
+
+ if (proxyUserName == null)
+ throw new ArgumentNullException("proxyUserName");
+
+ if (proxyPassword == null)
+ throw new ArgumentNullException("proxyPassword");
+
+ _proxyHost = proxyHost;
+ _proxyPort = proxyPort;
+ _proxyUserName = proxyUserName;
+ _proxyPassword = proxyPassword;
+ }
+
+ /// <summary>
+ /// Gets or sets host name or IP address of the proxy server.
+ /// </summary>
+ public string ProxyHost
+ {
+ get { return _proxyHost; }
+ set { _proxyHost = value; }
+ }
+
+ /// <summary>
+ /// Gets or sets port used to connect to proxy server.
+ /// </summary>
+ public int ProxyPort
+ {
+ get { return _proxyPort; }
+ set { _proxyPort = value; }
+ }
+
+ /// <summary>
+ /// Gets String representing the name of the proxy.
+ /// </summary>
+ /// <remarks>This property will always return the value 'SOCKS5'</remarks>
+ public string ProxyName
+ {
+ get { return PROXY_NAME; }
+ }
+
+ /// <summary>
+ /// Gets or sets proxy authentication user name.
+ /// </summary>
+ public string ProxyUserName
+ {
+ get { return _proxyUserName; }
+ set { _proxyUserName = value; }
+ }
+
+ /// <summary>
+ /// Gets or sets proxy authentication password.
+ /// </summary>
+ public string ProxyPassword
+ {
+ get { return _proxyPassword; }
+ set { _proxyPassword = value; }
+ }
+
+ /// <summary>
+ /// Gets or sets the TcpClient object.
+ /// This property can be set prior to executing CreateConnection to use an existing TcpClient connection.
+ /// </summary>
+ public TcpClient TcpClient
+ {
+ get { return _tcpClient; }
+ set { _tcpClient = value; }
+ }
+
+ /// <summary>
+ /// Creates a remote TCP connection through a proxy server to the destination host on the destination port.
+ /// </summary>
+ /// <param name="destinationHost">Destination host name or IP address of the destination server.</param>
+ /// <param name="destinationPort">Port number to connect to on the destination host.</param>
+ /// <returns>
+ /// Returns an open TcpClient object that can be used normally to communicate
+ /// with the destination server
+ /// </returns>
+ /// <remarks>
+ /// This method creates a connection to the proxy server and instructs the proxy server
+ /// to make a pass through connection to the specified destination host on the specified
+ /// port.
+ /// </remarks>
+ public TcpClient CreateConnection(string destinationHost, int destinationPort)
+ {
+ if (String.IsNullOrEmpty(destinationHost))
+ throw new ArgumentNullException("destinationHost");
+
+ if (destinationPort <= 0 || destinationPort > 65535)
+ throw new ArgumentOutOfRangeException("destinationPort", "port must be greater than zero and less than 65535");
+
+ try
+ {
+ // if we have no connection, create one
+ if (_tcpClient == null)
+ {
+ if (String.IsNullOrEmpty(_proxyHost))
+ throw new ProxyException("ProxyHost property must contain a value.");
+
+ if (_proxyPort <= 0 || _proxyPort > 65535)
+ throw new ProxyException("ProxyPort value must be greater than zero and less than 65535");
+
+ // create new tcp client object to the proxy server
+ _tcpClient = new TcpClient();
+
+ // attempt to open the connection
+ _tcpClient.Connect(_proxyHost, _proxyPort);
+ }
+
+ // determine which authentication method the client would like to use
+ DetermineClientAuthMethod();
+
+ // negotiate which authentication methods are supported / accepted by the server
+ NegotiateServerAuthMethod();
+
+ // send a connect command to the proxy server for destination host and port
+ SendCommand(SOCKS5_CMD_CONNECT, destinationHost, destinationPort);
+
+ // return the open proxied tcp client object to the caller for normal use
+ return _tcpClient;
+ }
+ catch (Exception ex)
+ {
+ throw new ProxyException(String.Format(CultureInfo.InvariantCulture, "Connection to proxy host {0} on port {1} failed.", Utils.GetHost(_tcpClient), Utils.GetPort(_tcpClient)), ex);
+ }
+ }
+
+
+ private void DetermineClientAuthMethod()
+ {
+ // set the authentication itemType used based on values inputed by the user
+ if (_proxyUserName != null && _proxyPassword != null)
+ _proxyAuthMethod = SocksAuthentication.UsernamePassword;
+ else
+ _proxyAuthMethod = SocksAuthentication.None;
+ }
+
+ private void NegotiateServerAuthMethod()
+ {
+ // get a reference to the network stream
+ NetworkStream stream = _tcpClient.GetStream();
+
+ // SERVER AUTHENTICATION REQUEST
+ // The client connects to the server, and sends a version
+ // identifier/method selection message:
+ //
+ // +----+----------+----------+
+ // |VER | NMETHODS | METHODS |
+ // +----+----------+----------+
+ // | 1 | 1 | 1 to 255 |
+ // +----+----------+----------+
+
+ byte[] authRequest = new byte[4];
+ authRequest[0] = SOCKS5_VERSION_NUMBER;
+ authRequest[1] = SOCKS5_AUTH_NUMBER_OF_AUTH_METHODS_SUPPORTED;
+ authRequest[2] = SOCKS5_AUTH_METHOD_NO_AUTHENTICATION_REQUIRED;
+ authRequest[3] = SOCKS5_AUTH_METHOD_USERNAME_PASSWORD;
+
+ // send the request to the server specifying authentication types supported by the client.
+ stream.Write(authRequest, 0, authRequest.Length);
+
+ // SERVER AUTHENTICATION RESPONSE
+ // The server selects from one of the methods given in METHODS, and
+ // sends a METHOD selection message:
+ //
+ // +----+--------+
+ // |VER | METHOD |
+ // +----+--------+
+ // | 1 | 1 |
+ // +----+--------+
+ //
+ // If the selected METHOD is X'FF', none of the methods listed by the
+ // client are acceptable, and the client MUST close the connection.
+ //
+ // The values currently defined for METHOD are:
+ // * X'00' NO AUTHENTICATION REQUIRED
+ // * X'01' GSSAPI
+ // * X'02' USERNAME/PASSWORD
+ // * X'03' to X'7F' IANA ASSIGNED
+ // * X'80' to X'FE' RESERVED FOR PRIVATE METHODS
+ // * X'FF' NO ACCEPTABLE METHODS
+
+ // receive the server response
+ byte[] response = new byte[2];
+ stream.Read(response, 0, response.Length);
+
+ // the first byte contains the socks version number (e.g. 5)
+ // the second byte contains the auth method acceptable to the proxy server
+ byte acceptedAuthMethod = response[1];
+
+ // if the server does not accept any of our supported authenication methods then throw an error
+ if (acceptedAuthMethod == SOCKS5_AUTH_METHOD_REPLY_NO_ACCEPTABLE_METHODS)
+ {
+ _tcpClient.Close();
+ throw new ProxyException("The proxy destination does not accept the supported proxy client authentication methods.");
+ }
+
+ // if the server accepts a username and password authentication and none is provided by the user then throw an error
+ if (acceptedAuthMethod == SOCKS5_AUTH_METHOD_USERNAME_PASSWORD && _proxyAuthMethod == SocksAuthentication.None)
+ {
+ _tcpClient.Close();
+ throw new ProxyException("The proxy destination requires a username and password for authentication.");
+ }
+
+ if (acceptedAuthMethod == SOCKS5_AUTH_METHOD_USERNAME_PASSWORD)
+ {
+
+ // USERNAME / PASSWORD SERVER REQUEST
+ // Once the SOCKS V5 server has started, and the client has selected the
+ // Username/Password Authentication protocol, the Username/Password
+ // subnegotiation begins. This begins with the client producing a
+ // Username/Password request:
+ //
+ // +----+------+----------+------+----------+
+ // |VER | ULEN | UNAME | PLEN | PASSWD |
+ // +----+------+----------+------+----------+
+ // | 1 | 1 | 1 to 255 | 1 | 1 to 255 |
+ // +----+------+----------+------+----------+
+
+ byte[] credentials = new byte[_proxyUserName.Length + _proxyPassword.Length + 3];
+ credentials[0] = SOCKS5_VERSION_NUMBER;
+ credentials[1] = (byte)_proxyUserName.Length;
+ Array.Copy(ASCIIEncoding.ASCII.GetBytes(_proxyUserName), 0, credentials, 2, _proxyUserName.Length);
+ credentials[_proxyUserName.Length + 2] = (byte)_proxyPassword.Length;
+ Array.Copy(ASCIIEncoding.ASCII.GetBytes(_proxyPassword), 0, credentials, _proxyUserName.Length + 3, _proxyPassword.Length);
+
+ // USERNAME / PASSWORD SERVER RESPONSE
+ // The server verifies the supplied UNAME and PASSWD, and sends the
+ // following response:
+ //
+ // +----+--------+
+ // |VER | STATUS |
+ // +----+--------+
+ // | 1 | 1 |
+ // +----+--------+
+ //
+ // A STATUS field of X'00' indicates success. If the server returns a
+ // `failure' (STATUS value other than X'00') status, it MUST close the
+ // connection.
+ }
+ }
+
+ private byte GetDestAddressType(string host)
+ {
+ IPAddress ipAddr = null;
+
+ bool result = IPAddress.TryParse(host, out ipAddr);
+
+ if (!result)
+ return SOCKS5_ADDRTYPE_DOMAIN_NAME;
+
+ switch (ipAddr.AddressFamily)
+ {
+ case AddressFamily.InterNetwork:
+ return SOCKS5_ADDRTYPE_IPV4;
+ case AddressFamily.InterNetworkV6:
+ return SOCKS5_ADDRTYPE_IPV6;
+ default:
+ throw new ProxyException(String.Format(CultureInfo.InvariantCulture, "The host addess {0} of type '{1}' is not a supported address type. The supported types are InterNetwork and InterNetworkV6.", host, Enum.GetName(typeof(AddressFamily), ipAddr.AddressFamily)));
+ }
+
+ }
+
+ private byte[] GetDestAddressBytes(byte addressType, string host)
+ {
+ switch (addressType)
+ {
+ case SOCKS5_ADDRTYPE_IPV4:
+ case SOCKS5_ADDRTYPE_IPV6:
+ return IPAddress.Parse(host).GetAddressBytes();
+ case SOCKS5_ADDRTYPE_DOMAIN_NAME:
+ // create a byte array to hold the host name bytes plus one byte to store the length
+ byte[] bytes = new byte[host.Length + 1];
+ // if the address field contains a fully-qualified domain name. The first
+ // octet of the address field contains the number of octets of name that
+ // follow, there is no terminating NUL octet.
+ bytes[0] = Convert.ToByte(host.Length);
+ Encoding.ASCII.GetBytes(host).CopyTo(bytes, 1);
+ return bytes;
+ default:
+ return null;
+ }
+ }
+
+ private byte[] GetDestPortBytes(int value)
+ {
+ byte[] array = new byte[2];
+ array[0] = Convert.ToByte(value / 256);
+ array[1] = Convert.ToByte(value % 256);
+ return array;
+ }
+
+ private void SendCommand(byte command, string destinationHost, int destinationPort)
+ {
+ NetworkStream stream = _tcpClient.GetStream();
+
+ byte addressType = GetDestAddressType(destinationHost);
+ byte[] destAddr = GetDestAddressBytes(addressType, destinationHost);
+ byte[] destPort = GetDestPortBytes(destinationPort);
+
+ // The connection request is made up of 6 bytes plus the
+ // length of the variable address byte array
+ //
+ // +----+-----+-------+------+----------+----------+
+ // |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
+ // +----+-----+-------+------+----------+----------+
+ // | 1 | 1 | X'00' | 1 | Variable | 2 |
+ // +----+-----+-------+------+----------+----------+
+ //
+ // * VER protocol version: X'05'
+ // * CMD
+ // * CONNECT X'01'
+ // * BIND X'02'
+ // * UDP ASSOCIATE X'03'
+ // * RSV RESERVED
+ // * ATYP address itemType of following address
+ // * IP V4 address: X'01'
+ // * DOMAINNAME: X'03'
+ // * IP V6 address: X'04'
+ // * DST.ADDR desired destination address
+ // * DST.PORT desired destination port in network octet order
+
+ byte[] request = new byte[4 + destAddr.Length + 2];
+ request[0] = SOCKS5_VERSION_NUMBER;
+ request[1] = command;
+ request[2] = SOCKS5_RESERVED;
+ request[3] = addressType;
+ destAddr.CopyTo(request, 4);
+ destPort.CopyTo(request, 4 + destAddr.Length);
+
+ // send connect request.
+ stream.Write(request, 0, request.Length);
+
+ // PROXY SERVER RESPONSE
+ // +----+-----+-------+------+----------+----------+
+ // |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
+ // +----+-----+-------+------+----------+----------+
+ // | 1 | 1 | X'00' | 1 | Variable | 2 |
+ // +----+-----+-------+------+----------+----------+
+ //
+ // * VER protocol version: X'05'
+ // * REP Reply field:
+ // * X'00' succeeded
+ // * X'01' general SOCKS server failure
+ // * X'02' connection not allowed by ruleset
+ // * X'03' Network unreachable
+ // * X'04' Host unreachable
+ // * X'05' Connection refused
+ // * X'06' TTL expired
+ // * X'07' Command not supported
+ // * X'08' Address itemType not supported
+ // * X'09' to X'FF' unassigned
+ //* RSV RESERVED
+ //* ATYP address itemType of following address
+
+ byte[] response = new byte[255];
+
+ // read proxy server response
+ stream.Read(response, 0, response.Length);
+
+ byte replyCode = response[1];
+
+ // evaluate the reply code for an error condition
+ if (replyCode != SOCKS5_CMD_REPLY_SUCCEEDED)
+ HandleProxyCommandError(response, destinationHost, destinationPort );
+ }
+
+ private void HandleProxyCommandError(byte[] response, string destinationHost, int destinationPort)
+ {
+ string proxyErrorText;
+ byte replyCode = response[1];
+ byte addrType = response[3];
+ string addr = "";
+ Int16 port = 0;
+
+ switch (addrType)
+ {
+ case SOCKS5_ADDRTYPE_DOMAIN_NAME:
+ int addrLen = Convert.ToInt32(response[4]);
+ byte[] addrBytes = new byte[addrLen];
+ for (int i = 0; i < addrLen; i++)
+ addrBytes[i] = response[i + 5];
+ addr = System.Text.ASCIIEncoding.ASCII.GetString(addrBytes);
+ byte[] portBytesDomain = new byte[2];
+ portBytesDomain[0] = response[6 + addrLen];
+ portBytesDomain[1] = response[5 + addrLen];
+ port = BitConverter.ToInt16(portBytesDomain, 0);
+ break;
+
+ case SOCKS5_ADDRTYPE_IPV4:
+ byte[] ipv4Bytes = new byte[4];
+ for (int i = 0; i < 4; i++)
+ ipv4Bytes[i] = response[i + 4];
+ IPAddress ipv4 = new IPAddress(ipv4Bytes);
+ addr = ipv4.ToString();
+ byte[] portBytesIpv4 = new byte[2];
+ portBytesIpv4[0] = response[9];
+ portBytesIpv4[1] = response[8];
+ port = BitConverter.ToInt16(portBytesIpv4, 0);
+ break;
+
+ case SOCKS5_ADDRTYPE_IPV6:
+ byte[] ipv6Bytes = new byte[16];
+ for (int i = 0; i < 16; i++)
+ ipv6Bytes[i] = response[i + 4];
+ IPAddress ipv6 = new IPAddress(ipv6Bytes);
+ addr = ipv6.ToString();
+ byte[] portBytesIpv6 = new byte[2];
+ portBytesIpv6[0] = response[21];
+ portBytesIpv6[1] = response[20];
+ port = BitConverter.ToInt16(portBytesIpv6, 0);
+ break;
+ }
+
+
+ switch (replyCode)
+ {
+ case SOCKS5_CMD_REPLY_GENERAL_SOCKS_SERVER_FAILURE:
+ proxyErrorText = "a general socks destination failure occurred";
+ break;
+ case SOCKS5_CMD_REPLY_CONNECTION_NOT_ALLOWED_BY_RULESET:
+ proxyErrorText = "the connection is not allowed by proxy destination rule set";
+ break;
+ case SOCKS5_CMD_REPLY_NETWORK_UNREACHABLE:
+ proxyErrorText = "the network was unreachable";
+ break;
+ case SOCKS5_CMD_REPLY_HOST_UNREACHABLE:
+ proxyErrorText = "the host was unreachable";
+ break;
+ case SOCKS5_CMD_REPLY_CONNECTION_REFUSED:
+ proxyErrorText = "the connection was refused by the remote network";
+ break;
+ case SOCKS5_CMD_REPLY_TTL_EXPIRED:
+ proxyErrorText = "the time to live (TTL) has expired";
+ break;
+ case SOCKS5_CMD_REPLY_COMMAND_NOT_SUPPORTED:
+ proxyErrorText = "the command issued by the proxy client is not supported by the proxy destination";
+ break;
+ case SOCKS5_CMD_REPLY_ADDRESS_TYPE_NOT_SUPPORTED:
+ proxyErrorText = "the address type specified is not supported";
+ break;
+ default:
+ proxyErrorText = String.Format(CultureInfo.InvariantCulture, "that an unknown reply with the code value '{0}' was received by the destination", replyCode.ToString(CultureInfo.InvariantCulture));
+ break;
+ }
+ string exceptionMsg = String.Format(CultureInfo.InvariantCulture, "The {0} concerning destination host {1} port number {2}. The destination reported the host as {3} port {4}.", proxyErrorText, destinationHost, destinationPort, addr, port.ToString(CultureInfo.InvariantCulture));
+
+ throw new ProxyException(exceptionMsg);
+
+ }
+
+
+#region "Async Methods"
+
+ private BackgroundWorker _asyncWorker;
+ private Exception _asyncException;
+ bool _asyncCancelled;
+
+ /// <summary>
+ /// Gets a value indicating whether an asynchronous operation is running.
+ /// </summary>
+ /// <remarks>Returns true if an asynchronous operation is running; otherwise, false.
+ /// </remarks>
+ public bool IsBusy
+ {
+ get { return _asyncWorker == null ? false : _asyncWorker.IsBusy; }
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether an asynchronous operation is cancelled.
+ /// </summary>
+ /// <remarks>Returns true if an asynchronous operation is cancelled; otherwise, false.
+ /// </remarks>
+ public bool IsAsyncCancelled
+ {
+ get { return _asyncCancelled; }
+ }
+
+ /// <summary>
+ /// Cancels any asychronous operation that is currently active.
+ /// </summary>
+ public void CancelAsync()
+ {
+ if (_asyncWorker != null && !_asyncWorker.CancellationPending && _asyncWorker.IsBusy)
+ {
+ _asyncCancelled = true;
+ _asyncWorker.CancelAsync();
+ }
+ }
+
+ private void CreateAsyncWorker()
+ {
+ if (_asyncWorker != null)
+ _asyncWorker.Dispose();
+ _asyncException = null;
+ _asyncWorker = null;
+ _asyncCancelled = false;
+ _asyncWorker = new BackgroundWorker();
+ }
+
+ /// <summary>
+ /// Event handler for CreateConnectionAsync method completed.
+ /// </summary>
+ public event EventHandler<CreateConnectionAsyncCompletedEventArgs> CreateConnectionAsyncCompleted;
+
+
+ /// <summary>
+ /// Asynchronously creates a remote TCP connection through a proxy server to the destination host on the destination port.
+ /// </summary>
+ /// <param name="destinationHost">Destination host name or IP address.</param>
+ /// <param name="destinationPort">Port number to connect to on the destination host.</param>
+ /// <returns>
+ /// Returns TcpClient object that can be used normally to communicate
+ /// with the destination server.
+ /// </returns>
+ /// <remarks>
+ /// This method instructs the proxy server
+ /// to make a pass through connection to the specified destination host on the specified
+ /// port.
+ /// </remarks>
+ public void CreateConnectionAsync(string destinationHost, int destinationPort)
+ {
+ if (_asyncWorker != null && _asyncWorker.IsBusy)
+ throw new InvalidOperationException("The Socks4 object is already busy executing another asynchronous operation. You can only execute one asychronous method at a time.");
+
+ CreateAsyncWorker();
+ _asyncWorker.WorkerSupportsCancellation = true;
+ _asyncWorker.DoWork += new DoWorkEventHandler(CreateConnectionAsync_DoWork);
+ _asyncWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CreateConnectionAsync_RunWorkerCompleted);
+ Object[] args = new Object[2];
+ args[0] = destinationHost;
+ args[1] = destinationPort;
+ _asyncWorker.RunWorkerAsync(args);
+ }
+
+ private void CreateConnectionAsync_DoWork(object sender, DoWorkEventArgs e)
+ {
+ try
+ {
+ Object[] args = (Object[])e.Argument;
+ e.Result = CreateConnection((string)args[0], (int)args[1]);
+ }
+ catch (Exception ex)
+ {
+ _asyncException = ex;
+ }
+ }
+
+ private void CreateConnectionAsync_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ if (CreateConnectionAsyncCompleted != null)
+ CreateConnectionAsyncCompleted(this, new CreateConnectionAsyncCompletedEventArgs(_asyncException, _asyncCancelled, (TcpClient)e.Result));
+ }
+
+
+
+#endregion
+ }
+}
diff --git a/SmartIrc4net/src/StarkSoftProxy/Utils.cs b/SmartIrc4net/src/StarkSoftProxy/Utils.cs
new file mode 100644
index 0000000..bdee40c
--- /dev/null
+++ b/SmartIrc4net/src/StarkSoftProxy/Utils.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Text;
+using System.Globalization;
+using System.Net.Sockets;
+
+namespace Starksoft.Net.Proxy
+{
+ internal static class Utils
+ {
+ internal static string GetHost(TcpClient client)
+ {
+ if (client == null)
+ throw new ArgumentNullException("client");
+
+ string host = "";
+ try
+ {
+ host = ((System.Net.IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
+ }
+ catch
+ { };
+
+ return host;
+ }
+
+ internal static string GetPort(TcpClient client)
+ {
+ if (client == null)
+ throw new ArgumentNullException("client");
+
+ string port = "";
+ try
+ {
+ port = ((System.Net.IPEndPoint)client.Client.RemoteEndPoint).Port.ToString(CultureInfo.InvariantCulture);
+ }
+ catch
+ { };
+
+ return port;
+ }
+
+ }
+}
diff --git a/SparkleLib/AssemblyInfo.cs b/SparkleLib/AssemblyInfo.cs
new file mode 100644
index 0000000..ebfcf8f
--- /dev/null
+++ b/SparkleLib/AssemblyInfo.cs
@@ -0,0 +1,11 @@
+/*
+ * AssemblyInfo.cs
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyVersion("0.2.1")]
+[assembly: AssemblyTitle ("SparkleShare")]
diff --git a/SparkleLib/AssemblyInfo.cs.in b/SparkleLib/AssemblyInfo.cs.in
new file mode 100644
index 0000000..11ce20d
--- /dev/null
+++ b/SparkleLib/AssemblyInfo.cs.in
@@ -0,0 +1,11 @@
+/*
+ * AssemblyInfo.cs
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyVersion("@ASM_VERSION@")]
+[assembly: AssemblyTitle ("SparkleShare")]
diff --git a/SparkleLib/Defines.cs b/SparkleLib/Defines.cs
new file mode 100644
index 0000000..6ffd15f
--- /dev/null
+++ b/SparkleLib/Defines.cs
@@ -0,0 +1,30 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+using System;
+
+namespace SparkleLib {
+
+ public class Defines {
+
+ public const string VERSION = "0.2.1";
+ public const string LOCALE_DIR = "/usr/share/locale";
+ public const string DATAROOTDIR = "/usr/share";
+ public const string GETTEXT_PACKAGE = "sparkleshare";
+ public const string PREFIX = "/usr";
+ }
+}
+
diff --git a/SparkleLib/Defines.cs.in b/SparkleLib/Defines.cs.in
new file mode 100644
index 0000000..bee485a
--- /dev/null
+++ b/SparkleLib/Defines.cs.in
@@ -0,0 +1,30 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+using System;
+
+namespace SparkleLib {
+
+ public class Defines {
+
+ public const string VERSION = "@VERSION@";
+ public const string LOCALE_DIR = "@prefix@/share/locale";
+ public const string DATAROOTDIR = "@expanded_datadir@";
+ public const string GETTEXT_PACKAGE = "@GETTEXT_PACKAGE@";
+ public const string PREFIX = "@prefix@";
+ }
+}
+
diff --git a/SparkleLib/Git/SparkleFetcherGit.cs b/SparkleLib/Git/SparkleFetcherGit.cs
new file mode 100644
index 0000000..49ada7a
--- /dev/null
+++ b/SparkleLib/Git/SparkleFetcherGit.cs
@@ -0,0 +1,195 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Xml;
+
+namespace SparkleLib {
+
+ // Sets up a fetcher that can get remote folders
+ public class SparkleFetcherGit : SparkleFetcherBase {
+
+ public SparkleFetcherGit (string server, string remote_folder, string target_folder) :
+ base (server, remote_folder, target_folder)
+ {
+ remote_folder = remote_folder.Trim ("/".ToCharArray ());
+
+ // Gitorious formatting
+ if (server.Contains ("gitorious.org")) {
+ server = "ssh://git@gitorious.org";
+
+ if (!remote_folder.EndsWith (".git")) {
+
+ if (!remote_folder.Contains ("/"))
+ remote_folder = remote_folder + "/" + remote_folder;
+
+ remote_folder += ".git";
+ }
+
+ } else if (server.Contains ("github.com")) {
+ server = "ssh://git@github.com";
+
+ } else if (server.Contains ("gnome.org")) {
+ server = "ssh://git@gnome.org/git";
+
+ } else {
+ server = server.TrimEnd ("/".ToCharArray ());
+
+ if (server.StartsWith ("ssh://"))
+ server = server.Substring (6);
+
+ if (!server.Contains ("@"))
+ server = "git@" + server;
+
+ server = "ssh://" + server;
+ }
+
+ base.target_folder = target_folder;
+ base.remote_url = server + "/" + remote_folder;
+ }
+
+
+ public override bool Fetch ()
+ {
+ SparkleGit git = new SparkleGit (SparklePaths.SparkleTmpPath,
+ "clone \"" + base.remote_url + "\" " + "\"" + base.target_folder + "\"");
+
+ git.Start ();
+ git.WaitForExit ();
+
+ SparkleHelpers.DebugInfo ("Git", "Exit code " + git.ExitCode.ToString ());
+
+ if (git.ExitCode != 0) {
+ return false;
+ } else {
+ InstallConfiguration ();
+ InstallExcludeRules ();
+ return true;
+ }
+ }
+
+
+ // Install the user's name and email and some config into
+ // the newly cloned repository
+ private void InstallConfiguration ()
+ {
+ string global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config.xml");
+
+ if (!File.Exists (global_config_file_path))
+ return;
+
+ string repo_config_file_path = SparkleHelpers.CombineMore (base.target_folder, ".git", "config");
+ string config = String.Join (Environment.NewLine, File.ReadAllLines (repo_config_file_path));
+
+ // Be case sensitive explicitly to work on Mac
+ config = config.Replace ("ignorecase = true", "ignorecase = false");
+
+ // Ignore permission changes
+ config = config.Replace ("filemode = true", "filemode = false");
+
+ // Add user info
+ string n = Environment.NewLine;
+ XmlDocument xml = new XmlDocument();
+ xml.Load (global_config_file_path);
+
+ XmlNode node_name = xml.SelectSingleNode ("//user/name/text()");
+ XmlNode node_email = xml.SelectSingleNode ("//user/email/text()");
+
+ // TODO: just use commands instead of messing with the config file
+ config += n +
+ "[user]" + n +
+ "\tname = " + node_name.Value + n +
+ "\temail = " + node_email.Value + n;
+
+ // Write the config to the file
+ TextWriter writer = new StreamWriter (repo_config_file_path);
+ writer.WriteLine (config);
+ writer.Close ();
+
+ SparkleHelpers.DebugInfo ("Config", "Added configuration to '" + repo_config_file_path + "'");
+ }
+
+
+ // Add a .gitignore file to the repo
+ private void InstallExcludeRules ()
+ {
+ string exlude_rules_file_path = SparkleHelpers.CombineMore (
+ this.target_folder, ".git", "info", "exclude");
+
+ TextWriter writer = new StreamWriter (exlude_rules_file_path);
+
+ // gedit and emacs
+ writer.WriteLine ("*~");
+
+ // vi(m)
+ writer.WriteLine (".*.sw[a-z]");
+ writer.WriteLine ("*.un~");
+ writer.WriteLine ("*.swp");
+ writer.WriteLine ("*.swo");
+
+ // KDE
+ writer.WriteLine (".directory");
+
+ // Mac OSX
+ writer.WriteLine (".DS_Store");
+ writer.WriteLine ("Icon?");
+ writer.WriteLine ("._*");
+ writer.WriteLine (".Spotlight-V100");
+ writer.WriteLine (".Trashes");
+
+ // Mac OSX
+ writer.WriteLine ("*(Autosaved).graffle");
+
+ // Windows
+ writer.WriteLine ("Thumbs.db");
+ writer.WriteLine ("Desktop.ini");
+
+ // CVS
+ writer.WriteLine ("*/CVS/*");
+ writer.WriteLine (".cvsignore");
+ writer.WriteLine ("*/.cvsignore");
+
+ // Subversion
+ writer.WriteLine ("/.svn/*");
+ writer.WriteLine ("*/.svn/*");
+
+ writer.Close ();
+ }
+ }
+
+ public class SparkleGit : Process {
+
+ public SparkleGit (string path, string args) : base ()
+ {
+ EnableRaisingEvents = true;
+ StartInfo.FileName = SparkleBackend.DefaultBackend.Path;
+ StartInfo.Arguments = args;
+ StartInfo.RedirectStandardOutput = true;
+ StartInfo.UseShellExecute = false;
+ StartInfo.WorkingDirectory = path;
+ }
+
+
+ new public void Start ()
+ {
+ SparkleHelpers.DebugInfo ("Cmd", StartInfo.FileName + " " + StartInfo.Arguments);
+ base.Start ();
+ }
+ }
+}
diff --git a/SparkleLib/Git/SparkleRepoGit.cs b/SparkleLib/Git/SparkleRepoGit.cs
new file mode 100644
index 0000000..3a611ca
--- /dev/null
+++ b/SparkleLib/Git/SparkleRepoGit.cs
@@ -0,0 +1,556 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace SparkleLib {
+
+ public class SparkleRepoGit : SparkleRepoBase {
+
+ public SparkleRepoGit (string path, SparkleBackend backend) :
+ base (path, backend) { }
+
+
+ public override string Identifier {
+ get {
+
+ // Because git computes a hash based on content,
+ // author, and timestamp; it is unique enough to
+ // use the hash of the first commit as an identifier
+ // for our folder
+ SparkleGit git = new SparkleGit (LocalPath, "rev-list --reverse HEAD");
+ git.Start ();
+
+ // Reading the standard output HAS to go before
+ // WaitForExit, or it will hang forever on output > 4096 bytes
+ string output = git.StandardOutput.ReadToEnd ();
+ git.WaitForExit ();
+
+ return output.Substring (0, 40);
+ }
+ }
+
+
+ public override string CurrentRevision {
+ get {
+
+ // Remove stale rebase-apply files because it
+ // makes the method return the wrong hashes.
+ string rebase_apply_file = SparkleHelpers.CombineMore (LocalPath, ".git", "rebase-apply");
+ if (File.Exists (rebase_apply_file))
+ File.Delete (rebase_apply_file);
+
+ SparkleGit git = new SparkleGit (LocalPath, "log -1 --format=%H");
+ git.Start ();
+ git.WaitForExit ();
+
+ if (git.ExitCode == 0) {
+ string output = git.StandardOutput.ReadToEnd ();
+ return output.TrimEnd ();
+ } else {
+ return null;
+ }
+ }
+ }
+
+
+ public override bool CheckForRemoteChanges ()
+ {
+ SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Checking for remote changes...");
+ SparkleGit git = new SparkleGit (LocalPath, "ls-remote origin master");
+
+ git.Start ();
+ git.WaitForExit ();
+
+ if (git.ExitCode != 0)
+ return false;
+
+ string remote_revision = git.StandardOutput.ReadToEnd ().TrimEnd ();
+
+ if (!remote_revision.StartsWith (CurrentRevision)) {
+ SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Remote changes found. (" + remote_revision + ")");
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ public override bool SyncUp ()
+ {
+ Add ();
+
+ string message = FormatCommitMessage ();
+ Commit (message);
+
+ SparkleGit git = new SparkleGit (LocalPath, "push origin master");
+
+ git.Start ();
+ git.WaitForExit ();
+
+ if (git.ExitCode == 0)
+ return true;
+ else
+ return false;
+ }
+
+
+ public override bool SyncDown ()
+ {
+ SparkleGit git = new SparkleGit (LocalPath, "fetch -v origin master");
+
+ git.Start ();
+ git.WaitForExit ();
+
+ if (git.ExitCode == 0) {
+ Rebase ();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ public override bool AnyDifferences {
+ get {
+ SparkleGit git = new SparkleGit (LocalPath, "status --porcelain");
+ git.Start ();
+ git.WaitForExit ();
+
+ string output = git.StandardOutput.ReadToEnd ().TrimEnd ();
+ string [] lines = output.Split ("\n".ToCharArray ());
+
+ foreach (string line in lines) {
+ if (line.Length > 1 && !line [1].Equals (" "))
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+
+ public override bool HasUnsyncedChanges {
+ get {
+ string unsynced_file_path = SparkleHelpers.CombineMore (LocalPath,
+ ".git", "has_unsynced_changes");
+
+ return File.Exists (unsynced_file_path);
+ }
+
+ set {
+ string unsynced_file_path = SparkleHelpers.CombineMore (LocalPath,
+ ".git", "has_unsynced_changes");
+
+ if (value) {
+ if (!File.Exists (unsynced_file_path))
+ File.Create (unsynced_file_path);
+ } else {
+ File.Delete (unsynced_file_path);
+ }
+ }
+ }
+
+
+ // Stages the made changes
+ private void Add ()
+ {
+ SparkleGit git = new SparkleGit (LocalPath, "add --all");
+ git.Start ();
+ git.WaitForExit ();
+
+ SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Changes staged");
+ }
+
+
+ // Removes unneeded objects
+ private void CollectGarbage ()
+ {
+ SparkleGit git = new SparkleGit (LocalPath, "gc");
+ git.Start ();
+ git.WaitForExit ();
+
+ SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Garbage collected.");
+ }
+
+
+ // Commits the made changes
+ private void Commit (string message)
+ {
+ if (!AnyDifferences)
+ return;
+
+ SparkleGit git = new SparkleGit (LocalPath, "commit -m '" + message + "'");
+ git.Start ();
+ git.WaitForExit ();
+
+ SparkleHelpers.DebugInfo ("Commit", "[" + Name + "] " + message);
+
+ // Collect garbage pseudo-randomly. Turn off for
+ // now: too resource heavy.
+ // if (DateTime.Now.Second % 10 == 0)
+ // CollectGarbage ();
+ }
+
+
+ // Merges the fetched changes
+ private void Rebase ()
+ {
+ DisableWatching ();
+
+ if (AnyDifferences) {
+ Add ();
+
+ string commit_message = FormatCommitMessage ();
+ Commit (commit_message);
+ }
+
+ SparkleGit git = new SparkleGit (LocalPath, "rebase -v FETCH_HEAD");
+
+ git.Start ();
+ git.WaitForExit ();
+
+ if (git.ExitCode != 0) {
+ SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Conflict detected. Trying to get out...");
+
+ while (AnyDifferences)
+ ResolveConflict ();
+
+ SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Conflict resolved.");
+
+ OnConflictResolved ();
+ }
+
+ EnableWatching ();
+ }
+
+
+ private void ResolveConflict ()
+ {
+ // This is al list of conflict status codes that Git uses, their
+ // meaning, and how SparkleShare should handle them.
+ //
+ // DD unmerged, both deleted -> Do nothing
+ // AU unmerged, added by us -> Use theirs, save ours as a timestamped copy
+ // UD unmerged, deleted by them -> Use ours
+ // UA unmerged, added by them -> Use theirs, save ours as a timestamped copy
+ // DU unmerged, deleted by us -> Use theirs
+ // AA unmerged, both added -> Use theirs, save ours as a timestamped copy
+ // UU unmerged, both modified -> Use theirs, save ours as a timestamped copy
+ //
+ // Note that a rebase merge works by replaying each commit from the working branch on
+ // top of the upstream branch. Because of this, when a merge conflict happens the
+ // side reported as 'ours' is the so-far rebased series, starting with upstream,
+ // and 'theirs' is the working branch. In other words, the sides are swapped.
+ //
+ // So: 'ours' means the 'server's version' and 'theirs' means the 'local version'
+
+ SparkleGit git_status = new SparkleGit (LocalPath, "status --porcelain");
+ git_status.Start ();
+ git_status.WaitForExit ();
+
+ string output = git_status.StandardOutput.ReadToEnd ().TrimEnd ();
+ string [] lines = output.Split ("\n".ToCharArray ());
+
+ foreach (string line in lines) {
+ string conflicting_path = line.Substring (3);
+ conflicting_path = conflicting_path.Trim ("\"".ToCharArray ());
+
+ SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Conflict type: " + line);
+
+ // Both the local and server version have been modified
+ if (line.StartsWith ("UU") || line.StartsWith ("AA") ||
+ line.StartsWith ("AU") || line.StartsWith ("UA")) {
+
+ // Recover local version
+ SparkleGit git_theirs = new SparkleGit (LocalPath,
+ "checkout --theirs \"" + conflicting_path + "\"");
+ git_theirs.Start ();
+ git_theirs.WaitForExit ();
+
+ // Append a timestamp to local version
+ string timestamp = DateTime.Now.ToString ("HH:mm MMM d");
+ string their_path = conflicting_path + " (" + SparkleConfig.DefaultConfig.UserName + ", " + timestamp + ")";
+ string abs_conflicting_path = Path.Combine (LocalPath, conflicting_path);
+ string abs_their_path = Path.Combine (LocalPath, their_path);
+
+ File.Move (abs_conflicting_path, abs_their_path);
+
+ // Recover server version
+ SparkleGit git_ours = new SparkleGit (LocalPath,
+ "checkout --ours \"" + conflicting_path + "\"");
+ git_ours.Start ();
+ git_ours.WaitForExit ();
+
+ Add ();
+
+ SparkleGit git_rebase_continue = new SparkleGit (LocalPath, "rebase --continue");
+ git_rebase_continue.Start ();
+ git_rebase_continue.WaitForExit ();
+ }
+
+ // The local version has been modified, but the server version was removed
+ if (line.StartsWith ("DU")) {
+
+ // The modified local version is already in the
+ // checkout, so it just needs to be added.
+ //
+ // We need to specifically mention the file, so
+ // we can't reuse the Add () method
+ SparkleGit git_add = new SparkleGit (LocalPath,
+ "add " + conflicting_path);
+ git_add.Start ();
+ git_add.WaitForExit ();
+
+ SparkleGit git_rebase_continue = new SparkleGit (LocalPath, "rebase --continue");
+ git_rebase_continue.Start ();
+ git_rebase_continue.WaitForExit ();
+ }
+
+ // The server version has been modified, but the local version was removed
+ if (line.StartsWith ("UD")) {
+
+ // We can just skip here, the server version is
+ // already in the checkout
+ SparkleGit git_rebase_skip = new SparkleGit (LocalPath, "rebase --skip");
+ git_rebase_skip.Start ();
+ git_rebase_skip.WaitForExit ();
+ }
+ }
+ }
+
+
+ // Returns a list of the latest change sets
+ // TODO: Method needs to be made a lot faster
+ public override List <SparkleChangeSet> GetChangeSets (int count)
+ {
+ if (count < 1)
+ count = 30;
+
+ List <SparkleChangeSet> change_sets = new List <SparkleChangeSet> ();
+
+ SparkleGit git_log = new SparkleGit (LocalPath, "log -" + count + " --raw -M --date=iso");
+ Console.OutputEncoding = System.Text.Encoding.Unicode;
+ git_log.Start ();
+
+ // Reading the standard output HAS to go before
+ // WaitForExit, or it will hang forever on output > 4096 bytes
+ string output = git_log.StandardOutput.ReadToEnd ();
+ git_log.WaitForExit ();
+
+ string [] lines = output.Split ("\n".ToCharArray ());
+ List <string> entries = new List <string> ();
+
+ int j = 0;
+ string entry = "", last_entry = "";
+ foreach (string line in lines) {
+ if (line.StartsWith ("commit") && j > 0) {
+ entries.Add (entry);
+ entry = "";
+ }
+
+ entry += line + "\n";
+ j++;
+
+ last_entry = entry;
+ }
+
+ entries.Add (last_entry);
+
+ Regex merge_regex = new Regex (@"commit ([a-z0-9]{40})\n" +
+ "Merge: .+ .+\n" +
+ "Author: (.+) <(.+)>\n" +
+ "Date: ([0-9]{4})-([0-9]{2})-([0-9]{2}) " +
+ "([0-9]{2}):([0-9]{2}):([0-9]{2}) .([0-9]{4})\n" +
+ "*", RegexOptions.Compiled);
+
+ Regex non_merge_regex = new Regex (@"commit ([a-z0-9]{40})\n" +
+ "Author: (.+) <(.+)>\n" +
+ "Date: ([0-9]{4})-([0-9]{2})-([0-9]{2}) " +
+ "([0-9]{2}):([0-9]{2}):([0-9]{2}) (.[0-9]{4})\n" +
+ "*", RegexOptions.Compiled);
+
+ // TODO: Need to optimise for speed
+ foreach (string log_entry in entries) {
+ Regex regex;
+ bool is_merge_commit = false;
+
+ if (log_entry.Contains ("\nMerge: ")) {
+ regex = merge_regex;
+ is_merge_commit = true;
+ } else {
+ regex = non_merge_regex;
+ }
+
+ Match match = regex.Match (log_entry);
+
+ if (match.Success) {
+ SparkleChangeSet change_set = new SparkleChangeSet ();
+
+ change_set.Revision = match.Groups [1].Value;
+ change_set.UserName = match.Groups [2].Value;
+ change_set.UserEmail = match.Groups [3].Value;
+ change_set.IsMerge = is_merge_commit;
+
+
+ change_set.Timestamp = new DateTime (int.Parse (match.Groups [4].Value),
+ int.Parse (match.Groups [5].Value), int.Parse (match.Groups [6].Value),
+ int.Parse (match.Groups [7].Value), int.Parse (match.Groups [8].Value),
+ int.Parse (match.Groups [9].Value));
+
+
+ string time_zone = match.Groups [10].Value;
+ int our_offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours;
+ int their_offset = int.Parse (time_zone.Substring (1, 2));
+
+ // Convert their timestamp to UTC timezone
+ if (their_offset > 0)
+ change_set.Timestamp = change_set.Timestamp.AddHours (their_offset * -1);
+ else
+ change_set.Timestamp = change_set.Timestamp.AddHours (their_offset);
+
+ // Convert the UTC timestamp into our timezone
+ if (our_offset > 0)
+ change_set.Timestamp = change_set.Timestamp.AddHours (our_offset);
+ else
+ change_set.Timestamp = change_set.Timestamp.AddHours (our_offset * -1);
+
+
+ string [] entry_lines = log_entry.Split ("\n".ToCharArray ());
+
+ foreach (string entry_line in entry_lines) {
+ if (entry_line.StartsWith (":")) {
+
+ string change_type = entry_line [37].ToString ();
+ string file_path = entry_line.Substring (39);
+ string to_file_path;
+
+ if (change_type.Equals ("A")) {
+ change_set.Added.Add (file_path);
+ } else if (change_type.Equals ("M")) {
+ change_set.Edited.Add (file_path);
+ } else if (change_type.Equals ("D")) {
+ change_set.Deleted.Add (file_path);
+ } else if (change_type.Equals ("R")) {
+ int tab_pos = entry_line.LastIndexOf ("\t");
+ file_path = entry_line.Substring (42, tab_pos - 42);
+ to_file_path = entry_line.Substring (tab_pos + 1);
+
+ change_set.MovedFrom.Add (file_path);
+ change_set.MovedTo.Add (to_file_path);
+ }
+ }
+ }
+
+ change_sets.Add (change_set);
+ }
+ }
+
+ return change_sets;
+ }
+
+
+ // Creates a pretty commit message based on what has changed
+ private string FormatCommitMessage ()
+ {
+ List<string> Added = new List<string> ();
+ List<string> Modified = new List<string> ();
+ List<string> Removed = new List<string> ();
+ string file_name = "";
+ string message = "";
+
+ SparkleGit git_status = new SparkleGit (LocalPath, "status --porcelain");
+ git_status.Start ();
+
+ // Reading the standard output HAS to go before
+ // WaitForExit, or it will hang forever on output > 4096 bytes
+ string output = git_status.StandardOutput.ReadToEnd ().Trim ("\n".ToCharArray ());
+ git_status.WaitForExit ();
+
+ string [] lines = output.Split ("\n".ToCharArray ());
+ foreach (string line in lines) {
+ if (line.StartsWith ("A"))
+ Added.Add (line.Substring (3));
+ else if (line.StartsWith ("M"))
+ Modified.Add (line.Substring (3));
+ else if (line.StartsWith ("D"))
+ Removed.Add (line.Substring (3));
+ else if (line.StartsWith ("R")) {
+ Removed.Add (line.Substring (3, (line.IndexOf (" -> ") - 3)));
+ Added.Add (line.Substring (line.IndexOf (" -> ") + 4));
+ }
+ }
+
+ int count = 0;
+ int max_count = 20;
+
+ string n = Environment.NewLine;
+
+ foreach (string added in Added) {
+ file_name = added.Trim ("\"".ToCharArray ());
+ message += "+ ‘" + file_name + "’" + n;
+
+ count++;
+ if (count == max_count)
+ return message + "...";
+ }
+
+ foreach (string modified in Modified) {
+ file_name = modified.Trim ("\"".ToCharArray ());
+ message += "/ ‘" + file_name + "’" + n;
+
+ count++;
+ if (count == max_count)
+ return message + "...";
+ }
+
+ foreach (string removed in Removed) {
+ file_name = removed.Trim ("\"".ToCharArray ());
+ message += "- ‘" + file_name + "’" + n;
+
+ count++;
+ if (count == max_count)
+ return message + "..." + n;
+ }
+
+ return message.TrimEnd ();
+ }
+
+
+ public override void CreateInitialChangeSet ()
+ {
+ base.CreateInitialChangeSet ();
+ Add ();
+
+ string message = FormatCommitMessage ();
+ Commit (message);
+ }
+
+
+ public override bool UsesNotificationCenter
+ {
+ get {
+ string file_path = SparkleHelpers.CombineMore (LocalPath, ".git", "disable_notification_center");
+ return !File.Exists (file_path);
+ }
+ }
+ }
+}
diff --git a/SparkleLib/Hg/SparkleFetcherHg.cs b/SparkleLib/Hg/SparkleFetcherHg.cs
new file mode 100644
index 0000000..d89a324
--- /dev/null
+++ b/SparkleLib/Hg/SparkleFetcherHg.cs
@@ -0,0 +1,172 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Xml;
+
+namespace SparkleLib {
+
+ // Sets up a fetcher that can get remote folders
+ public class SparkleFetcherHg : SparkleFetcherBase {
+
+ public SparkleFetcherHg (string server, string remote_folder, string target_folder) :
+ base (server, remote_folder, target_folder) { }
+
+
+ public override bool Fetch ()
+ {
+ SparkleHg hg = new SparkleHg (SparklePaths.SparkleTmpPath,
+ "clone \"" + base.remote_url + "\" " + "\"" + base.target_folder + "\"");
+
+ hg.Start ();
+ hg.WaitForExit ();
+
+ SparkleHelpers.DebugInfo ("Hg", "Exit code " + hg.ExitCode.ToString ());
+
+ if (hg.ExitCode != 0) {
+ return false;
+ } else {
+ InstallConfiguration ();
+ InstallExcludeRules ();
+ return true;
+ }
+ }
+
+
+ // Install the user's name and email and some config into
+ // the newly cloned repository
+ private void InstallConfiguration ()
+ {
+ string global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config.xml");
+
+ if (!File.Exists (global_config_file_path))
+ return;
+
+ string repo_config_file_path = SparkleHelpers.CombineMore (base.target_folder, ".hg", "hgrc");
+ string config = String.Join (Environment.NewLine, File.ReadAllLines (repo_config_file_path));
+
+ // Add user info
+ string n = Environment.NewLine;
+ XmlDocument xml = new XmlDocument();
+ xml.Load (global_config_file_path);
+
+ XmlNode node_name = xml.SelectSingleNode ("//user/name/text()");
+ XmlNode node_email = xml.SelectSingleNode ("//user/email/text()");
+
+ // TODO this ignore duplicate names (FolderName (2))
+ string ignore_file_path = base.target_folder.Replace (SparklePaths.SparkleTmpPath,
+ SparklePaths.SparklePath);
+
+ ignore_file_path = SparkleHelpers.CombineMore (ignore_file_path, ".hg", "hgignore");
+
+ config += n +
+ "[ui]" + n +
+ "username = " + node_name.Value + " <" + node_email.Value + ">" + n +
+ "ignore = " + ignore_file_path + n;
+
+ // Write the config to the file
+ TextWriter writer = new StreamWriter (repo_config_file_path);
+ writer.WriteLine (config);
+ writer.Close ();
+
+ string style_file_path = SparkleHelpers.CombineMore (base.target_folder, ".hg", "log.style");
+
+ string style = "changeset = \"{file_mods}{file_adds}{file_dels}\"" + n +
+ "file_add = \"A {file_add}\\n\"" + n +
+ "file_mod = \"M {file_mod}\\n\"" + n +
+ "file_del = \"D {file_del}\\n\"" + n;
+
+ writer = new StreamWriter (style_file_path);
+ writer.WriteLine (style);
+ writer.Close ();
+
+ SparkleHelpers.DebugInfo ("Config", "Added configuration to '" + repo_config_file_path + "'");
+ }
+
+
+ // Add a .gitignore file to the repo
+ private void InstallExcludeRules ()
+ {
+ string exlude_rules_file_path = SparkleHelpers.CombineMore (
+ this.target_folder, ".hg", "hgignore");
+
+ TextWriter writer = new StreamWriter (exlude_rules_file_path);
+
+ writer.WriteLine ("syntax: glob");
+
+ // gedit and emacs
+ writer.WriteLine ("*~");
+
+ // vi(m)
+ writer.WriteLine (".*.sw[a-z]");
+ writer.WriteLine ("*.un~");
+ writer.WriteLine ("*.swp");
+ writer.WriteLine ("*.swo");
+
+ // KDE
+ writer.WriteLine (".directory");
+
+ // Mac OSX
+ writer.WriteLine (".DS_Store");
+ writer.WriteLine ("Icon?");
+ writer.WriteLine ("._*");
+ writer.WriteLine (".Spotlight-V100");
+ writer.WriteLine (".Trashes");
+
+ // Mac OSX
+ writer.WriteLine ("*(Autosaved).graffle");
+
+ // Windows
+ writer.WriteLine ("Thumbs.db");
+ writer.WriteLine ("Desktop.ini");
+
+ // CVS
+ writer.WriteLine ("*/CVS/*");
+ writer.WriteLine (".cvsignore");
+ writer.WriteLine ("*/.cvsignore");
+
+ // Subversion
+ writer.WriteLine ("/.svn/*");
+ writer.WriteLine ("*/.svn/*");
+
+ writer.Close ();
+ }
+ }
+
+
+ public class SparkleHg : Process {
+
+ public SparkleHg (string path, string args) : base ()
+ {
+ EnableRaisingEvents = true;
+ StartInfo.FileName = "/opt/local/bin/hg";
+ StartInfo.Arguments = args;
+ StartInfo.RedirectStandardOutput = true;
+ StartInfo.UseShellExecute = false;
+ StartInfo.WorkingDirectory = path;
+ }
+
+
+ new public void Start ()
+ {
+ SparkleHelpers.DebugInfo ("Cmd", StartInfo.FileName + " " + StartInfo.Arguments);
+ base.Start ();
+ }
+ }
+}
diff --git a/SparkleLib/Hg/SparkleRepoHg.cs b/SparkleLib/Hg/SparkleRepoHg.cs
new file mode 100644
index 0000000..149c9f8
--- /dev/null
+++ b/SparkleLib/Hg/SparkleRepoHg.cs
@@ -0,0 +1,319 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace SparkleLib {
+
+ public class SparkleRepoHg : SparkleRepoBase {
+
+ public SparkleRepoHg (string path, SparkleBackend backend) :
+ base (path, backend) { }
+
+
+ public override string Identifier {
+ get {
+ SparkleHg hg = new SparkleHg (LocalPath, "log -r : --limit 1 --template \"{node}\"");
+ hg.Start ();
+ hg.WaitForExit ();
+
+ return hg.StandardOutput.ReadToEnd ();
+ }
+ }
+
+
+ public override string CurrentRevision {
+ get {
+ SparkleHg hg = new SparkleHg (LocalPath, "log --limit 1 --template \"{node}\"");
+ hg.Start ();
+ hg.WaitForExit ();
+
+ string hash = hg.StandardOutput.ReadToEnd ().Trim ();
+ if (hash.Length > 0)
+ return hash;
+ else
+ return null;
+ }
+ }
+
+
+ public override bool CheckForRemoteChanges ()
+ {
+ return true; // Mercurial doesn't have a way to check for the remote hash
+ }
+
+
+ public override bool SyncUp ()
+ {
+ Add ();
+
+ string message = FormatCommitMessage ();
+ Commit (message);
+
+ SparkleHg hg = new SparkleHg (LocalPath, "push");
+
+ hg.Start ();
+ hg.WaitForExit ();
+
+ if (hg.ExitCode == 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ public override bool SyncDown ()
+ {
+ SparkleHg hg = new SparkleHg (LocalPath, "pull");
+
+ hg.Start ();
+ hg.WaitForExit ();
+
+ if (hg.ExitCode == 0) {
+ Merge ();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ public override bool AnyDifferences {
+ get {
+ SparkleHg hg = new SparkleHg (LocalPath, "status");
+ hg.Start ();
+ hg.WaitForExit ();
+
+ string output = hg.StandardOutput.ReadToEnd ().TrimEnd ();
+ string [] lines = output.Split ("\n".ToCharArray ());
+
+ foreach (string line in lines) {
+ if (line.Length > 1 && !line [1].Equals (" "))
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+
+ public override bool HasUnsyncedChanges {
+ get {
+ string unsynced_file_path = SparkleHelpers.CombineMore (LocalPath,
+ ".hg", "has_unsynced_changes");
+
+ return File.Exists (unsynced_file_path);
+ }
+
+ set {
+ string unsynced_file_path = SparkleHelpers.CombineMore (LocalPath,
+ ".hg", "has_unsynced_changes");
+
+ if (value) {
+ if (!File.Exists (unsynced_file_path))
+ File.Create (unsynced_file_path);
+ } else {
+ File.Delete (unsynced_file_path);
+ }
+ }
+ }
+
+
+ // Stages the made changes
+ private void Add ()
+ {
+ SparkleHg hg = new SparkleHg (LocalPath, "addremove --quiet");
+ hg.Start ();
+ hg.WaitForExit ();
+
+ SparkleHelpers.DebugInfo ("Hg", "[" + Name + "] Changes staged");
+ }
+
+
+ // Commits the made changes
+ private void Commit (string message)
+ {
+ if (!AnyDifferences)
+ return;
+
+ SparkleHg hg = new SparkleHg (LocalPath, "commit -m '" + message + "'");
+ hg.Start ();
+ hg.WaitForExit ();
+
+ SparkleHelpers.DebugInfo ("Commit", "[" + Name + "] " + message);
+ }
+
+
+ // Merges the fetched changes
+ private void Merge ()
+ {
+ DisableWatching ();
+
+ if (AnyDifferences) {
+ Add ();
+
+ string commit_message = FormatCommitMessage ();
+ Commit (commit_message);
+ }
+
+ SparkleHg hg = new SparkleHg (LocalPath, "update");
+
+ hg.Start ();
+ hg.WaitForExit ();
+
+ EnableWatching ();
+ }
+
+
+ // Returns a list of the latest change sets
+ // TODO: Method needs to be made a lot faster
+ public override List<SparkleChangeSet> GetChangeSets (int count)
+ {
+ if (count < 1)
+ count = 30;
+
+ List <SparkleChangeSet> change_sets = new List <SparkleChangeSet> ();
+
+ SparkleHg hg_log = new SparkleHg (LocalPath, "log --limit " + count + " --style changelog --verbose --stat");
+ Console.OutputEncoding = System.Text.Encoding.Unicode;
+ hg_log.Start ();
+
+ // Reading the standard output HAS to go before
+ // WaitForExit, or it will hang forever on output > 4096 bytes
+ string output = hg_log.StandardOutput.ReadToEnd ();
+ hg_log.WaitForExit ();
+
+ string [] lines = output.Split ("\n".ToCharArray ());
+ List <string> entries = new List <string> ();
+
+ int j = 0;
+ string entry = "", last_entry = "";
+ foreach (string line in lines) {
+ if (line.StartsWith ("2") && line.EndsWith (")") && j > 0) {
+ entries.Add (entry);
+ entry = "";
+ }
+
+ entry += line + "\n";
+ j++;
+
+ last_entry = entry;
+ }
+
+ entries.Add (last_entry);
+
+ Regex regex = new Regex (@"([0-9]{4})-([0-9]{2})-([0-9]{2}).*([0-9]{2}):([0-9]{2}).*.([0-9]{4})" +
+ "(.+)<(.+)>.*.([a-z0-9]{12})", RegexOptions.Compiled);
+
+ // TODO: Need to optimise for speed
+ foreach (string log_entry in entries) {
+
+ bool is_merge_commit = false;
+
+ Match match = regex.Match (log_entry);
+
+ if (!match.Success)
+ continue;
+
+ SparkleChangeSet change_set = new SparkleChangeSet () {
+ Revision = match.Groups [9].Value,
+ UserName = match.Groups [7].Value.Trim (),
+ UserEmail = match.Groups [8].Value,
+ IsMerge = is_merge_commit
+ };
+
+ change_set.Timestamp = new DateTime (int.Parse (match.Groups [1].Value),
+ int.Parse (match.Groups [2].Value), int.Parse (match.Groups [3].Value),
+ int.Parse (match.Groups [4].Value), int.Parse (match.Groups [5].Value), 0);
+
+ string [] entry_lines = log_entry.Split ("\n".ToCharArray ());
+
+ foreach (string entry_line in entry_lines) {
+ if (!entry_line.StartsWith ("\t* "))
+ continue;
+
+ if (entry_line.EndsWith ("new file.")) {
+ string files = entry_line.Substring (3, entry_line.Length - 13);
+ string [] added_files = files.Split (",".ToCharArray ());
+
+ foreach (string added_file in added_files) {
+ string file = added_file.TrimEnd (": ".ToCharArray ());
+ change_set.Added.Add (file);
+ }
+
+ } else if (entry_line.EndsWith ("deleted file.")) {
+ string files = entry_line.Substring (3, entry_line.Length - 17);
+ string [] deleted_files = files.Split (",".ToCharArray ());
+
+ foreach (string deleted_file in deleted_files) {
+ string file = deleted_file.TrimEnd (": ".ToCharArray ());
+ change_set.Deleted.Add (file);
+ }
+
+ } else if (!"".Equals (entry_line.Trim ())){
+ string files = entry_line.Substring (3);
+ files = files.TrimEnd (":".ToCharArray());
+ string [] edited_files = files.Split (",".ToCharArray ());
+
+ foreach (string edited_file in edited_files) {
+ if (!change_set.Added.Contains (edited_file) &&
+ !change_set.Deleted.Contains (edited_file)) {
+
+ change_set.Edited.Add (edited_file);
+ }
+ }
+ }
+ }
+
+ change_sets.Add (change_set);
+ }
+
+ return change_sets;
+ }
+
+
+ // Creates a pretty commit message based on what has changed
+ private string FormatCommitMessage () // TODO
+ {
+ return "SparkleShare Hg";
+ }
+
+
+ public override void CreateInitialChangeSet ()
+ {
+ base.CreateInitialChangeSet ();
+ Add ();
+
+ string message = FormatCommitMessage ();
+ Commit (message);
+ }
+
+
+ public override bool UsesNotificationCenter
+ {
+ get {
+ string file_path = SparkleHelpers.CombineMore (LocalPath, ".hg", "disable_notification_center");
+ return !File.Exists (file_path);
+ }
+ }
+ }
+}
diff --git a/SparkleLib/Makefile.am b/SparkleLib/Makefile.am
new file mode 100644
index 0000000..b29fa92
--- /dev/null
+++ b/SparkleLib/Makefile.am
@@ -0,0 +1,41 @@
+ASSEMBLY = SparkleLib
+TARGET = library
+
+LINK = $(REF_SPARKLELIB)
+
+
+SOURCES = \
+ Defines.cs \
+ Git/SparkleFetcherGit.cs \
+ Git/SparkleRepoGit.cs \
+ Hg/SparkleFetcherHg.cs \
+ Hg/SparkleRepoHg.cs \
+ Scp/SparkleFetcherScp.cs \
+ Scp/SparkleRepoScp.cs \
+ SparkleBackend.cs \
+ SparkleChangeSet.cs \
+ SparkleConfig.cs \
+ SparkleFetcherBase.cs \
+ SparkleHelpers.cs \
+ SparkleListenerBase.cs \
+ SparkleListenerIrc.cs \
+ SparkleOptions.cs \
+ SparklePaths.cs \
+ SparkleRepoBase.cs
+
+
+SMARTIRC4NET_FILES_EXPANDED = $(foreach file, $(SMARTIRC4NET_FILES), $(top_builddir)/$(file))
+
+EXTRA_BUNDLE = $(SMARTIRC4NET_FILES_EXPANDED)
+
+install-data-hook:
+ for ASM in $(EXTRA_BUNDLE); do \
+ $(INSTALL) -m 0755 $$ASM $(DESTDIR)$(moduledir); \
+ done;
+
+uninstall-hook:
+ for ASM in $(EXTRA_BUNDLE); do \
+ rm -f $(DESTDIR)$(moduledir)/`basename $$ASM`; \
+ done;
+
+include $(top_srcdir)/build/build.mk
diff --git a/SparkleLib/Makefile.in b/SparkleLib/Makefile.in
new file mode 100644
index 0000000..52d6c7d
--- /dev/null
+++ b/SparkleLib/Makefile.in
@@ -0,0 +1,606 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+DIST_COMMON = $(srcdir)/AssemblyInfo.cs.in $(srcdir)/Defines.cs.in \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+@ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = SparkleLib
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = AssemblyInfo.cs Defines.cs
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = SparkleLib
+TARGET = library
+LINK = $(REF_SPARKLELIB) $(am__append_1)
+SOURCES = \
+ Defines.cs \
+ Git/SparkleFetcherGit.cs \
+ Git/SparkleRepoGit.cs \
+ Hg/SparkleFetcherHg.cs \
+ Hg/SparkleRepoHg.cs \
+ Scp/SparkleFetcherScp.cs \
+ Scp/SparkleRepoScp.cs \
+ SparkleBackend.cs \
+ SparkleChangeSet.cs \
+ SparkleConfig.cs \
+ SparkleFetcherBase.cs \
+ SparkleHelpers.cs \
+ SparkleListenerBase.cs \
+ SparkleListenerIrc.cs \
+ SparkleOptions.cs \
+ SparklePaths.cs \
+ SparkleRepoBase.cs
+
+SMARTIRC4NET_FILES_EXPANDED = $(foreach file, $(SMARTIRC4NET_FILES), $(top_builddir)/$(file))
+EXTRA_BUNDLE = $(SMARTIRC4NET_FILES_EXPANDED)
+
+# Initializers
+MONO_BASE_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_SMARTIRC4NET = -r:$(top_builddir)/$(SMARTIRC4NET_ASSEMBLY)
+REF_NOTIFY_SHARP = $(LINK_SYSTEM) $(LINK_DBUS) $(GTKSHARP_LIBS) $(GLIBSHARP_LIBS)
+LINK_NOTIFY_SHARP = -r:$(DIR_BIN)/NotifySharp.dll
+LINK_NOTIFY_SHARP_DEPS = $(REF_NOTIFY_SHARP) $(LINK_NOTIFY_SHARP)
+REF_FRIENDFACE = $(LINK_SYSTEM) $(LINK_GTK) $(LINK_MONO_POSIX)
+LINK_FRIENDFACE = -r:$(DIR_BIN)/FriendFace.dll
+LINK_FRIENDFACE_DEPS = $(REF_FRIENDFACE) $(LINK_FRIENDFACE)
+REF_SPARKLELIB = $(LINK_SYSTEM) $(LINK_MONO_POSIX) $(LINK_SMARTIRC4NET)
+LINK_SPARKLELIB = -r:$(DIR_BIN)/SparkleLib.dll
+LINK_SPARKLELIB_DEPS = $(REF_SPARKLELIB) $(LINK_SPARKLELIB)
+REF_SPARKLESHARE = $(LINK_DBUS) $(LINK_GTK) $(LINK_SPARKLELIB_DEPS)
+REF_SPARKLEDIFF = $(LINK_FRIENDFACE_DEPS) $(LINK_GTK) $(LINK_SPARKLELIB_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/SparkleLib/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+@ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+@ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign SparkleLib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign SparkleLib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+AssemblyInfo.cs: $(top_builddir)/config.status $(srcdir)/AssemblyInfo.cs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+Defines.cs: $(top_builddir)/config.status $(srcdir)/Defines.cs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleSCRIPTS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-moduleSCRIPTS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: install-am install-data-am install-strip uninstall-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-hook install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-hook \
+ uninstall-moduleSCRIPTS
+
+
+install-data-hook:
+ for ASM in $(EXTRA_BUNDLE); do \
+ $(INSTALL) -m 0755 $$ASM $(DESTDIR)$(moduledir); \
+ done;
+
+uninstall-hook:
+ for ASM in $(EXTRA_BUNDLE); do \
+ rm -f $(DESTDIR)$(moduledir)/`basename $$ASM`; \
+ done;
+
+all: $(ASSEMBLY_FILE)
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -codepage:utf8 \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SparkleLib/Scp/SparkleFetcherScp.cs b/SparkleLib/Scp/SparkleFetcherScp.cs
new file mode 100644
index 0000000..d20e22a
--- /dev/null
+++ b/SparkleLib/Scp/SparkleFetcherScp.cs
@@ -0,0 +1,139 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Xml;
+
+namespace SparkleLib {
+
+ // Sets up a fetcher that can get remote folders
+ public class SparkleFetcherScp : SparkleFetcherBase {
+
+ public SparkleFetcherScp (string server, string remote_folder, string target_folder) :
+ base (server, remote_folder, target_folder) { }
+
+
+ public override bool Fetch ()
+ {
+ SparkleScp scp = new SparkleScp (SparklePaths.SparkleTmpPath,
+ "-r \"" + base.remote_url + "\" " + "\"" + base.target_folder + "\"");
+
+ scp.Start ();
+ scp.WaitForExit ();
+
+ SparkleHelpers.DebugInfo ("Scp", "Exit code " + scp.ExitCode.ToString ());
+
+ if (scp.ExitCode != 0) {
+ return false;
+ } else {
+ InstallConfiguration ();
+ InstallExcludeRules ();
+ return true;
+ }
+ }
+
+
+ // Install the user's name and email and some config into
+ // the newly cloned repository
+ private void InstallConfiguration ()
+ {
+ string log_file_path = SparkleHelpers.CombineMore (base.target_folder, ".sparkleshare", "log");
+ File.Create (log_file_path);
+
+ string config_file_path = SparkleHelpers.CombineMore (base.target_folder, ".sparkleshare", "config");
+ File.Create (config_file_path);
+
+ string config = "";
+
+ // Write the config to the file
+ TextWriter writer = new StreamWriter (config_file_path);
+ writer.WriteLine (config);
+ writer.Close ();
+
+ SparkleHelpers.DebugInfo ("Config", "Added configuration to '" + config_file_path + "'");
+ }
+
+
+ // Add a .gitignore file to the repo
+ private void InstallExcludeRules ()
+ {
+ string exlude_rules_file_path = SparkleHelpers.CombineMore (base.target_folder, ".sparkleshare", "exclude");
+ File.Create (exlude_rules_file_path);
+
+ TextWriter writer = new StreamWriter (exlude_rules_file_path);
+
+ // gedit and emacs
+ writer.WriteLine ("*~");
+
+ // vi(m)
+ writer.WriteLine (".*.sw[a-z]");
+ writer.WriteLine ("*.un~");
+ writer.WriteLine ("*.swp");
+ writer.WriteLine ("*.swo");
+
+ // KDE
+ writer.WriteLine (".directory");
+
+ // Mac OSX
+ writer.WriteLine (".DS_Store");
+ writer.WriteLine ("Icon?");
+ writer.WriteLine ("._*");
+ writer.WriteLine (".Spotlight-V100");
+ writer.WriteLine (".Trashes");
+
+ // Mac OSX
+ writer.WriteLine ("*(Autosaved).graffle");
+
+ // Windows
+ writer.WriteLine ("Thumbs.db");
+ writer.WriteLine ("Desktop.ini");
+
+ // CVS
+ writer.WriteLine ("*/CVS/*");
+ writer.WriteLine (".cvsignore");
+ writer.WriteLine ("*/.cvsignore");
+
+ // Subversion
+ writer.WriteLine ("/.svn/*");
+ writer.WriteLine ("*/.svn/*");
+
+ writer.Close ();
+ }
+ }
+
+ public class SparkleScp : Process {
+
+ public SparkleScp (string path, string args) : base ()
+ {
+ EnableRaisingEvents = true;
+ StartInfo.FileName = SparkleBackend.DefaultBackend.Path;
+ StartInfo.Arguments = args;
+ StartInfo.RedirectStandardOutput = true;
+ StartInfo.UseShellExecute = false;
+ StartInfo.WorkingDirectory = path;
+ }
+
+
+ new public void Start ()
+ {
+ SparkleHelpers.DebugInfo ("Cmd", StartInfo.FileName + " " + StartInfo.Arguments);
+ base.Start ();
+ }
+ }
+}
diff --git a/SparkleLib/Scp/SparkleRepoScp.cs b/SparkleLib/Scp/SparkleRepoScp.cs
new file mode 100644
index 0000000..a303055
--- /dev/null
+++ b/SparkleLib/Scp/SparkleRepoScp.cs
@@ -0,0 +1,115 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace SparkleLib {
+
+ public class SparkleRepoScp : SparkleRepoBase {
+
+ public SparkleRepoScp (string path, SparkleBackend backend) :
+ base (path, backend) { }
+
+
+ public override string Identifier {
+ get {
+ return "sparkles";
+ }
+ }
+
+
+ public override string CurrentRevision {
+ get {
+ return "";
+ }
+ }
+
+
+ public override bool CheckForRemoteChanges ()
+ {
+ return true;
+ }
+
+
+ public override bool SyncUp ()
+ {
+ return true;
+ }
+
+
+ public override bool SyncDown ()
+ {
+ return true;
+ }
+
+
+ public override bool AnyDifferences {
+ get {
+ return false;
+ }
+ }
+
+
+ public override bool HasUnsyncedChanges {
+ get {
+ string unsynced_file_path = SparkleHelpers.CombineMore (LocalPath,
+ ".sparkleshare", "has_unsynced_changes");
+
+ return File.Exists (unsynced_file_path);
+ }
+
+ set {
+ string unsynced_file_path = SparkleHelpers.CombineMore (LocalPath,
+ ".sparkleshare", "has_unsynced_changes");
+
+ if (value) {
+ if (!File.Exists (unsynced_file_path))
+ File.Create (unsynced_file_path);
+ } else {
+ File.Delete (unsynced_file_path);
+ }
+ }
+ }
+
+
+ public override List <SparkleChangeSet> GetChangeSets (int count)
+ {
+ var l = new List<SparkleChangeSet> ();
+ l.Add (new SparkleChangeSet () { UserName = "test", UserEmail = "test", Revision = "test", Timestamp = DateTime.Now });
+ return l;
+ }
+
+
+ public override void CreateInitialChangeSet ()
+ {
+ base.CreateInitialChangeSet ();
+ }
+
+
+ public override bool UsesNotificationCenter
+ {
+ get {
+ string file_path = SparkleHelpers.CombineMore (LocalPath, ".sparkleshare", "disable_notification_center");
+ return !File.Exists (file_path);
+ }
+ }
+ }
+}
diff --git a/SparkleLib/SparkleBackend.cs b/SparkleLib/SparkleBackend.cs
new file mode 100644
index 0000000..7b5898b
--- /dev/null
+++ b/SparkleLib/SparkleBackend.cs
@@ -0,0 +1,125 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+using System.Runtime.InteropServices;
+
+namespace SparkleLib {
+
+ public class SparkleBackend {
+
+ public static SparkleBackend DefaultBackend = new SparkleBackendGit ();
+
+ public string Name;
+ public string Path;
+
+
+ public SparkleBackend (string name, string [] paths)
+ {
+ Name = name;
+
+ foreach (string path in paths) {
+ if (File.Exists (path)) {
+ Path = path;
+ break;
+ }
+ }
+ }
+
+
+ public bool IsPresent {
+ get {
+ return (Path != null);
+ }
+ }
+
+
+ public bool IsUsablePath (string path)
+ {
+ return (path.Length > 0);
+ }
+
+
+ // Strange magic needed by Platform ()
+ [DllImport ("libc")]
+ static extern int uname (IntPtr buf);
+
+
+ // This fixes the PlatformID enumeration for MacOSX in Environment.OSVersion.Platform,
+ // which is intentionally broken in Mono for historical reasons
+ public static PlatformID Platform {
+ get {
+ IntPtr buf = IntPtr.Zero;
+
+ try {
+ buf = Marshal.AllocHGlobal (8192);
+
+ if (uname (buf) == 0 && Marshal.PtrToStringAnsi (buf) == "Darwin")
+ return PlatformID.MacOSX;
+
+ } catch {
+ } finally {
+ if (buf != IntPtr.Zero)
+ Marshal.FreeHGlobal (buf);
+ }
+
+ return Environment.OSVersion.Platform;
+ }
+ }
+ }
+
+
+ public class SparkleBackendGit : SparkleBackend {
+
+ private static string name = "Git";
+ private static string [] paths = new string [] {
+ "/opt/local/bin/git",
+ "/usr/bin/git",
+ "/usr/local/bin/git",
+ "/usr/local/git/bin/git"
+ };
+
+ public SparkleBackendGit () : base (name, paths) { }
+
+ }
+
+
+ public class SparkleBackendHg : SparkleBackend {
+
+ private static string name = "Hg";
+ private static string [] paths = new string [] {
+ "/opt/local/bin/hg",
+ "/usr/bin/hg"
+ };
+
+ public SparkleBackendHg () : base (name, paths) { }
+
+ }
+
+
+ public class SparkleBackendScp : SparkleBackend {
+
+ private static string name = "Scp";
+ private static string [] paths = new string [] {
+ "/usr/bin/scp"
+ };
+
+ public SparkleBackendScp () : base (name, paths) { }
+
+ }
+}
diff --git a/SparkleLib/SparkleChangeSet.cs b/SparkleLib/SparkleChangeSet.cs
new file mode 100644
index 0000000..70baabb
--- /dev/null
+++ b/SparkleLib/SparkleChangeSet.cs
@@ -0,0 +1,37 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+
+namespace SparkleLib {
+
+ public class SparkleChangeSet {
+
+ public string UserName;
+ public string UserEmail;
+ public string Revision;
+ public DateTime Timestamp;
+ public bool IsMerge = false;
+ public List<string> Added = new List<string> ();
+ public List<string> Deleted = new List<string> ();
+ public List<string> Edited = new List<string> ();
+ public List<string> MovedFrom = new List<string> ();
+ public List<string> MovedTo = new List<string> ();
+
+ }
+}
diff --git a/SparkleLib/SparkleConfig.cs b/SparkleLib/SparkleConfig.cs
new file mode 100644
index 0000000..e960326
--- /dev/null
+++ b/SparkleLib/SparkleConfig.cs
@@ -0,0 +1,258 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Xml;
+
+using Mono.Unix;
+
+namespace SparkleLib {
+
+ public class SparkleConfig : XmlDocument {
+
+ public static SparkleConfig DefaultConfig = new SparkleConfig (
+ SparklePaths.SparkleConfigPath, "config.xml");
+
+ public string Path;
+
+
+ public SparkleConfig (string config_path, string config_file_name)
+ {
+ Path = System.IO.Path.Combine (config_path, config_file_name);
+
+ if (!Directory.Exists (config_path)) {
+ Directory.CreateDirectory (config_path);
+ SparkleHelpers.DebugInfo ("Config", "Created \"" + config_path + "\"");
+ }
+
+ string icons_path = System.IO.Path.Combine (config_path, "icons");
+ if (!Directory.Exists (icons_path)) {
+ Directory.CreateDirectory (icons_path);
+ SparkleHelpers.DebugInfo ("Config", "Created \"" + icons_path + "\"");
+ }
+
+ if (!File.Exists (Path))
+ CreateInitialConfig ();
+
+ Load (Path);
+ }
+
+
+ private void CreateInitialConfig ()
+ {
+ string user_name = Environment.UserName;
+
+ if (SparkleBackend.Platform == PlatformID.Unix ||
+ SparkleBackend.Platform == PlatformID.MacOSX) {
+
+ user_name = new UnixUserInfo (UnixEnvironment.UserName).RealName;
+ user_name = user_name.TrimEnd (",".ToCharArray());
+
+ }
+
+ if (string.IsNullOrEmpty (user_name))
+ user_name = Environment.UserName;
+
+ TextWriter writer = new StreamWriter (Path);
+ string n = Environment.NewLine;
+
+ writer.Write ("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + n +
+ "<sparkleshare>" + n +
+ " <user>" + n +
+ " <name>" + user_name + "</name>" + n +
+ " <email>Unknown</email>" + n +
+ " </user>" + n +
+ "</sparkleshare>");
+ writer.Close ();
+
+ SparkleHelpers.DebugInfo ("Config", "Created \"" + Path + "\"");
+ }
+
+
+ public string UserName {
+ get {
+ XmlNode node = SelectSingleNode ("/sparkleshare/user/name/text()");
+ return node.Value;
+ }
+
+ set {
+ XmlNode node = SelectSingleNode ("/sparkleshare/user/name/text()");
+ node.InnerText = value;
+
+ Save ();
+ }
+ }
+
+
+ public string UserEmail {
+ get {
+ XmlNode node = SelectSingleNode ("/sparkleshare/user/email/text()");
+ return node.Value;
+ }
+
+ set {
+ XmlNode node = SelectSingleNode ("/sparkleshare/user/email/text()");
+ node.InnerText = value;
+
+ Save ();
+ }
+ }
+
+
+ public List<string> Folders {
+ get {
+ List<string> folders = new List<string> ();
+
+ foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder"))
+ folders.Add (node_folder ["name"].InnerText);
+
+ return folders;
+ }
+ }
+
+
+ public void AddFolder (string name, string url, string backend)
+ {
+ XmlNode node_name = CreateElement ("name");
+ node_name.InnerText = name;
+
+ XmlNode node_url = CreateElement ("url");
+ node_url.InnerText = url;
+
+ XmlNode node_backend = CreateElement ("backend");
+ node_backend.InnerText = backend;
+
+ XmlNode node_folder = CreateNode (XmlNodeType.Element, "folder", null);
+ node_folder.AppendChild (node_name);
+ node_folder.AppendChild (node_url);
+ node_folder.AppendChild (node_backend);
+
+ XmlNode node_root = SelectSingleNode ("/sparkleshare");
+ node_root.AppendChild (node_folder);
+
+ Save ();
+ }
+
+
+ public void RemoveFolder (string name)
+ {
+ foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) {
+ if (node_folder ["name"].InnerText.Equals (name))
+ SelectSingleNode ("/sparkleshare").RemoveChild (node_folder);
+ }
+
+ Save ();
+ }
+
+
+ public bool FolderExists (string name)
+ {
+ foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) {
+ if (node_folder ["name"].InnerText.Equals (name))
+ return true;
+ }
+
+ return false;
+ }
+
+
+ public string GetBackendForFolder (string name)
+ {
+ foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) {
+ if (node_folder ["name"].InnerText.Equals (name))
+ return node_folder ["backend"].InnerText;
+ }
+
+ return null;
+ }
+
+
+ public string GetUrlForFolder (string name)
+ {
+ foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) {
+ if (node_folder ["name"].InnerText.Equals (name))
+ return node_folder ["url"].InnerText;
+ }
+
+ return null;
+ }
+
+
+ public string GetAnnouncementsForFolder (string name)
+ {
+ foreach (XmlNode node_folder in SelectNodes ("/sparkleshare/folder")) {
+ if (node_folder ["name"].InnerText.Equals (name) &&
+ node_folder ["announcements"] != null) {
+
+ return node_folder ["announcements"].InnerText;
+ }
+ }
+
+ return null;
+ }
+
+
+ public string GetConfigOption (string name)
+ {
+ XmlNode node = SelectSingleNode ("/sparkleshare/" + name);
+
+ if (node != null)
+ return node.InnerText;
+ else
+ return null;
+ }
+
+
+ public void SetConfigOption (string name, string content)
+ {
+ XmlNode node = SelectSingleNode ("/sparkleshare/" + name);
+
+ if (node != null) {
+ node.InnerText = content;
+
+ } else {
+ node = CreateElement (name);
+ node.InnerText = content;
+
+ XmlNode node_root = SelectSingleNode ("/sparkleshare");
+ node_root.AppendChild (node);
+ }
+
+ SparkleHelpers.DebugInfo ("Config", "Updated " + name + ":" + content);
+ Save ();
+ }
+
+
+ public void Save ()
+ {
+ if (!File.Exists (Path))
+ throw new ConfigFileNotFoundException (Path + " does not exist");
+
+ Save (Path);
+ SparkleHelpers.DebugInfo ("Config", "Updated \"" + Path + "\"");
+ }
+ }
+
+
+ public class ConfigFileNotFoundException : Exception {
+
+ public ConfigFileNotFoundException (string message) :
+ base (message) { }
+ }
+}
diff --git a/SparkleLib/SparkleFetcherBase.cs b/SparkleLib/SparkleFetcherBase.cs
new file mode 100644
index 0000000..37e2984
--- /dev/null
+++ b/SparkleLib/SparkleFetcherBase.cs
@@ -0,0 +1,199 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Text.RegularExpressions;
+using System.Threading;
+
+using Mono.Unix;
+
+namespace SparkleLib {
+
+ // Sets up a fetcher that can get remote folders
+ public abstract class SparkleFetcherBase {
+
+ public delegate void StartedEventHandler ();
+ public delegate void FinishedEventHandler ();
+ public delegate void FailedEventHandler ();
+
+ public event StartedEventHandler Started;
+ public event FinishedEventHandler Finished;
+ public event FailedEventHandler Failed;
+
+ protected string target_folder;
+ protected string remote_url;
+ private Thread thread;
+
+ public abstract bool Fetch ();
+
+
+ public SparkleFetcherBase (string server, string remote_folder, string target_folder)
+ {
+ this.target_folder = target_folder;
+ this.remote_url = server + "/" + remote_folder;
+ }
+
+
+ // Clones the remote repository
+ public void Start ()
+ {
+ SparkleHelpers.DebugInfo ("Fetcher", "[" + this.target_folder + "] Fetching folder: " + this.remote_url);
+
+ if (Started != null)
+ Started ();
+
+ if (Directory.Exists (this.target_folder))
+ Directory.Delete (this.target_folder, true);
+
+ string host = GetHost (this.remote_url);
+
+ if (String.IsNullOrEmpty (host)) {
+ if (Failed != null)
+ Failed ();
+
+ return;
+ }
+
+ DisableHostKeyCheckingForHost (host);
+
+ this.thread = new Thread (new ThreadStart (delegate {
+ if (Fetch ()) {
+ SparkleHelpers.DebugInfo ("Fetcher", "Finished");
+
+ EnableHostKeyCheckingForHost (host);
+
+ if (Finished != null)
+ Finished ();
+
+ } else {
+ SparkleHelpers.DebugInfo ("Fetcher", "Failed");
+
+ EnableHostKeyCheckingForHost (host);
+
+ if (Failed != null)
+ Failed ();
+ }
+ }));
+
+ this.thread.Start ();
+ }
+
+
+ public string RemoteUrl {
+ get {
+ return this.remote_url;
+ }
+ }
+
+
+ public void Dispose ()
+ {
+ if (this.thread != null) {
+ this.thread.Abort ();
+ this.thread.Join ();
+ }
+ }
+
+
+ private void DisableHostKeyCheckingForHost (string host)
+ {
+ string path = SparklePaths.HomePath;
+
+ if (!(SparkleBackend.Platform == PlatformID.Unix ||
+ SparkleBackend.Platform == PlatformID.MacOSX)) {
+
+ path = Environment.ExpandEnvironmentVariables ("%HOMEDRIVE%%HOMEPATH%");
+ }
+
+ string ssh_config_file_path = SparkleHelpers.CombineMore (path, ".ssh", "config");
+ string ssh_config = Environment.NewLine + "Host " + host +
+ Environment.NewLine + "\tStrictHostKeyChecking no";
+
+ if (File.Exists (ssh_config_file_path)) {
+ TextWriter writer = File.AppendText (ssh_config_file_path);
+ writer.WriteLine (ssh_config);
+ writer.Close ();
+
+ } else {
+ TextWriter writer = new StreamWriter (ssh_config_file_path);
+ writer.WriteLine (ssh_config);
+ writer.Close ();
+ }
+
+ UnixFileSystemInfo file_info = new UnixFileInfo (ssh_config_file_path);
+ file_info.FileAccessPermissions = (FileAccessPermissions.UserRead |
+ FileAccessPermissions.UserWrite);
+
+ SparkleHelpers.DebugInfo ("Fetcher", "Disabled host key checking");
+ }
+
+
+ private void EnableHostKeyCheckingForHost (string host)
+ {
+ string path = SparklePaths.HomePath;
+
+ if (!(SparkleBackend.Platform == PlatformID.Unix ||
+ SparkleBackend.Platform == PlatformID.MacOSX)) {
+
+ path = Environment.ExpandEnvironmentVariables ("%HOMEDRIVE%%HOMEPATH%");
+ }
+
+ string ssh_config_file_path = SparkleHelpers.CombineMore (path, ".ssh", "config");
+ string ssh_config = Environment.NewLine + "Host " + host +
+ Environment.NewLine + "\tStrictHostKeyChecking no";
+
+ if (File.Exists (ssh_config_file_path)) {
+ StreamReader reader = new StreamReader (ssh_config_file_path);
+ string current_ssh_config = reader.ReadToEnd ();
+ reader.Close ();
+
+ current_ssh_config = current_ssh_config.Remove (
+ current_ssh_config.IndexOf (ssh_config), ssh_config.Length);
+
+ bool has_some_ssh_config = new Regex (@"[a-z]").IsMatch (current_ssh_config);
+ if (!has_some_ssh_config) {
+ File.Delete (ssh_config_file_path);
+
+ } else {
+ TextWriter writer = new StreamWriter (ssh_config_file_path);
+ writer.WriteLine (current_ssh_config);
+ writer.Close ();
+
+ UnixFileSystemInfo file_info = new UnixFileInfo (ssh_config_file_path);
+ file_info.FileAccessPermissions = (FileAccessPermissions.UserRead |
+ FileAccessPermissions.UserWrite);
+ }
+ }
+
+ SparkleHelpers.DebugInfo ("Fetcher", "Enabled host key checking");
+ }
+
+
+ private string GetHost (string url)
+ {
+ Regex regex = new Regex (@"(@|://)([a-z0-9\.-]+)(/|:)");
+ Match match = regex.Match (url);
+
+ if (match.Success)
+ return match.Groups [2].Value;
+ else
+ return null;
+ }
+ }
+}
diff --git a/SparkleLib/SparkleHelpers.cs b/SparkleLib/SparkleHelpers.cs
new file mode 100644
index 0000000..741648d
--- /dev/null
+++ b/SparkleLib/SparkleHelpers.cs
@@ -0,0 +1,80 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+
+namespace SparkleLib {
+
+ public static class SparkleHelpers {
+
+ public static bool ShowDebugInfo = true;
+
+
+ // Show debug info if needed
+ public static void DebugInfo (string type, string message)
+ {
+ if (ShowDebugInfo) {
+ string timestamp = DateTime.Now.ToString ("HH:mm:ss");
+
+ if (!message.StartsWith ("["))
+ message = " " + message;
+
+ // TODO: Write to a log
+ Console.WriteLine (timestamp + " " + "[" + type + "]" + message);
+ }
+ }
+
+
+ // Makes it possible to combine more than
+ // two paths at once
+ public static string CombineMore (params string [] parts)
+ {
+ string new_path = "";
+
+ foreach (string part in parts)
+ new_path = Path.Combine (new_path, part);
+
+ return new_path;
+ }
+
+
+ // Recursively sets access rights of a folder to 'Normal'
+ public static void ClearAttributes (string path)
+ {
+ if (Directory.Exists (path)) {
+ string [] folders = Directory .GetDirectories (path);
+
+ foreach (string folder in folders)
+ ClearAttributes (folder);
+
+ string [] files = Directory .GetFiles(path);
+
+ foreach (string file in files)
+ File.SetAttributes (file, FileAttributes.Normal);
+ }
+ }
+
+
+ // Converts a UNIX timestamp to a more usable time object
+ public static DateTime UnixTimestampToDateTime (int timestamp)
+ {
+ DateTime unix_epoch = new DateTime (1970, 1, 1, 0, 0, 0, 0);
+ return unix_epoch.AddSeconds (timestamp);
+ }
+ }
+}
diff --git a/SparkleLib/SparkleListenerBase.cs b/SparkleLib/SparkleListenerBase.cs
new file mode 100644
index 0000000..bcf12c9
--- /dev/null
+++ b/SparkleLib/SparkleListenerBase.cs
@@ -0,0 +1,201 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Timers;
+
+namespace SparkleLib {
+
+ public class SparkleAnnouncement {
+
+ public readonly string FolderIdentifier;
+ public readonly string Message;
+
+
+ public SparkleAnnouncement (string folder_identifier, string message)
+ {
+ FolderIdentifier = folder_identifier;
+ Message = message;
+ }
+ }
+
+
+ public static class SparkleListenerFactory {
+
+ private static List<SparkleListenerBase> listeners;
+
+ public static SparkleListenerIrc CreateIrcListener (string server, string folder_identifier,
+ string announcements)
+ {
+ if (listeners == null)
+ listeners = new List<SparkleListenerBase> ();
+
+ // This is SparkleShare's centralized notification service.
+ // Don't worry, we only use this server as a backup if you
+ // don't have your own. All data needed to connect is hashed and
+ // we don't store any personal information ever
+ if (announcements == null)
+ server = "204.62.14.135";
+ else
+ server = announcements;
+
+ foreach (SparkleListenerBase listener in listeners) {
+ if (listener.Server.Equals (server)) {
+ SparkleHelpers.DebugInfo ("ListenerFactory", "Refered to existing listener for " + server);
+ listener.AlsoListenTo (folder_identifier);
+ return (SparkleListenerIrc) listener;
+ }
+ }
+
+ SparkleHelpers.DebugInfo ("ListenerFactory", "Issued new listener for " + server);
+ listeners.Add (new SparkleListenerIrc (server, folder_identifier, announcements));
+ return (SparkleListenerIrc) listeners [listeners.Count - 1];
+ }
+ }
+
+
+ // A persistent connection to the server that
+ // listens for change notifications
+ public abstract class SparkleListenerBase {
+
+ // We've connected to the server
+ public event ConnectedEventHandler Connected;
+ public delegate void ConnectedEventHandler ();
+
+ // We've disconnected from the server
+ public event DisconnectedEventHandler Disconnected;
+ public delegate void DisconnectedEventHandler ();
+
+ // We've been notified about a remote
+ // change by the channel
+ public event AnnouncementEventHandler Announcement;
+ public delegate void AnnouncementEventHandler (SparkleAnnouncement announcement);
+
+
+ public abstract void Connect ();
+ public abstract void Announce (SparkleAnnouncement announcent);
+ public abstract void AlsoListenTo (string folder_identifier);
+ public abstract bool IsConnected { get; }
+
+
+ protected List<string> channels = new List<string> ();
+ protected List<SparkleAnnouncement> queue_up = new List<SparkleAnnouncement> ();
+ protected List<SparkleAnnouncement> queue_down = new List<SparkleAnnouncement> ();
+ protected bool is_connecting;
+ protected string server;
+ protected Timer reconnect_timer = new Timer { Interval = 60 * 1000, Enabled = true };
+
+ public SparkleListenerBase (string server, string folder_identifier, string announcements) {
+ this.reconnect_timer.Elapsed += delegate {
+ if (!IsConnected && !this.is_connecting)
+ Reconnect ();
+ };
+
+ this.reconnect_timer.Start ();
+ }
+
+
+ public void AnnounceBase (SparkleAnnouncement announcement) {
+ if (IsConnected) {
+ SparkleHelpers.DebugInfo ("Listener", "Announcing to " + announcement.FolderIdentifier + " on " + this.server);
+ Announce (announcement);
+
+ } else {
+ SparkleHelpers.DebugInfo ("Listener", "Not connected to " + this.server + ". Queuing message");
+ this.queue_up.Add (announcement);
+ }
+ }
+
+
+ public bool HasQueueDownAnnouncement (string folder_identifier)
+ {
+ foreach (SparkleAnnouncement announcement in this.queue_down) {
+ if (announcement.FolderIdentifier.Equals (folder_identifier)) {
+ this.queue_down.Remove (announcement);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
+ public void Reconnect ()
+ {
+ SparkleHelpers.DebugInfo ("Listener", "Trying to reconnect to " + this.server);
+ Connect ();
+ }
+
+
+ public void OnConnected ()
+ {
+ SparkleHelpers.DebugInfo ("Listener", "Connected to " + Server);
+
+ if (Connected != null)
+ Connected ();
+
+ if (this.queue_up.Count > 0) {
+ SparkleHelpers.DebugInfo ("Listener", "Delivering queued messages...");
+ foreach (SparkleAnnouncement announcement in this.queue_up) {
+ AnnounceBase (announcement);
+ this.queue_up.Remove (announcement);
+ }
+ }
+ }
+
+
+ public void OnDisconnected ()
+ {
+ SparkleHelpers.DebugInfo ("Listener", "Disonnected");
+
+ if (Disconnected != null)
+ Disconnected ();
+ }
+
+
+ public void OnAnnouncement (SparkleAnnouncement announcement)
+ {
+ SparkleHelpers.DebugInfo ("Listener", "Got message from " + announcement.FolderIdentifier + " on " + this.server);
+
+ this.queue_down.Add (announcement);
+
+ if (Announcement != null)
+ Announcement (announcement);
+ }
+
+
+ public virtual void Dispose ()
+ {
+ this.reconnect_timer.Dispose ();
+ }
+
+
+ public string Server {
+ get {
+ return this.server;
+ }
+ }
+
+
+ public bool IsConnecting {
+ get {
+ return this.is_connecting;
+ }
+ }
+ }
+}
diff --git a/SparkleLib/SparkleListenerIrc.cs b/SparkleLib/SparkleListenerIrc.cs
new file mode 100644
index 0000000..8ab5f5b
--- /dev/null
+++ b/SparkleLib/SparkleListenerIrc.cs
@@ -0,0 +1,160 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Text;
+using System.Threading;
+using System.Security.Cryptography;
+
+using Meebey.SmartIrc4net;
+
+namespace SparkleLib {
+
+ public class SparkleListenerIrc : SparkleListenerBase {
+
+ private Thread thread;
+ private IrcClient client;
+ private string nick;
+
+
+ public SparkleListenerIrc (string server, string folder_identifier, string announcements) :
+ base (server, folder_identifier, announcements)
+ {
+ base.server = server;
+
+ // Try to get a uniqueish nickname
+ this.nick = SHA1 (DateTime.Now.ToString ("ffffff") + "sparkles");
+
+ // Most irc servers don't allow nicknames starting
+ // with a number, so prefix an alphabetic character
+ this.nick = "s" + this.nick.Substring (0, 7);
+
+ base.channels.Add ("#" + folder_identifier);
+
+ this.client = new IrcClient () {
+ PingTimeout = 180,
+ PingInterval = 60
+ };
+
+ this.client.OnConnected += delegate {
+ base.is_connecting = false;
+ OnConnected ();
+ };
+
+ this.client.OnDisconnected += delegate {
+ base.is_connecting = false;
+ OnDisconnected ();
+ };
+
+ this.client.OnError += delegate {
+ base.is_connecting = false;
+ OnDisconnected ();
+ };
+
+ this.client.OnChannelMessage += delegate (object o, IrcEventArgs args) {
+ string message = args.Data.Message.Trim ();
+ string folder_id = args.Data.Channel.Substring (1); // remove the starting hash
+ OnAnnouncement (new SparkleAnnouncement (folder_id, message));
+ };
+ }
+
+
+ public override bool IsConnected {
+ get {
+ return this.client.IsConnected;
+ }
+ }
+
+
+ // Starts a new thread and listens to the channel
+ public override void Connect ()
+ {
+ SparkleHelpers.DebugInfo ("ListenerIrc", "Connecting to " + Server);
+
+ base.is_connecting = true;
+
+ this.thread = new Thread (
+ new ThreadStart (delegate {
+ try {
+
+ // Connect, login, and join the channel
+ this.client.Connect (new string [] {base.server}, 6667);
+ this.client.Login (this.nick, this.nick);
+
+ foreach (string channel in base.channels) {
+ SparkleHelpers.DebugInfo ("ListenerIrc", "Joining channel " + channel);
+ this.client.RfcJoin (channel);
+ }
+
+ // List to the channel, this blocks the thread
+ this.client.Listen ();
+
+ // Disconnect when we time out
+ this.client.Disconnect ();
+
+ } catch (ConnectionException e) {
+ SparkleHelpers.DebugInfo ("ListenerIrc", "Could not connect to " + Server + ": " + e.Message);
+ }
+ })
+ );
+
+ this.thread.Start ();
+ }
+
+
+ public override void AlsoListenTo (string folder_identifier)
+ {
+ string channel = "#" + folder_identifier;
+ if (!base.channels.Contains (channel)) {
+ base.channels.Add (channel);
+
+ if (IsConnected) {
+ SparkleHelpers.DebugInfo ("ListenerIrc", "Joining channel " + channel);
+ this.client.RfcJoin (channel);
+ }
+ }
+ }
+
+
+ public override void Announce (SparkleAnnouncement announcement)
+ {
+ string channel = "#" + announcement.FolderIdentifier;
+ this.client.SendMessage (SendType.Message, channel, announcement.Message);
+
+ // Also announce to ourselves for debugging purposes
+ // base.OnAnnouncement (announcement);
+ }
+
+
+ public override void Dispose ()
+ {
+ this.thread.Abort ();
+ this.thread.Join ();
+ base.Dispose ();
+ }
+
+
+ // Creates a SHA-1 hash of input
+ private string SHA1 (string s)
+ {
+ SHA1 sha1 = new SHA1CryptoServiceProvider ();
+ Byte[] bytes = ASCIIEncoding.Default.GetBytes (s);
+ Byte[] encoded_bytes = sha1.ComputeHash (bytes);
+ return BitConverter.ToString (encoded_bytes).ToLower ().Replace ("-", "");
+ }
+ }
+}
diff --git a/SparkleLib/SparkleOptions.cs b/SparkleLib/SparkleOptions.cs
new file mode 100644
index 0000000..b071c42
--- /dev/null
+++ b/SparkleLib/SparkleOptions.cs
@@ -0,0 +1,1101 @@
+//
+// Options.cs
+//
+// Authors:
+// Jonathan Pryor <jpryor@novell.com>
+//
+// Copyright (C) 2008 Novell (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+// Compile With:
+// gmcs -debug+ -r:System.Core Options.cs -o:NDesk.Options.dll
+// gmcs -debug+ -d:LINQ -r:System.Core Options.cs -o:NDesk.Options.dll
+//
+// The LINQ version just changes the implementation of
+// OptionSet.Parse(IEnumerable<string>), and confers no semantic changes.
+
+//
+// A Getopt::Long-inspired option parsing library for C#.
+//
+// NDesk.Options.OptionSet is built upon a key/value table, where the
+// key is a option format string and the value is a delegate that is
+// invoked when the format string is matched.
+//
+// Option format strings:
+// Regex-like BNF Grammar:
+// name: .+
+// type: [=:]
+// sep: ( [^{}]+ | '{' .+ '}' )?
+// aliases: ( name type sep ) ( '|' name type sep )*
+//
+// Each '|'-delimited name is an alias for the associated action. If the
+// format string ends in a '=', it has a required value. If the format
+// string ends in a ':', it has an optional value. If neither '=' or ':'
+// is present, no value is supported. `=' or `:' need only be defined on one
+// alias, but if they are provided on more than one they must be consistent.
+//
+// Each alias portion may also end with a "key/value separator", which is used
+// to split option values if the option accepts > 1 value. If not specified,
+// it defaults to '=' and ':'. If specified, it can be any character except
+// '{' and '}' OR the *string* between '{' and '}'. If no separator should be
+// used (i.e. the separate values should be distinct arguments), then "{}"
+// should be used as the separator.
+//
+// Options are extracted either from the current option by looking for
+// the option name followed by an '=' or ':', or is taken from the
+// following option IFF:
+// - The current option does not contain a '=' or a ':'
+// - The current option requires a value (i.e. not a Option type of ':')
+//
+// The `name' used in the option format string does NOT include any leading
+// option indicator, such as '-', '--', or '/'. All three of these are
+// permitted/required on any named option.
+//
+// Option bundling is permitted so long as:
+// - '-' is used to start the option group
+// - all of the bundled options are a single character
+// - at most one of the bundled options accepts a value, and the value
+// provided starts from the next character to the end of the string.
+//
+// This allows specifying '-a -b -c' as '-abc', and specifying '-D name=value'
+// as '-Dname=value'.
+//
+// Option processing is disabled by specifying "--". All options after "--"
+// are returned by OptionSet.Parse() unchanged and unprocessed.
+//
+// Unprocessed options are returned from OptionSet.Parse().
+//
+// Examples:
+// int verbose = 0;
+// OptionSet p = new OptionSet ()
+// .Add ("v", v => ++verbose)
+// .Add ("name=|value=", v => Console.WriteLine (v));
+// p.Parse (new string[]{"-v", "--v", "/v", "-name=A", "/name", "B", "extra"});
+//
+// The above would parse the argument string array, and would invoke the
+// lambda expression three times, setting `verbose' to 3 when complete.
+// It would also print out "A" and "B" to standard output.
+// The returned array would contain the string "extra".
+//
+// C# 3.0 collection initializers are supported and encouraged:
+// var p = new OptionSet () {
+// { "h|?|help", v => ShowHelp () },
+// };
+//
+// System.ComponentModel.TypeConverter is also supported, allowing the use of
+// custom data types in the callback type; TypeConverter.ConvertFromString()
+// is used to convert the value option to an instance of the specified
+// type:
+//
+// var p = new OptionSet () {
+// { "foo=", (Foo f) => Console.WriteLine (f.ToString ()) },
+// };
+//
+// Random other tidbits:
+// - Boolean options (those w/o '=' or ':' in the option format string)
+// are explicitly enabled if they are followed with '+', and explicitly
+// disabled if they are followed with '-':
+// string a = null;
+// var p = new OptionSet () {
+// { "a", s => a = s },
+// };
+// p.Parse (new string[]{"-a"}); // sets v != null
+// p.Parse (new string[]{"-a+"}); // sets v != null
+// p.Parse (new string[]{"-a-"}); // sets v == null
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Globalization;
+using System.IO;
+using System.Runtime.Serialization;
+using System.Security.Permissions;
+using System.Text;
+using System.Text.RegularExpressions;
+
+#if LINQ
+using System.Linq;
+#endif
+
+#if TEST
+using NDesk.Options;
+#endif
+
+#if NDESK_OPTIONS
+namespace NDesk.Options
+#else
+namespace SparkleLib.Options
+#endif
+{
+ public class OptionValueCollection : IList, IList<string> {
+
+ List<string> values = new List<string> ();
+ OptionContext c;
+
+ internal OptionValueCollection (OptionContext c)
+ {
+ this.c = c;
+ }
+
+ #region ICollection
+ void ICollection.CopyTo (Array array, int index) {(values as ICollection).CopyTo (array, index);}
+ bool ICollection.IsSynchronized {get {return (values as ICollection).IsSynchronized;}}
+ object ICollection.SyncRoot {get {return (values as ICollection).SyncRoot;}}
+ #endregion
+
+ #region ICollection<T>
+ public void Add (string item) {values.Add (item);}
+ public void Clear () {values.Clear ();}
+ public bool Contains (string item) {return values.Contains (item);}
+ public void CopyTo (string[] array, int arrayIndex) {values.CopyTo (array, arrayIndex);}
+ public bool Remove (string item) {return values.Remove (item);}
+ public int Count {get {return values.Count;}}
+ public bool IsReadOnly {get {return false;}}
+ #endregion
+
+ #region IEnumerable
+ IEnumerator IEnumerable.GetEnumerator () {return values.GetEnumerator ();}
+ #endregion
+
+ #region IEnumerable<T>
+ public IEnumerator<string> GetEnumerator () {return values.GetEnumerator ();}
+ #endregion
+
+ #region IList
+ int IList.Add (object value) {return (values as IList).Add (value);}
+ bool IList.Contains (object value) {return (values as IList).Contains (value);}
+ int IList.IndexOf (object value) {return (values as IList).IndexOf (value);}
+ void IList.Insert (int index, object value) {(values as IList).Insert (index, value);}
+ void IList.Remove (object value) {(values as IList).Remove (value);}
+ void IList.RemoveAt (int index) {(values as IList).RemoveAt (index);}
+ bool IList.IsFixedSize {get {return false;}}
+ object IList.this [int index] {get {return this [index];} set {(values as IList)[index] = value;}}
+ #endregion
+
+ #region IList<T>
+ public int IndexOf (string item) {return values.IndexOf (item);}
+ public void Insert (int index, string item) {values.Insert (index, item);}
+ public void RemoveAt (int index) {values.RemoveAt (index);}
+
+ private void AssertValid (int index)
+ {
+ if (c.Option == null)
+ throw new InvalidOperationException ("OptionContext.Option is null.");
+ if (index >= c.Option.MaxValueCount)
+ throw new ArgumentOutOfRangeException ("index");
+ if (c.Option.OptionValueType == OptionValueType.Required &&
+ index >= values.Count)
+ throw new OptionException (string.Format (
+ c.OptionSet.MessageLocalizer ("Missing required value for option '{0}'."), c.OptionName),
+ c.OptionName);
+ }
+
+ public string this [int index] {
+ get {
+ AssertValid (index);
+ return index >= values.Count ? null : values [index];
+ }
+ set {
+ values [index] = value;
+ }
+ }
+ #endregion
+
+ public List<string> ToList ()
+ {
+ return new List<string> (values);
+ }
+
+ public string[] ToArray ()
+ {
+ return values.ToArray ();
+ }
+
+ public override string ToString ()
+ {
+ return string.Join (", ", values.ToArray ());
+ }
+ }
+
+ public class OptionContext {
+ private Option option;
+ private string name;
+ private int index;
+ private OptionSet set;
+ private OptionValueCollection c;
+
+ public OptionContext (OptionSet set)
+ {
+ this.set = set;
+ this.c = new OptionValueCollection (this);
+ }
+
+ public Option Option {
+ get {return option;}
+ set {option = value;}
+ }
+
+ public string OptionName {
+ get {return name;}
+ set {name = value;}
+ }
+
+ public int OptionIndex {
+ get {return index;}
+ set {index = value;}
+ }
+
+ public OptionSet OptionSet {
+ get {return set;}
+ }
+
+ public OptionValueCollection OptionValues {
+ get {return c;}
+ }
+ }
+
+ public enum OptionValueType {
+ None,
+ Optional,
+ Required,
+ }
+
+ public abstract class Option {
+ string prototype, description;
+ string[] names;
+ OptionValueType type;
+ int count;
+ string[] separators;
+
+ protected Option (string prototype, string description)
+ : this (prototype, description, 1)
+ {
+ }
+
+ protected Option (string prototype, string description, int maxValueCount)
+ {
+ if (prototype == null)
+ throw new ArgumentNullException ("prototype");
+ if (prototype.Length == 0)
+ throw new ArgumentException ("Cannot be the empty string.", "prototype");
+ if (maxValueCount < 0)
+ throw new ArgumentOutOfRangeException ("maxValueCount");
+
+ this.prototype = prototype;
+ this.names = prototype.Split ('|');
+ this.description = description;
+ this.count = maxValueCount;
+ this.type = ParsePrototype ();
+
+ if (this.count == 0 && type != OptionValueType.None)
+ throw new ArgumentException (
+ "Cannot provide maxValueCount of 0 for OptionValueType.Required or " +
+ "OptionValueType.Optional.",
+ "maxValueCount");
+ if (this.type == OptionValueType.None && maxValueCount > 1)
+ throw new ArgumentException (
+ string.Format ("Cannot provide maxValueCount of {0} for OptionValueType.None.", maxValueCount),
+ "maxValueCount");
+ if (Array.IndexOf (names, "<>") >= 0 &&
+ ((names.Length == 1 && this.type != OptionValueType.None) ||
+ (names.Length > 1 && this.MaxValueCount > 1)))
+ throw new ArgumentException (
+ "The default option handler '<>' cannot require values.",
+ "prototype");
+ }
+
+ public string Prototype {get {return prototype;}}
+ public string Description {get {return description;}}
+ public OptionValueType OptionValueType {get {return type;}}
+ public int MaxValueCount {get {return count;}}
+
+ public string[] GetNames ()
+ {
+ return (string[]) names.Clone ();
+ }
+
+ public string[] GetValueSeparators ()
+ {
+ if (separators == null)
+ return new string [0];
+ return (string[]) separators.Clone ();
+ }
+
+ protected static T Parse<T> (string value, OptionContext c)
+ {
+ Type tt = typeof (T);
+ bool nullable = tt.IsValueType && tt.IsGenericType &&
+ !tt.IsGenericTypeDefinition &&
+ tt.GetGenericTypeDefinition () == typeof (Nullable<>);
+ Type targetType = nullable ? tt.GetGenericArguments () [0] : typeof (T);
+ TypeConverter conv = TypeDescriptor.GetConverter (targetType);
+ T t = default (T);
+ try {
+ if (value != null)
+ t = (T) conv.ConvertFromString (value);
+ }
+ catch (Exception e) {
+ throw new OptionException (
+ string.Format (
+ c.OptionSet.MessageLocalizer ("Could not convert string `{0}' to type {1} for option `{2}'."),
+ value, targetType.Name, c.OptionName),
+ c.OptionName, e);
+ }
+ return t;
+ }
+
+ internal string[] Names {get {return names;}}
+ internal string[] ValueSeparators {get {return separators;}}
+
+ static readonly char[] NameTerminator = new char[]{'=', ':'};
+
+ private OptionValueType ParsePrototype ()
+ {
+ char type = '\0';
+ List<string> seps = new List<string> ();
+ for (int i = 0; i < names.Length; ++i) {
+ string name = names [i];
+ if (name.Length == 0)
+ throw new ArgumentException ("Empty option names are not supported.", "prototype");
+
+ int end = name.IndexOfAny (NameTerminator);
+ if (end == -1)
+ continue;
+ names [i] = name.Substring (0, end);
+ if (type == '\0' || type == name [end])
+ type = name [end];
+ else
+ throw new ArgumentException (
+ string.Format ("Conflicting option types: '{0}' vs. '{1}'.", type, name [end]),
+ "prototype");
+ AddSeparators (name, end, seps);
+ }
+
+ if (type == '\0')
+ return OptionValueType.None;
+
+ if (count <= 1 && seps.Count != 0)
+ throw new ArgumentException (
+ string.Format ("Cannot provide key/value separators for Options taking {0} value(s).", count),
+ "prototype");
+ if (count > 1) {
+ if (seps.Count == 0)
+ this.separators = new string[]{":", "="};
+ else if (seps.Count == 1 && seps [0].Length == 0)
+ this.separators = null;
+ else
+ this.separators = seps.ToArray ();
+ }
+
+ return type == '=' ? OptionValueType.Required : OptionValueType.Optional;
+ }
+
+ private static void AddSeparators (string name, int end, ICollection<string> seps)
+ {
+ int start = -1;
+ for (int i = end+1; i < name.Length; ++i) {
+ switch (name [i]) {
+ case '{':
+ if (start != -1)
+ throw new ArgumentException (
+ string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
+ "prototype");
+ start = i+1;
+ break;
+ case '}':
+ if (start == -1)
+ throw new ArgumentException (
+ string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
+ "prototype");
+ seps.Add (name.Substring (start, i-start));
+ start = -1;
+ break;
+ default:
+ if (start == -1)
+ seps.Add (name [i].ToString ());
+ break;
+ }
+ }
+ if (start != -1)
+ throw new ArgumentException (
+ string.Format ("Ill-formed name/value separator found in \"{0}\".", name),
+ "prototype");
+ }
+
+ public void Invoke (OptionContext c)
+ {
+ OnParseComplete (c);
+ c.OptionName = null;
+ c.Option = null;
+ c.OptionValues.Clear ();
+ }
+
+ protected abstract void OnParseComplete (OptionContext c);
+
+ public override string ToString ()
+ {
+ return Prototype;
+ }
+ }
+
+ [Serializable]
+ public class OptionException : Exception {
+ private string option;
+
+ public OptionException ()
+ {
+ }
+
+ public OptionException (string message, string optionName)
+ : base (message)
+ {
+ this.option = optionName;
+ }
+
+ public OptionException (string message, string optionName, Exception innerException)
+ : base (message, innerException)
+ {
+ this.option = optionName;
+ }
+
+ protected OptionException (SerializationInfo info, StreamingContext context)
+ : base (info, context)
+ {
+ this.option = info.GetString ("OptionName");
+ }
+
+ public string OptionName {
+ get {return this.option;}
+ }
+
+ [SecurityPermission (SecurityAction.LinkDemand, SerializationFormatter = true)]
+ public override void GetObjectData (SerializationInfo info, StreamingContext context)
+ {
+ base.GetObjectData (info, context);
+ info.AddValue ("OptionName", option);
+ }
+ }
+
+ public delegate void OptionAction<TKey, TValue> (TKey key, TValue value);
+
+ public class OptionSet : KeyedCollection<string, Option>
+ {
+ public OptionSet ()
+ : this (delegate (string f) {return f;})
+ {
+ }
+
+ public OptionSet (Converter<string, string> localizer)
+ {
+ this.localizer = localizer;
+ }
+
+ Converter<string, string> localizer;
+
+ public Converter<string, string> MessageLocalizer {
+ get {return localizer;}
+ }
+
+ protected override string GetKeyForItem (Option item)
+ {
+ if (item == null)
+ throw new ArgumentNullException ("option");
+ if (item.Names != null && item.Names.Length > 0)
+ return item.Names [0];
+ // This should never happen, as it's invalid for Option to be
+ // constructed w/o any names.
+ throw new InvalidOperationException ("Option has no names!");
+ }
+
+ [Obsolete ("Use KeyedCollection.this[string]")]
+ protected Option GetOptionForName (string option)
+ {
+ if (option == null)
+ throw new ArgumentNullException ("option");
+ try {
+ return base [option];
+ }
+ catch (KeyNotFoundException) {
+ return null;
+ }
+ }
+
+ protected override void InsertItem (int index, Option item)
+ {
+ base.InsertItem (index, item);
+ AddImpl (item);
+ }
+
+ protected override void RemoveItem (int index)
+ {
+ base.RemoveItem (index);
+ Option p = Items [index];
+ // KeyedCollection.RemoveItem() handles the 0th item
+ for (int i = 1; i < p.Names.Length; ++i) {
+ Dictionary.Remove (p.Names [i]);
+ }
+ }
+
+ protected override void SetItem (int index, Option item)
+ {
+ base.SetItem (index, item);
+ RemoveItem (index);
+ AddImpl (item);
+ }
+
+ private void AddImpl (Option option)
+ {
+ if (option == null)
+ throw new ArgumentNullException ("option");
+ List<string> added = new List<string> (option.Names.Length);
+ try {
+ // KeyedCollection.InsertItem/SetItem handle the 0th name.
+ for (int i = 1; i < option.Names.Length; ++i) {
+ Dictionary.Add (option.Names [i], option);
+ added.Add (option.Names [i]);
+ }
+ }
+ catch (Exception) {
+ foreach (string name in added)
+ Dictionary.Remove (name);
+ throw;
+ }
+ }
+
+ public new OptionSet Add (Option option)
+ {
+ base.Add (option);
+ return this;
+ }
+
+ sealed class ActionOption : Option {
+ Action<OptionValueCollection> action;
+
+ public ActionOption (string prototype, string description, int count, Action<OptionValueCollection> action)
+ : base (prototype, description, count)
+ {
+ if (action == null)
+ throw new ArgumentNullException ("action");
+ this.action = action;
+ }
+
+ protected override void OnParseComplete (OptionContext c)
+ {
+ action (c.OptionValues);
+ }
+ }
+
+ public OptionSet Add (string prototype, Action<string> action)
+ {
+ return Add (prototype, null, action);
+ }
+
+ public OptionSet Add (string prototype, string description, Action<string> action)
+ {
+ if (action == null)
+ throw new ArgumentNullException ("action");
+ Option p = new ActionOption (prototype, description, 1,
+ delegate (OptionValueCollection v) { action (v [0]); });
+ base.Add (p);
+ return this;
+ }
+
+ public OptionSet Add (string prototype, OptionAction<string, string> action)
+ {
+ return Add (prototype, null, action);
+ }
+
+ public OptionSet Add (string prototype, string description, OptionAction<string, string> action)
+ {
+ if (action == null)
+ throw new ArgumentNullException ("action");
+ Option p = new ActionOption (prototype, description, 2,
+ delegate (OptionValueCollection v) {action (v [0], v [1]);});
+ base.Add (p);
+ return this;
+ }
+
+ sealed class ActionOption<T> : Option {
+ Action<T> action;
+
+ public ActionOption (string prototype, string description, Action<T> action)
+ : base (prototype, description, 1)
+ {
+ if (action == null)
+ throw new ArgumentNullException ("action");
+ this.action = action;
+ }
+
+ protected override void OnParseComplete (OptionContext c)
+ {
+ action (Parse<T> (c.OptionValues [0], c));
+ }
+ }
+
+ sealed class ActionOption<TKey, TValue> : Option {
+ OptionAction<TKey, TValue> action;
+
+ public ActionOption (string prototype, string description, OptionAction<TKey, TValue> action)
+ : base (prototype, description, 2)
+ {
+ if (action == null)
+ throw new ArgumentNullException ("action");
+ this.action = action;
+ }
+
+ protected override void OnParseComplete (OptionContext c)
+ {
+ action (
+ Parse<TKey> (c.OptionValues [0], c),
+ Parse<TValue> (c.OptionValues [1], c));
+ }
+ }
+
+ public OptionSet Add<T> (string prototype, Action<T> action)
+ {
+ return Add (prototype, null, action);
+ }
+
+ public OptionSet Add<T> (string prototype, string description, Action<T> action)
+ {
+ return Add (new ActionOption<T> (prototype, description, action));
+ }
+
+ public OptionSet Add<TKey, TValue> (string prototype, OptionAction<TKey, TValue> action)
+ {
+ return Add (prototype, null, action);
+ }
+
+ public OptionSet Add<TKey, TValue> (string prototype, string description, OptionAction<TKey, TValue> action)
+ {
+ return Add (new ActionOption<TKey, TValue> (prototype, description, action));
+ }
+
+ protected virtual OptionContext CreateOptionContext ()
+ {
+ return new OptionContext (this);
+ }
+
+#if LINQ
+ public List<string> Parse (IEnumerable<string> arguments)
+ {
+ bool process = true;
+ OptionContext c = CreateOptionContext ();
+ c.OptionIndex = -1;
+ var def = GetOptionForName ("<>");
+ var unprocessed =
+ from argument in arguments
+ where ++c.OptionIndex >= 0 && (process || def != null)
+ ? process
+ ? argument == "--"
+ ? (process = false)
+ : !Parse (argument, c)
+ ? def != null
+ ? Unprocessed (null, def, c, argument)
+ : true
+ : false
+ : def != null
+ ? Unprocessed (null, def, c, argument)
+ : true
+ : true
+ select argument;
+ List<string> r = unprocessed.ToList ();
+ if (c.Option != null)
+ c.Option.Invoke (c);
+ return r;
+ }
+#else
+ public List<string> Parse (IEnumerable<string> arguments)
+ {
+ OptionContext c = CreateOptionContext ();
+ c.OptionIndex = -1;
+ bool process = true;
+ List<string> unprocessed = new List<string> ();
+ Option def = Contains ("<>") ? this ["<>"] : null;
+ foreach (string argument in arguments) {
+ ++c.OptionIndex;
+ if (argument == "--") {
+ process = false;
+ continue;
+ }
+ if (!process) {
+ Unprocessed (unprocessed, def, c, argument);
+ continue;
+ }
+ if (!Parse (argument, c))
+ Unprocessed (unprocessed, def, c, argument);
+ }
+ if (c.Option != null)
+ c.Option.Invoke (c);
+ return unprocessed;
+ }
+#endif
+
+ private static bool Unprocessed (ICollection<string> extra, Option def, OptionContext c, string argument)
+ {
+ if (def == null) {
+ extra.Add (argument);
+ return false;
+ }
+ c.OptionValues.Add (argument);
+ c.Option = def;
+ c.Option.Invoke (c);
+ return false;
+ }
+
+ private readonly Regex ValueOption = new Regex (
+ @"^(?<flag>--|-|/)(?<name>[^:=]+)((?<sep>[:=])(?<value>.*))?$");
+
+ protected bool GetOptionParts (string argument, out string flag, out string name, out string sep, out string value)
+ {
+ if (argument == null)
+ throw new ArgumentNullException ("argument");
+
+ flag = name = sep = value = null;
+ Match m = ValueOption.Match (argument);
+ if (!m.Success) {
+ return false;
+ }
+ flag = m.Groups ["flag"].Value;
+ name = m.Groups ["name"].Value;
+ if (m.Groups ["sep"].Success && m.Groups ["value"].Success) {
+ sep = m.Groups ["sep"].Value;
+ value = m.Groups ["value"].Value;
+ }
+ return true;
+ }
+
+ protected virtual bool Parse (string argument, OptionContext c)
+ {
+ if (c.Option != null) {
+ ParseValue (argument, c);
+ return true;
+ }
+
+ string f, n, s, v;
+ if (!GetOptionParts (argument, out f, out n, out s, out v))
+ return false;
+
+ Option p;
+ if (Contains (n)) {
+ p = this [n];
+ c.OptionName = f + n;
+ c.Option = p;
+ switch (p.OptionValueType) {
+ case OptionValueType.None:
+ c.OptionValues.Add (n);
+ c.Option.Invoke (c);
+ break;
+ case OptionValueType.Optional:
+ case OptionValueType.Required:
+ ParseValue (v, c);
+ break;
+ }
+ return true;
+ }
+ // no match; is it a bool option?
+ if (ParseBool (argument, n, c))
+ return true;
+ // is it a bundled option?
+ if (ParseBundledValue (f, string.Concat (n + s + v), c))
+ return true;
+
+ return false;
+ }
+
+ private void ParseValue (string option, OptionContext c)
+ {
+ if (option != null)
+ foreach (string o in c.Option.ValueSeparators != null
+ ? option.Split (c.Option.ValueSeparators, StringSplitOptions.None)
+ : new string[]{option}) {
+ c.OptionValues.Add (o);
+ }
+ if (c.OptionValues.Count == c.Option.MaxValueCount ||
+ c.Option.OptionValueType == OptionValueType.Optional)
+ c.Option.Invoke (c);
+ else if (c.OptionValues.Count > c.Option.MaxValueCount) {
+ throw new OptionException (localizer (string.Format (
+ "Error: Found {0} option values when expecting {1}.",
+ c.OptionValues.Count, c.Option.MaxValueCount)),
+ c.OptionName);
+ }
+ }
+
+ private bool ParseBool (string option, string n, OptionContext c)
+ {
+ Option p;
+ string rn;
+ if (n.Length >= 1 && (n [n.Length-1] == '+' || n [n.Length-1] == '-') &&
+ Contains ((rn = n.Substring (0, n.Length-1)))) {
+ p = this [rn];
+ string v = n [n.Length-1] == '+' ? option : null;
+ c.OptionName = option;
+ c.Option = p;
+ c.OptionValues.Add (v);
+ p.Invoke (c);
+ return true;
+ }
+ return false;
+ }
+
+ private bool ParseBundledValue (string f, string n, OptionContext c)
+ {
+ if (f != "-")
+ return false;
+ for (int i = 0; i < n.Length; ++i) {
+ Option p;
+ string opt = f + n [i].ToString ();
+ string rn = n [i].ToString ();
+ if (!Contains (rn)) {
+ if (i == 0)
+ return false;
+ throw new OptionException (string.Format (localizer (
+ "Cannot bundle unregistered option '{0}'."), opt), opt);
+ }
+ p = this [rn];
+ switch (p.OptionValueType) {
+ case OptionValueType.None:
+ Invoke (c, opt, n, p);
+ break;
+ case OptionValueType.Optional:
+ case OptionValueType.Required: {
+ string v = n.Substring (i+1);
+ c.Option = p;
+ c.OptionName = opt;
+ ParseValue (v.Length != 0 ? v : null, c);
+ return true;
+ }
+ default:
+ throw new InvalidOperationException ("Unknown OptionValueType: " + p.OptionValueType);
+ }
+ }
+ return true;
+ }
+
+ private static void Invoke (OptionContext c, string name, string value, Option option)
+ {
+ c.OptionName = name;
+ c.Option = option;
+ c.OptionValues.Add (value);
+ option.Invoke (c);
+ }
+
+ private const int OptionWidth = 29;
+
+ public void WriteOptionDescriptions (TextWriter o)
+ {
+ foreach (Option p in this) {
+ int written = 0;
+ if (!WriteOptionPrototype (o, p, ref written))
+ continue;
+
+ if (written < OptionWidth)
+ o.Write (new string (' ', OptionWidth - written));
+ else {
+ o.WriteLine ();
+ o.Write (new string (' ', OptionWidth));
+ }
+
+ bool indent = false;
+ string prefix = new string (' ', OptionWidth+2);
+ foreach (string line in GetLines (localizer (GetDescription (p.Description)))) {
+ if (indent)
+ o.Write (prefix);
+ o.WriteLine (line);
+ indent = true;
+ }
+ }
+ }
+
+ bool WriteOptionPrototype (TextWriter o, Option p, ref int written)
+ {
+ string[] names = p.Names;
+
+ int i = GetNextOptionIndex (names, 0);
+ if (i == names.Length)
+ return false;
+
+ if (names [i].Length == 1) {
+ Write (o, ref written, " -");
+ Write (o, ref written, names [0]);
+ }
+ else {
+ Write (o, ref written, " --");
+ Write (o, ref written, names [0]);
+ }
+
+ for ( i = GetNextOptionIndex (names, i+1);
+ i < names.Length; i = GetNextOptionIndex (names, i+1)) {
+ Write (o, ref written, ", ");
+ Write (o, ref written, names [i].Length == 1 ? "-" : "--");
+ Write (o, ref written, names [i]);
+ }
+
+ if (p.OptionValueType == OptionValueType.Optional ||
+ p.OptionValueType == OptionValueType.Required) {
+ if (p.OptionValueType == OptionValueType.Optional) {
+ Write (o, ref written, localizer ("["));
+ }
+ Write (o, ref written, localizer ("=" + GetArgumentName (0, p.MaxValueCount, p.Description)));
+ string sep = p.ValueSeparators != null && p.ValueSeparators.Length > 0
+ ? p.ValueSeparators [0]
+ : " ";
+ for (int c = 1; c < p.MaxValueCount; ++c) {
+ Write (o, ref written, localizer (sep + GetArgumentName (c, p.MaxValueCount, p.Description)));
+ }
+ if (p.OptionValueType == OptionValueType.Optional) {
+ Write (o, ref written, localizer ("]"));
+ }
+ }
+ return true;
+ }
+
+ static int GetNextOptionIndex (string[] names, int i)
+ {
+ while (i < names.Length && names [i] == "<>") {
+ ++i;
+ }
+ return i;
+ }
+
+ static void Write (TextWriter o, ref int n, string s)
+ {
+ n += s.Length;
+ o.Write (s);
+ }
+
+ private static string GetArgumentName (int index, int maxIndex, string description)
+ {
+ if (description == null)
+ return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
+ string[] nameStart;
+ if (maxIndex == 1)
+ nameStart = new string[]{"{0:", "{"};
+ else
+ nameStart = new string[]{"{" + index + ":"};
+ for (int i = 0; i < nameStart.Length; ++i) {
+ int start, j = 0;
+ do {
+ start = description.IndexOf (nameStart [i], j);
+ } while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false);
+ if (start == -1)
+ continue;
+ int end = description.IndexOf ("}", start);
+ if (end == -1)
+ continue;
+ return description.Substring (start + nameStart [i].Length, end - start - nameStart [i].Length);
+ }
+ return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
+ }
+
+ private static string GetDescription (string description)
+ {
+ if (description == null)
+ return string.Empty;
+ StringBuilder sb = new StringBuilder (description.Length);
+ int start = -1;
+ for (int i = 0; i < description.Length; ++i) {
+ switch (description [i]) {
+ case '{':
+ if (i == start) {
+ sb.Append ('{');
+ start = -1;
+ }
+ else if (start < 0)
+ start = i + 1;
+ break;
+ case '}':
+ if (start < 0) {
+ if ((i+1) == description.Length || description [i+1] != '}')
+ throw new InvalidOperationException ("Invalid option description: " + description);
+ ++i;
+ sb.Append ("}");
+ }
+ else {
+ sb.Append (description.Substring (start, i - start));
+ start = -1;
+ }
+ break;
+ case ':':
+ if (start < 0)
+ goto default;
+ start = i + 1;
+ break;
+ default:
+ if (start < 0)
+ sb.Append (description [i]);
+ break;
+ }
+ }
+ return sb.ToString ();
+ }
+
+ private static IEnumerable<string> GetLines (string description)
+ {
+ if (string.IsNullOrEmpty (description)) {
+ yield return string.Empty;
+ yield break;
+ }
+ int length = 80 - OptionWidth - 1;
+ int start = 0, end;
+ do {
+ end = GetLineEnd (start, length, description);
+ char c = description [end-1];
+ if (char.IsWhiteSpace (c))
+ --end;
+ bool writeContinuation = end != description.Length && !IsEolChar (c);
+ string line = description.Substring (start, end - start) +
+ (writeContinuation ? "-" : "");
+ yield return line;
+ start = end;
+ if (char.IsWhiteSpace (c))
+ ++start;
+ length = 80 - OptionWidth - 2 - 1;
+ } while (end < description.Length);
+ }
+
+ private static bool IsEolChar (char c)
+ {
+ return !char.IsLetterOrDigit (c);
+ }
+
+ private static int GetLineEnd (int start, int length, string description)
+ {
+ int end = System.Math.Min (start + length, description.Length);
+ int sep = -1;
+ for (int i = start; i < end; ++i) {
+ if (description [i] == '\n')
+ return i+1;
+ if (IsEolChar (description [i]))
+ sep = i+1;
+ }
+ if (sep == -1 || end == description.Length)
+ return end;
+ return sep;
+ }
+ }
+}
+
diff --git a/SparkleLib/SparklePaths.cs b/SparkleLib/SparklePaths.cs
new file mode 100644
index 0000000..3c55097
--- /dev/null
+++ b/SparkleLib/SparklePaths.cs
@@ -0,0 +1,36 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+
+namespace SparkleLib {
+
+ public static class SparklePaths {
+
+ public static string HomePath = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
+ public static string SparklePath = Path.Combine (HomePath ,"SparkleShare");
+ public static string SparkleTmpPath = Path.Combine (SparklePath, ".tmp");
+ public static string SparkleConfigPath = Path.Combine (Environment.GetFolderPath (
+ Environment.SpecialFolder.ApplicationData), "sparkleshare");
+ public static string SparkleLocalIconPath = Path.Combine (SparkleConfigPath, "icons");
+
+ public static string SparkleInstallPath = Path.Combine (Defines.PREFIX, "sparkleshare");
+ public static string SparkleIconPath = SparkleHelpers.CombineMore (Defines.DATAROOTDIR, "sparkleshare", "icons");
+
+ }
+}
diff --git a/SparkleLib/SparkleRepoBase.cs b/SparkleLib/SparkleRepoBase.cs
new file mode 100644
index 0000000..cf9d5ac
--- /dev/null
+++ b/SparkleLib/SparkleRepoBase.cs
@@ -0,0 +1,468 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Timers;
+using System.Xml;
+
+namespace SparkleLib {
+
+ public enum SyncStatus {
+ Idle,
+ SyncUp,
+ SyncDown,
+ Error
+ }
+
+
+ public abstract class SparkleRepoBase {
+
+
+
+ private Timer local_timer = new Timer () { Interval = 250 };
+ private Timer remote_timer = new Timer () { Interval = 60000 };
+ private FileSystemWatcher watcher;
+ private SparkleListenerBase listener;
+ private List <double> sizebuffer = new List<double> ();
+ private bool has_changed = false;
+ private Object change_lock = new Object ();
+
+ protected SyncStatus status;
+ protected bool is_buffering = false;
+ protected bool is_polling = true;
+ protected bool server_online = true;
+
+ public readonly SparkleBackend Backend;
+ public readonly string LocalPath;
+ public readonly string Name;
+
+ public abstract bool AnyDifferences { get; }
+ public abstract string Identifier { get; }
+ public abstract string CurrentRevision { get; }
+ public abstract bool SyncUp ();
+ public abstract bool SyncDown ();
+ public abstract bool HasUnsyncedChanges { get; set; }
+
+ public delegate void SyncStatusChangedEventHandler (SyncStatus new_status);
+ public event SyncStatusChangedEventHandler SyncStatusChanged;
+
+ public delegate void NewChangeSetEventHandler (SparkleChangeSet change_set, string source_path);
+ public event NewChangeSetEventHandler NewChangeSet;
+
+ public delegate void ConflictResolvedEventHandler ();
+ public event ConflictResolvedEventHandler ConflictResolved;
+
+ public delegate void ChangesDetectedEventHandler ();
+ public event ChangesDetectedEventHandler ChangesDetected;
+
+
+ public SparkleRepoBase (string path, SparkleBackend backend)
+ {
+ LocalPath = path;
+ Name = Path.GetFileName (LocalPath);
+ Backend = backend;
+
+ SyncStatusChanged += delegate (SyncStatus status) {
+ this.status = status;
+ };
+
+ if (CurrentRevision == null) {
+ CreateInitialChangeSet ();
+ HasUnsyncedChanges = true;
+ }
+
+ CreateWatcher ();
+ CreateListener ();
+
+ this.local_timer.Elapsed += delegate (object o, ElapsedEventArgs args) {
+ CheckForChanges ();
+ };
+
+ this.remote_timer.Elapsed += delegate {
+ if (this.is_polling) {
+ if (CheckForRemoteChanges ())
+ SyncDownBase ();
+ }
+
+ // In the unlikely case that we haven't synced up our
+ // changes or the server was down, sync up again
+ if (HasUnsyncedChanges)
+ SyncUpBase ();
+ };
+
+ this.remote_timer.Start ();
+ this.local_timer.Start ();
+
+ // Sync up everything that changed
+ // since we've been offline
+ if (AnyDifferences) {
+ DisableWatching ();
+ SyncUpBase ();
+
+ while (HasUnsyncedChanges)
+ SyncUpBase ();
+ EnableWatching ();
+ }
+ }
+
+
+ public bool ServerOnline {
+ get {
+ return this.server_online;
+ }
+ }
+
+
+ public SyncStatus Status {
+ get {
+ return this.status;
+ }
+ }
+
+
+ public string Domain {
+ get {
+ Regex regex = new Regex (@"(@|://)([a-z0-9\.-]+)(/|:)");
+ Match match = regex.Match (SparkleConfig.DefaultConfig.GetUrlForFolder (Name));
+
+ if (match.Success)
+ return match.Groups [2].Value;
+ else
+ return null;
+ }
+ }
+
+
+ protected void OnConflictResolved ()
+ {
+ HasUnsyncedChanges = true;
+
+ if (ConflictResolved != null)
+ ConflictResolved ();
+ }
+
+
+ public virtual bool CheckForRemoteChanges () // HasRemoteChanges { get; } ?
+ {
+ return true;
+ }
+
+
+ public virtual List<SparkleChangeSet> GetChangeSets (int count) {
+ return null;
+ }
+
+
+ public virtual bool UsesNotificationCenter {
+ get {
+ return true;
+ }
+ }
+
+
+ public string RemoteName {
+ get {
+ string url = SparkleConfig.DefaultConfig.GetUrlForFolder (Name);
+ return Path.GetFileNameWithoutExtension (url);
+ }
+ }
+
+
+ public bool IsBuffering {
+ get {
+ return this.is_buffering;
+ }
+ }
+
+
+ public bool IsPolling {
+ get {
+ return this.is_polling;
+ }
+ }
+
+
+ // Disposes all resourses of this object
+ public void Dispose ()
+ {
+ this.remote_timer.Dispose ();
+ this.local_timer.Dispose ();
+ this.listener.Dispose ();
+ }
+
+
+ private void CreateWatcher ()
+ {
+ this.watcher = new FileSystemWatcher (LocalPath) {
+ IncludeSubdirectories = true,
+ EnableRaisingEvents = true,
+ Filter = "*"
+ };
+
+ this.watcher.Changed += new FileSystemEventHandler (OnFileActivity);
+ this.watcher.Created += new FileSystemEventHandler (OnFileActivity);
+ this.watcher.Deleted += new FileSystemEventHandler (OnFileActivity);
+ this.watcher.Renamed += new RenamedEventHandler (OnFileActivity);
+ }
+
+
+ private void CreateListener ()
+ {
+ this.listener = SparkleListenerFactory.CreateIrcListener (Domain, Identifier,
+ SparkleConfig.DefaultConfig.GetAnnouncementsForFolder (Name));
+
+ // Stop polling when the connection to the irc channel is succesful
+ this.listener.Connected += delegate {
+ this.is_polling = false;
+
+ // Check for changes manually one more time
+ if (CheckForRemoteChanges ())
+ SyncDownBase ();
+
+ // Push changes that were made since the last disconnect
+ if (HasUnsyncedChanges)
+ SyncUpBase ();
+ };
+
+ // Start polling when the connection to the irc channel is lost
+ this.listener.Disconnected += delegate {
+ SparkleHelpers.DebugInfo (Name, "Falling back to polling");
+ this.is_polling = true;
+ };
+
+ // Fetch changes when there is a message in the irc channel
+ this.listener.Announcement += delegate (SparkleAnnouncement announcement) {
+ string identifier = Identifier;
+
+ if (announcement.FolderIdentifier == identifier &&
+ !announcement.Message.Equals (CurrentRevision)) {
+ if ((Status != SyncStatus.SyncUp) &&
+ (Status != SyncStatus.SyncDown) &&
+ !this.is_buffering) {
+
+ while (this.listener.HasQueueDownAnnouncement (identifier))
+ SyncDownBase ();
+ }
+ }
+ };
+
+ // Start listening
+ if (!this.listener.IsConnected && !this.listener.IsConnecting)
+ this.listener.Connect ();
+ else
+ this.is_polling = false;
+ }
+
+
+ private void CheckForChanges ()
+ {
+ lock (this.change_lock) {
+ if (this.has_changed) {
+ if (this.sizebuffer.Count >= 4)
+ this.sizebuffer.RemoveAt (0);
+
+ DirectoryInfo dir_info = new DirectoryInfo (LocalPath);
+ this.sizebuffer.Add (CalculateFolderSize (dir_info));
+
+ if (this.sizebuffer [0].Equals (this.sizebuffer [1]) &&
+ this.sizebuffer [1].Equals (this.sizebuffer [2]) &&
+ this.sizebuffer [2].Equals (this.sizebuffer [3])) {
+
+ SparkleHelpers.DebugInfo ("Local", "[" + Name + "] Changes have settled.");
+ this.is_buffering = false;
+ this.has_changed = false;
+
+ DisableWatching ();
+ while (AnyDifferences)
+ SyncUpBase ();
+ EnableWatching ();
+ }
+ }
+ }
+ }
+
+
+ // Starts a timer when something changes
+ public void OnFileActivity (object o, FileSystemEventArgs args)
+ {
+ if (args.FullPath.Contains ("/."))
+ return;
+
+ WatcherChangeTypes wct = args.ChangeType;
+
+ if (AnyDifferences) {
+ this.is_buffering = true;
+
+ // Only fire the event if the timer has been stopped.
+ // This prevents multiple events from being raised whilst "buffering".
+ if (!this.has_changed) {
+ if (ChangesDetected != null)
+ ChangesDetected ();
+ }
+
+ SparkleHelpers.DebugInfo ("Event", "[" + Name + "] " + wct.ToString () + " '" + args.Name + "'");
+ SparkleHelpers.DebugInfo ("Event", "[" + Name + "] Changes found, checking if settled.");
+
+ this.remote_timer.Stop ();
+
+ lock (this.change_lock) {
+ this.has_changed = true;
+ }
+ }
+ }
+
+
+ private void SyncUpBase ()
+ {
+ try {
+ this.local_timer.Stop ();
+ this.remote_timer.Stop ();
+
+ SparkleHelpers.DebugInfo ("SyncUp", "[" + Name + "] Initiated");
+
+ if (SyncStatusChanged != null)
+ SyncStatusChanged (SyncStatus.SyncUp);
+
+ if (SyncUp ()) {
+ SparkleHelpers.DebugInfo ("SyncUp", "[" + Name + "] Done");
+
+ HasUnsyncedChanges = false;
+
+ if (SyncStatusChanged != null)
+ SyncStatusChanged (SyncStatus.Idle);
+
+ this.listener.AnnounceBase (new SparkleAnnouncement (Identifier, CurrentRevision));
+
+ } else {
+ SparkleHelpers.DebugInfo ("SyncUp", "[" + Name + "] Error");
+
+ HasUnsyncedChanges = true;
+ SyncDownBase ();
+
+ if (SyncUp ()) {
+ HasUnsyncedChanges = false;
+
+ if (SyncStatusChanged != null)
+ SyncStatusChanged (SyncStatus.Idle);
+
+ this.listener.AnnounceBase (new SparkleAnnouncement (Identifier, CurrentRevision));
+
+ } else {
+ if (SyncStatusChanged != null)
+ SyncStatusChanged (SyncStatus.Error);
+ }
+ }
+
+ } finally {
+ this.remote_timer.Start ();
+ this.local_timer.Start ();
+ }
+ }
+
+
+ private void SyncDownBase ()
+ {
+ SparkleHelpers.DebugInfo ("SyncDown", "[" + Name + "] Initiated");
+ this.remote_timer.Stop ();
+
+ if (SyncStatusChanged != null)
+ SyncStatusChanged (SyncStatus.SyncDown);
+
+ if (SyncDown ()) {
+ SparkleHelpers.DebugInfo ("SyncDown", "[" + Name + "] Done");
+ this.server_online = true;
+
+ if (SyncStatusChanged != null)
+ SyncStatusChanged (SyncStatus.Idle);
+
+ if (NewChangeSet != null)
+ NewChangeSet (GetChangeSets (1) [0], LocalPath);
+
+ // There could be changes from a
+ // resolved conflict. Tries only once,
+ //then let the timer try again periodicallly
+ if (HasUnsyncedChanges)
+ SyncUp ();
+
+ } else {
+ SparkleHelpers.DebugInfo ("SyncDown", "[" + Name + "] Error");
+ this.server_online = false;
+
+ if (SyncStatusChanged != null)
+ SyncStatusChanged (SyncStatus.Error);
+ }
+
+ if (SyncStatusChanged != null)
+ SyncStatusChanged (SyncStatus.Idle);
+
+ this.remote_timer.Start ();
+ }
+
+
+ public void DisableWatching ()
+ {
+ this.watcher.EnableRaisingEvents = false;
+ }
+
+
+ public void EnableWatching ()
+ {
+ this.watcher.EnableRaisingEvents = true;
+ }
+
+
+ // Create an initial change set when the
+ // user has fetched an empty remote folder
+ public virtual void CreateInitialChangeSet ()
+ {
+ string file_path = Path.Combine (LocalPath, "SparkleShare.txt");
+ TextWriter writer = new StreamWriter (file_path);
+ writer.WriteLine (":)");
+ writer.Close ();
+ }
+
+
+ // Recursively gets a folder's size in bytes
+ private double CalculateFolderSize (DirectoryInfo parent)
+ {
+ if (!System.IO.Directory.Exists (parent.ToString ()))
+ return 0;
+
+ double size = 0;
+
+ // Ignore the temporary 'rebase-apply' directory. This prevents potential
+ // crashes when files are being queried whilst the files have already been deleted.
+ if (parent.Name.Equals ("rebase-apply"))
+ return 0;
+
+ foreach (FileInfo file in parent.GetFiles()) {
+ if (!file.Exists)
+ return 0;
+
+ size += file.Length;
+ }
+
+ foreach (DirectoryInfo directory in parent.GetDirectories())
+ size += CalculateFolderSize (directory);
+
+ return size;
+ }
+ }
+}
diff --git a/SparkleShare/Mac/AppDelegate.cs b/SparkleShare/Mac/AppDelegate.cs
new file mode 100644
index 0000000..9e246c1
--- /dev/null
+++ b/SparkleShare/Mac/AppDelegate.cs
@@ -0,0 +1,31 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Drawing;
+
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+
+namespace SparkleShare
+{
+ public partial class AppDelegate : NSApplicationDelegate
+ {
+
+ }
+}
diff --git a/SparkleShare/Mac/Info.plist b/SparkleShare/Mac/Info.plist
new file mode 100644
index 0000000..8117ef3
--- /dev/null
+++ b/SparkleShare/Mac/Info.plist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleExecutable</key>
+ <string></string>
+ <key>CFBundleIconFile</key>
+ <string>sparkleshare</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.sparkleshare.sparkleshare</string>
+ <key>CFBundleName</key>
+ <string>SparkleShare</string>
+ <key>LSMinimumSystemVersion</key>
+ <string>10.6</string>
+ <key>NSMainNibFile</key>
+ <string>MainMenu</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/SparkleShare/Mac/MainMenu.xib b/SparkleShare/Mac/MainMenu.xib
new file mode 100644
index 0000000..adc6dd8
--- /dev/null
+++ b/SparkleShare/Mac/MainMenu.xib
@@ -0,0 +1,2242 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1060</int>
+ <string key="IBDocument.SystemVersion">10J869</string>
+ <string key="IBDocument.InterfaceBuilderVersion">851</string>
+ <string key="IBDocument.AppKitVersion">1038.35</string>
+ <string key="IBDocument.HIToolboxVersion">461.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">851</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="57"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+ <integer value="1" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1021">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSCustomObject" id="1014">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1050">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSMenu" id="649796088">
+ <string key="NSTitle">AMainMenu</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="694149608">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">SparkleShare</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <object class="NSCustomResource" key="NSOnImage" id="35465992">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="502551668">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="110575045">
+ <string key="NSTitle">SparkleShare</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="238522557">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">About SparkleShare</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="304266470">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1046388886">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Services</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="752062318">
+ <string key="NSTitle">Services</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSName">_NSServicesMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="646227648">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="755159360">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Hide SparkleShare</string>
+ <string key="NSKeyEquiv">h</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="342932134">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Hide Others</string>
+ <string key="NSKeyEquiv">h</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="908899353">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Show All</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1056857174">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="632727374">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Quit SparkleShare</string>
+ <string key="NSKeyEquiv">q</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ <string key="NSName">_NSAppleMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="952259628">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Edit</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="789758025">
+ <string key="NSTitle">Edit</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1058277027">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Undo</string>
+ <string key="NSKeyEquiv">z</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="790794224">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Redo</string>
+ <string key="NSKeyEquiv">Z</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="1040322652">
+ <reference key="NSMenu" ref="789758025"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="296257095">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Cut</string>
+ <string key="NSKeyEquiv">x</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="860595796">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Copy</string>
+ <string key="NSKeyEquiv">c</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="29853731">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Paste</string>
+ <string key="NSKeyEquiv">v</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="82994268">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Paste and Match Style</string>
+ <string key="NSKeyEquiv">V</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="437104165">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Delete</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="583158037">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Select All</string>
+ <string key="NSKeyEquiv">a</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="212016141">
+ <reference key="NSMenu" ref="789758025"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="892235320">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Find</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="963351320">
+ <string key="NSTitle">Find</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="447796847">
+ <reference key="NSMenu" ref="963351320"/>
+ <string key="NSTitle">Find…</string>
+ <string key="NSKeyEquiv">f</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">1</int>
+ </object>
+ <object class="NSMenuItem" id="326711663">
+ <reference key="NSMenu" ref="963351320"/>
+ <string key="NSTitle">Find Next</string>
+ <string key="NSKeyEquiv">g</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">2</int>
+ </object>
+ <object class="NSMenuItem" id="270902937">
+ <reference key="NSMenu" ref="963351320"/>
+ <string key="NSTitle">Find Previous</string>
+ <string key="NSKeyEquiv">G</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">3</int>
+ </object>
+ <object class="NSMenuItem" id="159080638">
+ <reference key="NSMenu" ref="963351320"/>
+ <string key="NSTitle">Use Selection for Find</string>
+ <string key="NSKeyEquiv">e</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">7</int>
+ </object>
+ <object class="NSMenuItem" id="88285865">
+ <reference key="NSMenu" ref="963351320"/>
+ <string key="NSTitle">Jump to Selection</string>
+ <string key="NSKeyEquiv">j</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="972420730">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Spelling and Grammar</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="769623530">
+ <string key="NSTitle">Spelling and Grammar</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="679648819">
+ <reference key="NSMenu" ref="769623530"/>
+ <string key="NSTitle">Show Spelling and Grammar</string>
+ <string key="NSKeyEquiv">:</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="96193923">
+ <reference key="NSMenu" ref="769623530"/>
+ <string key="NSTitle">Check Document Now</string>
+ <string key="NSKeyEquiv">;</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="859480356">
+ <reference key="NSMenu" ref="769623530"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="948374510">
+ <reference key="NSMenu" ref="769623530"/>
+ <string key="NSTitle">Check Spelling While Typing</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="967646866">
+ <reference key="NSMenu" ref="769623530"/>
+ <string key="NSTitle">Check Grammar With Spelling</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="795346622">
+ <reference key="NSMenu" ref="769623530"/>
+ <string key="NSTitle">Correct Spelling Automatically</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="507821607">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Substitutions</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="698887838">
+ <string key="NSTitle">Substitutions</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="65139061">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Show Substitutions</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="19036812">
+ <reference key="NSMenu" ref="698887838"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="605118523">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Smart Copy/Paste</string>
+ <string key="NSKeyEquiv">f</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">1</int>
+ </object>
+ <object class="NSMenuItem" id="197661976">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Smart Quotes</string>
+ <string key="NSKeyEquiv">g</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">2</int>
+ </object>
+ <object class="NSMenuItem" id="672708820">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Smart Dashes</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="708854459">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Smart Links</string>
+ <string key="NSKeyEquiv">G</string>
+ <int key="NSKeyEquivModMask">1179648</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <int key="NSTag">3</int>
+ </object>
+ <object class="NSMenuItem" id="537092702">
+ <reference key="NSMenu" ref="698887838"/>
+ <string key="NSTitle">Text Replacement</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="288088188">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Transformations</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="579392910">
+ <string key="NSTitle">Transformations</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1060694897">
+ <reference key="NSMenu" ref="579392910"/>
+ <string key="NSTitle">Make Upper Case</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="879586729">
+ <reference key="NSMenu" ref="579392910"/>
+ <string key="NSTitle">Make Lower Case</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="56570060">
+ <reference key="NSMenu" ref="579392910"/>
+ <string key="NSTitle">Capitalize</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="676164635">
+ <reference key="NSMenu" ref="789758025"/>
+ <string key="NSTitle">Speech</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="785027613">
+ <string key="NSTitle">Speech</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="731782645">
+ <reference key="NSMenu" ref="785027613"/>
+ <string key="NSTitle">Start Speaking</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="680220178">
+ <reference key="NSMenu" ref="785027613"/>
+ <string key="NSTitle">Stop Speaking</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="713487014">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Window</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="835318025">
+ <string key="NSTitle">Window</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1011231497">
+ <reference key="NSMenu" ref="835318025"/>
+ <string key="NSTitle">Minimize</string>
+ <string key="NSKeyEquiv">m</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="575023229">
+ <reference key="NSMenu" ref="835318025"/>
+ <string key="NSTitle">Zoom</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="299356726">
+ <reference key="NSMenu" ref="835318025"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ <object class="NSMenuItem" id="625202149">
+ <reference key="NSMenu" ref="835318025"/>
+ <string key="NSTitle">Bring All to Front</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ <string key="NSName">_NSWindowsMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="448692316">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle">Help</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="992780483">
+ <string key="NSTitle">Help</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="105068016">
+ <reference key="NSMenu" ref="992780483"/>
+ <string key="NSTitle">SparkleShare Help</string>
+ <string key="NSKeyEquiv">?</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="35465992"/>
+ <reference key="NSMixedImage" ref="502551668"/>
+ </object>
+ </object>
+ <string key="NSName">_NSHelpMenu</string>
+ </object>
+ </object>
+ </object>
+ <string key="NSName">_NSMainMenu</string>
+ </object>
+ <object class="NSCustomObject" id="755631768">
+ <string key="NSClassName">NSFontManager</string>
+ </object>
+ <object class="NSCustomObject" id="947627720">
+ <string key="NSClassName">AppDelegate</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performMiniaturize:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1011231497"/>
+ </object>
+ <int key="connectionID">37</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">arrangeInFront:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="625202149"/>
+ </object>
+ <int key="connectionID">39</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleContinuousSpellChecking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="948374510"/>
+ </object>
+ <int key="connectionID">222</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">undo:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1058277027"/>
+ </object>
+ <int key="connectionID">223</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">copy:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="860595796"/>
+ </object>
+ <int key="connectionID">224</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">checkSpelling:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="96193923"/>
+ </object>
+ <int key="connectionID">225</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">paste:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="29853731"/>
+ </object>
+ <int key="connectionID">226</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">stopSpeaking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="680220178"/>
+ </object>
+ <int key="connectionID">227</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cut:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="296257095"/>
+ </object>
+ <int key="connectionID">228</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showGuessPanel:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="679648819"/>
+ </object>
+ <int key="connectionID">230</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">redo:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="790794224"/>
+ </object>
+ <int key="connectionID">231</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">selectAll:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="583158037"/>
+ </object>
+ <int key="connectionID">232</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">startSpeaking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="731782645"/>
+ </object>
+ <int key="connectionID">233</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">delete:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="437104165"/>
+ </object>
+ <int key="connectionID">235</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performZoom:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="575023229"/>
+ </object>
+ <int key="connectionID">240</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="447796847"/>
+ </object>
+ <int key="connectionID">241</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">centerSelectionInVisibleArea:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="88285865"/>
+ </object>
+ <int key="connectionID">245</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleGrammarChecking:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="967646866"/>
+ </object>
+ <int key="connectionID">347</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleSmartInsertDelete:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="605118523"/>
+ </object>
+ <int key="connectionID">355</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticQuoteSubstitution:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="197661976"/>
+ </object>
+ <int key="connectionID">356</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticLinkDetection:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="708854459"/>
+ </object>
+ <int key="connectionID">357</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hide:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="755159360"/>
+ </object>
+ <int key="connectionID">367</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hideOtherApplications:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="342932134"/>
+ </object>
+ <int key="connectionID">368</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">unhideAllApplications:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="908899353"/>
+ </object>
+ <int key="connectionID">370</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">terminate:</string>
+ <reference key="source" ref="1050"/>
+ <reference key="destination" ref="632727374"/>
+ </object>
+ <int key="connectionID">449</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticSpellingCorrection:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="795346622"/>
+ </object>
+ <int key="connectionID">456</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontSubstitutionsPanel:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="65139061"/>
+ </object>
+ <int key="connectionID">458</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticDashSubstitution:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="672708820"/>
+ </object>
+ <int key="connectionID">461</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticTextReplacement:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="537092702"/>
+ </object>
+ <int key="connectionID">463</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">uppercaseWord:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="1060694897"/>
+ </object>
+ <int key="connectionID">464</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">capitalizeWord:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="56570060"/>
+ </object>
+ <int key="connectionID">467</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">lowercaseWord:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="879586729"/>
+ </object>
+ <int key="connectionID">468</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">pasteAsPlainText:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="82994268"/>
+ </object>
+ <int key="connectionID">486</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="326711663"/>
+ </object>
+ <int key="connectionID">487</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="270902937"/>
+ </object>
+ <int key="connectionID">488</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="159080638"/>
+ </object>
+ <int key="connectionID">489</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showHelp:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="105068016"/>
+ </object>
+ <int key="connectionID">493</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="1021"/>
+ <reference key="destination" ref="947627720"/>
+ </object>
+ <int key="connectionID">534</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="1050"/>
+ <reference key="destination" ref="238522557"/>
+ </object>
+ <int key="connectionID">538</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="1048"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1021"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="1014"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1050"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">29</int>
+ <reference key="object" ref="649796088"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="713487014"/>
+ <reference ref="694149608"/>
+ <reference ref="952259628"/>
+ <reference ref="448692316"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">19</int>
+ <reference key="object" ref="713487014"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="835318025"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">56</int>
+ <reference key="object" ref="694149608"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="110575045"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">217</int>
+ <reference key="object" ref="952259628"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="789758025"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">205</int>
+ <reference key="object" ref="789758025"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="437104165"/>
+ <reference ref="583158037"/>
+ <reference ref="1058277027"/>
+ <reference ref="212016141"/>
+ <reference ref="296257095"/>
+ <reference ref="29853731"/>
+ <reference ref="860595796"/>
+ <reference ref="1040322652"/>
+ <reference ref="790794224"/>
+ <reference ref="892235320"/>
+ <reference ref="972420730"/>
+ <reference ref="676164635"/>
+ <reference ref="507821607"/>
+ <reference ref="288088188"/>
+ <reference ref="82994268"/>
+ </object>
+ <reference key="parent" ref="952259628"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">202</int>
+ <reference key="object" ref="437104165"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">198</int>
+ <reference key="object" ref="583158037"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">207</int>
+ <reference key="object" ref="1058277027"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">214</int>
+ <reference key="object" ref="212016141"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">199</int>
+ <reference key="object" ref="296257095"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">203</int>
+ <reference key="object" ref="29853731"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">197</int>
+ <reference key="object" ref="860595796"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">206</int>
+ <reference key="object" ref="1040322652"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">215</int>
+ <reference key="object" ref="790794224"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">218</int>
+ <reference key="object" ref="892235320"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="963351320"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">216</int>
+ <reference key="object" ref="972420730"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="769623530"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">200</int>
+ <reference key="object" ref="769623530"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="948374510"/>
+ <reference ref="96193923"/>
+ <reference ref="679648819"/>
+ <reference ref="967646866"/>
+ <reference ref="859480356"/>
+ <reference ref="795346622"/>
+ </object>
+ <reference key="parent" ref="972420730"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">219</int>
+ <reference key="object" ref="948374510"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">201</int>
+ <reference key="object" ref="96193923"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">204</int>
+ <reference key="object" ref="679648819"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">220</int>
+ <reference key="object" ref="963351320"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="270902937"/>
+ <reference ref="88285865"/>
+ <reference ref="159080638"/>
+ <reference ref="326711663"/>
+ <reference ref="447796847"/>
+ </object>
+ <reference key="parent" ref="892235320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">213</int>
+ <reference key="object" ref="270902937"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">210</int>
+ <reference key="object" ref="88285865"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">221</int>
+ <reference key="object" ref="159080638"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">208</int>
+ <reference key="object" ref="326711663"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">209</int>
+ <reference key="object" ref="447796847"/>
+ <reference key="parent" ref="963351320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">57</int>
+ <reference key="object" ref="110575045"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="238522557"/>
+ <reference ref="755159360"/>
+ <reference ref="908899353"/>
+ <reference ref="632727374"/>
+ <reference ref="646227648"/>
+ <reference ref="304266470"/>
+ <reference ref="1046388886"/>
+ <reference ref="1056857174"/>
+ <reference ref="342932134"/>
+ </object>
+ <reference key="parent" ref="694149608"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">58</int>
+ <reference key="object" ref="238522557"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">134</int>
+ <reference key="object" ref="755159360"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">150</int>
+ <reference key="object" ref="908899353"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">136</int>
+ <reference key="object" ref="632727374"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">144</int>
+ <reference key="object" ref="646227648"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">236</int>
+ <reference key="object" ref="304266470"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">131</int>
+ <reference key="object" ref="1046388886"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="752062318"/>
+ </object>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">149</int>
+ <reference key="object" ref="1056857174"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">145</int>
+ <reference key="object" ref="342932134"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">130</int>
+ <reference key="object" ref="752062318"/>
+ <reference key="parent" ref="1046388886"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">24</int>
+ <reference key="object" ref="835318025"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="299356726"/>
+ <reference ref="625202149"/>
+ <reference ref="575023229"/>
+ <reference ref="1011231497"/>
+ </object>
+ <reference key="parent" ref="713487014"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">92</int>
+ <reference key="object" ref="299356726"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="625202149"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">239</int>
+ <reference key="object" ref="575023229"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">23</int>
+ <reference key="object" ref="1011231497"/>
+ <reference key="parent" ref="835318025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">211</int>
+ <reference key="object" ref="676164635"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="785027613"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">212</int>
+ <reference key="object" ref="785027613"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="680220178"/>
+ <reference ref="731782645"/>
+ </object>
+ <reference key="parent" ref="676164635"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">195</int>
+ <reference key="object" ref="680220178"/>
+ <reference key="parent" ref="785027613"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">196</int>
+ <reference key="object" ref="731782645"/>
+ <reference key="parent" ref="785027613"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">346</int>
+ <reference key="object" ref="967646866"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">348</int>
+ <reference key="object" ref="507821607"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="698887838"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">349</int>
+ <reference key="object" ref="698887838"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="605118523"/>
+ <reference ref="197661976"/>
+ <reference ref="708854459"/>
+ <reference ref="65139061"/>
+ <reference ref="19036812"/>
+ <reference ref="672708820"/>
+ <reference ref="537092702"/>
+ </object>
+ <reference key="parent" ref="507821607"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">350</int>
+ <reference key="object" ref="605118523"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">351</int>
+ <reference key="object" ref="197661976"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">354</int>
+ <reference key="object" ref="708854459"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">420</int>
+ <reference key="object" ref="755631768"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">450</int>
+ <reference key="object" ref="288088188"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="579392910"/>
+ </object>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">451</int>
+ <reference key="object" ref="579392910"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1060694897"/>
+ <reference ref="879586729"/>
+ <reference ref="56570060"/>
+ </object>
+ <reference key="parent" ref="288088188"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">452</int>
+ <reference key="object" ref="1060694897"/>
+ <reference key="parent" ref="579392910"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">453</int>
+ <reference key="object" ref="859480356"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">454</int>
+ <reference key="object" ref="795346622"/>
+ <reference key="parent" ref="769623530"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">457</int>
+ <reference key="object" ref="65139061"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">459</int>
+ <reference key="object" ref="19036812"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">460</int>
+ <reference key="object" ref="672708820"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">462</int>
+ <reference key="object" ref="537092702"/>
+ <reference key="parent" ref="698887838"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">465</int>
+ <reference key="object" ref="879586729"/>
+ <reference key="parent" ref="579392910"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">466</int>
+ <reference key="object" ref="56570060"/>
+ <reference key="parent" ref="579392910"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">485</int>
+ <reference key="object" ref="82994268"/>
+ <reference key="parent" ref="789758025"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">490</int>
+ <reference key="object" ref="448692316"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="992780483"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">491</int>
+ <reference key="object" ref="992780483"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="105068016"/>
+ </object>
+ <reference key="parent" ref="448692316"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">492</int>
+ <reference key="object" ref="105068016"/>
+ <reference key="parent" ref="992780483"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">533</int>
+ <reference key="object" ref="947627720"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-3.IBPluginDependency</string>
+ <string>130.IBEditorWindowLastContentRect</string>
+ <string>130.IBPluginDependency</string>
+ <string>130.ImportedFromIB2</string>
+ <string>130.editorWindowContentRectSynchronizationRect</string>
+ <string>131.IBPluginDependency</string>
+ <string>131.ImportedFromIB2</string>
+ <string>134.IBPluginDependency</string>
+ <string>134.ImportedFromIB2</string>
+ <string>136.IBPluginDependency</string>
+ <string>136.ImportedFromIB2</string>
+ <string>144.IBPluginDependency</string>
+ <string>144.ImportedFromIB2</string>
+ <string>145.IBPluginDependency</string>
+ <string>145.ImportedFromIB2</string>
+ <string>149.IBPluginDependency</string>
+ <string>149.ImportedFromIB2</string>
+ <string>150.IBPluginDependency</string>
+ <string>150.ImportedFromIB2</string>
+ <string>19.IBPluginDependency</string>
+ <string>19.ImportedFromIB2</string>
+ <string>195.IBPluginDependency</string>
+ <string>195.ImportedFromIB2</string>
+ <string>196.IBPluginDependency</string>
+ <string>196.ImportedFromIB2</string>
+ <string>197.IBPluginDependency</string>
+ <string>197.ImportedFromIB2</string>
+ <string>198.IBPluginDependency</string>
+ <string>198.ImportedFromIB2</string>
+ <string>199.IBPluginDependency</string>
+ <string>199.ImportedFromIB2</string>
+ <string>200.IBEditorWindowLastContentRect</string>
+ <string>200.IBPluginDependency</string>
+ <string>200.ImportedFromIB2</string>
+ <string>200.editorWindowContentRectSynchronizationRect</string>
+ <string>201.IBPluginDependency</string>
+ <string>201.ImportedFromIB2</string>
+ <string>202.IBPluginDependency</string>
+ <string>202.ImportedFromIB2</string>
+ <string>203.IBPluginDependency</string>
+ <string>203.ImportedFromIB2</string>
+ <string>204.IBPluginDependency</string>
+ <string>204.ImportedFromIB2</string>
+ <string>205.IBEditorWindowLastContentRect</string>
+ <string>205.IBPluginDependency</string>
+ <string>205.ImportedFromIB2</string>
+ <string>205.editorWindowContentRectSynchronizationRect</string>
+ <string>206.IBPluginDependency</string>
+ <string>206.ImportedFromIB2</string>
+ <string>207.IBPluginDependency</string>
+ <string>207.ImportedFromIB2</string>
+ <string>208.IBPluginDependency</string>
+ <string>208.ImportedFromIB2</string>
+ <string>209.IBPluginDependency</string>
+ <string>209.ImportedFromIB2</string>
+ <string>210.IBPluginDependency</string>
+ <string>210.ImportedFromIB2</string>
+ <string>211.IBPluginDependency</string>
+ <string>211.ImportedFromIB2</string>
+ <string>212.IBPluginDependency</string>
+ <string>212.ImportedFromIB2</string>
+ <string>212.editorWindowContentRectSynchronizationRect</string>
+ <string>213.IBPluginDependency</string>
+ <string>213.ImportedFromIB2</string>
+ <string>214.IBPluginDependency</string>
+ <string>214.ImportedFromIB2</string>
+ <string>215.IBPluginDependency</string>
+ <string>215.ImportedFromIB2</string>
+ <string>216.IBPluginDependency</string>
+ <string>216.ImportedFromIB2</string>
+ <string>217.IBPluginDependency</string>
+ <string>217.ImportedFromIB2</string>
+ <string>218.IBPluginDependency</string>
+ <string>218.ImportedFromIB2</string>
+ <string>219.IBPluginDependency</string>
+ <string>219.ImportedFromIB2</string>
+ <string>220.IBEditorWindowLastContentRect</string>
+ <string>220.IBPluginDependency</string>
+ <string>220.ImportedFromIB2</string>
+ <string>220.editorWindowContentRectSynchronizationRect</string>
+ <string>221.IBPluginDependency</string>
+ <string>221.ImportedFromIB2</string>
+ <string>23.IBPluginDependency</string>
+ <string>23.ImportedFromIB2</string>
+ <string>236.IBPluginDependency</string>
+ <string>236.ImportedFromIB2</string>
+ <string>239.IBPluginDependency</string>
+ <string>239.ImportedFromIB2</string>
+ <string>24.IBEditorWindowLastContentRect</string>
+ <string>24.IBPluginDependency</string>
+ <string>24.ImportedFromIB2</string>
+ <string>24.editorWindowContentRectSynchronizationRect</string>
+ <string>29.IBEditorWindowLastContentRect</string>
+ <string>29.IBPluginDependency</string>
+ <string>29.ImportedFromIB2</string>
+ <string>29.WindowOrigin</string>
+ <string>29.editorWindowContentRectSynchronizationRect</string>
+ <string>346.IBPluginDependency</string>
+ <string>346.ImportedFromIB2</string>
+ <string>348.IBPluginDependency</string>
+ <string>348.ImportedFromIB2</string>
+ <string>349.IBEditorWindowLastContentRect</string>
+ <string>349.IBPluginDependency</string>
+ <string>349.ImportedFromIB2</string>
+ <string>349.editorWindowContentRectSynchronizationRect</string>
+ <string>350.IBPluginDependency</string>
+ <string>350.ImportedFromIB2</string>
+ <string>351.IBPluginDependency</string>
+ <string>351.ImportedFromIB2</string>
+ <string>354.IBPluginDependency</string>
+ <string>354.ImportedFromIB2</string>
+ <string>450.IBPluginDependency</string>
+ <string>451.IBEditorWindowLastContentRect</string>
+ <string>451.IBPluginDependency</string>
+ <string>452.IBPluginDependency</string>
+ <string>453.IBPluginDependency</string>
+ <string>454.IBPluginDependency</string>
+ <string>457.IBPluginDependency</string>
+ <string>459.IBPluginDependency</string>
+ <string>460.IBPluginDependency</string>
+ <string>462.IBPluginDependency</string>
+ <string>465.IBPluginDependency</string>
+ <string>466.IBPluginDependency</string>
+ <string>485.IBPluginDependency</string>
+ <string>490.IBPluginDependency</string>
+ <string>491.IBEditorWindowLastContentRect</string>
+ <string>491.IBPluginDependency</string>
+ <string>492.IBPluginDependency</string>
+ <string>5.IBPluginDependency</string>
+ <string>5.ImportedFromIB2</string>
+ <string>56.IBPluginDependency</string>
+ <string>56.ImportedFromIB2</string>
+ <string>57.IBEditorWindowLastContentRect</string>
+ <string>57.IBPluginDependency</string>
+ <string>57.ImportedFromIB2</string>
+ <string>57.editorWindowContentRectSynchronizationRect</string>
+ <string>58.IBPluginDependency</string>
+ <string>58.ImportedFromIB2</string>
+ <string>92.IBPluginDependency</string>
+ <string>92.ImportedFromIB2</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{529, 686}, {64, 6}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{436, 809}, {64, 6}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{753, 187}, {275, 113}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{608, 612}, {275, 83}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{470, 439}, {254, 283}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{187, 434}, {243, 243}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{608, 612}, {167, 43}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{753, 217}, {238, 103}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{608, 612}, {241, 103}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{514, 649}, {194, 73}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{525, 802}, {197, 73}}</string>
+ <string>{{346, 722}, {300, 20}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{74, 862}</string>
+ <string>{{6, 978}, {478, 20}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{746, 287}, {220, 133}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{608, 612}, {215, 63}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{724, 419}, {170, 63}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{585, 699}, {194, 23}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{358, 569}, {223, 153}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{23, 794}, {245, 183}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">538</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">AppDelegate</string>
+ <string key="superclassName">NSResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSApplication</string>
+ <string key="superclassName">NSResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="822405504">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSApplication</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="850738725">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSApplication</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="624831158">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSApplication</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSApplication</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSApplication</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSBrowser</string>
+ <string key="superclassName">NSControl</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSBrowser.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSControl</string>
+ <string key="superclassName">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="310914472">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSFontManager</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="946436764">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSFormatter</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSMatrix</string>
+ <string key="superclassName">NSControl</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSMenu</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="1056362899">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSMenuItem</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="472958451">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSMovieView</string>
+ <string key="superclassName">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSMovieView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <reference key="sourceIdentifier" ref="822405504"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <reference key="sourceIdentifier" ref="850738725"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <reference key="sourceIdentifier" ref="624831158"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <reference key="sourceIdentifier" ref="310914472"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <reference key="sourceIdentifier" ref="946436764"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <reference key="sourceIdentifier" ref="1056362899"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="809545482">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="260078765">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSResponder</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSTableView</string>
+ <string key="superclassName">NSControl</string>
+ <reference key="sourceIdentifier" ref="809545482"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSText</string>
+ <string key="superclassName">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSText.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSTextView</string>
+ <string key="superclassName">NSText</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSTextView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSView</string>
+ <reference key="sourceIdentifier" ref="472958451"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSView</string>
+ <string key="superclassName">NSResponder</string>
+ <reference key="sourceIdentifier" ref="260078765"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSWindow</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSWindow</string>
+ <string key="superclassName">NSResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSWindow</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <integer value="1060" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="3000" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../MacCocoaApp.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMenuCheckmark</string>
+ <string>NSMenuMixedState</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>{9, 8}</string>
+ <string>{7, 2}</string>
+ </object>
+ </object>
+ </data>
+</archive>
diff --git a/SparkleShare/Mac/MainMenu.xib.designer.cs b/SparkleShare/Mac/MainMenu.xib.designer.cs
new file mode 100644
index 0000000..01952cd
--- /dev/null
+++ b/SparkleShare/Mac/MainMenu.xib.designer.cs
@@ -0,0 +1,18 @@
+// ------------------------------------------------------------------------------
+// <autogenerated>
+// This code was generated by a tool.
+// Mono Runtime Version: 2.0.50727.1433
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace SparkleShare {
+
+
+ // Should subclass MonoMac.AppKit.NSResponder
+ [MonoMac.Foundation.Register("AppDelegate")]
+ public partial class AppDelegate {
+ }
+}
diff --git a/SparkleShare/Mac/Makefile.am b/SparkleShare/Mac/Makefile.am
new file mode 100644
index 0000000..cba9205
--- /dev/null
+++ b/SparkleShare/Mac/Makefile.am
@@ -0,0 +1,15 @@
+EXTRA_DIST = \
+ AppDelegate.cs \
+ Info.plist \
+ MainMenu.xib \
+ MainMenu.xib.designer.cs \
+ SparkleAbout.cs \
+ SparkleAlert.cs \
+ SparkleIntro.cs \
+ SparkleLog.cs \
+ SparkleMacController.cs \
+ SparkleShare.csproj \
+ SparkleShare.sln \
+ SparkleStatusIcon.cs \
+ SparkleUI.cs \
+ SparkleWindow.cs
diff --git a/SparkleShare/Mac/Makefile.in b/SparkleShare/Mac/Makefile.in
new file mode 100644
index 0000000..af2797f
--- /dev/null
+++ b/SparkleShare/Mac/Makefile.in
@@ -0,0 +1,402 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = SparkleShare/Mac
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+ AppDelegate.cs \
+ Info.plist \
+ MainMenu.xib \
+ MainMenu.xib.designer.cs \
+ SparkleAbout.cs \
+ SparkleAlert.cs \
+ SparkleIntro.cs \
+ SparkleLog.cs \
+ SparkleMacController.cs \
+ SparkleShare.csproj \
+ SparkleShare.sln \
+ SparkleStatusIcon.cs \
+ SparkleUI.cs \
+ SparkleWindow.cs
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign SparkleShare/Mac/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign SparkleShare/Mac/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SparkleShare/Mac/SparkleAbout.cs b/SparkleShare/Mac/SparkleAbout.cs
new file mode 100644
index 0000000..1f61f14
--- /dev/null
+++ b/SparkleShare/Mac/SparkleAbout.cs
@@ -0,0 +1,184 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Drawing;
+using System.IO;
+
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+using MonoMac.WebKit;
+using SparkleLib;
+
+namespace SparkleShare {
+
+ public class SparkleAbout : NSWindow {
+
+ private NSButton WebsiteButton;
+ private NSButton CreditsButton;
+ private NSBox Box;
+ private NSTextField HeaderTextField;
+ private NSTextField VersionTextField;
+ private NSTextField UpdatesTextField;
+ private NSTextField CreditsTextField;
+
+
+ public SparkleAbout (IntPtr handle) : base (handle) { }
+
+ public SparkleAbout () : base ()
+ {
+ SetFrame (new RectangleF (0, 0, 360, 288), true);
+ Center ();
+
+ Delegate = new SparkleAboutDelegate ();
+ StyleMask = (NSWindowStyle.Closable | NSWindowStyle.Titled);
+ Title = "About SparkleShare";
+ MaxSize = new SizeF (360, 288);
+ MinSize = new SizeF (360, 288);
+ HasShadow = true;
+ BackingType = NSBackingStore.Buffered;
+
+ CreateAbout ();
+ MakeKeyAndOrderFront (this);
+
+ SparkleShare.Controller.NewVersionAvailable += delegate (string new_version) {
+ InvokeOnMainThread (delegate {
+ UpdatesTextField.StringValue = "A newer version (" + new_version + ") is available!";
+ UpdatesTextField.TextColor =
+ NSColor.FromCalibratedRgba (0.96f, 0.47f, 0.0f, 1.0f); // Tango Orange #2
+ });
+ };
+
+ SparkleShare.Controller.VersionUpToDate += delegate {
+ InvokeOnMainThread (delegate {
+ UpdatesTextField.StringValue = "You are running the latest version.";
+ UpdatesTextField.TextColor =
+ NSColor.FromCalibratedRgba (0.31f, 0.60f, 0.02f, 1.0f); // Tango Chameleon #3
+ });
+ };
+
+ CheckForNewVersion ();
+ }
+
+
+ public void CheckForNewVersion ()
+ {
+ SparkleShare.Controller.CheckForNewVersion ();
+ }
+
+
+ private void CreateAbout ()
+ {
+ Box = new NSBox () {
+ FillColor = NSColor.White,
+ Frame = new RectangleF (-1, Frame.Height - 105, Frame.Width + 2, 105),
+ BoxType = NSBoxType.NSBoxCustom
+ };
+
+ HeaderTextField = new NSTextField () {
+ StringValue = "SparkleShare",
+ Frame = new RectangleF (22, Frame.Height - 89, 318, 48),
+ BackgroundColor = NSColor.White,
+ Bordered = false,
+ Editable = false,
+ Font = NSFontManager.SharedFontManager.FontWithFamily
+ ("Lucida Grande", NSFontTraitMask.Condensed, 0, 24)
+ };
+
+ VersionTextField = new NSTextField () {
+ StringValue = Defines.VERSION,
+ Frame = new RectangleF (22, Frame.Height - 94, 318, 22),
+ BackgroundColor = NSColor.White,
+ Bordered = false,
+ Editable = false,
+ Font = NSFontManager.SharedFontManager.FontWithFamily
+ ("Lucida Grande", NSFontTraitMask.Unbold, 0, 11),
+ TextColor = NSColor.DisabledControlText
+ };
+
+ UpdatesTextField = new NSTextField () {
+ StringValue = "Checking for updates...",
+ Frame = new RectangleF (22, Frame.Height - 222, 318, 98),
+ BackgroundColor = NSColor.WindowBackground,
+ Bordered = false,
+ Editable = false,
+ Font = NSFontManager.SharedFontManager.FontWithFamily
+ ("Lucida Grande", NSFontTraitMask.Unbold, 0, 11),
+ TextColor = NSColor.DisabledControlText
+ };
+
+ CreditsTextField = new NSTextField () {
+ StringValue = @"Copyright © 2010–" + DateTime.Now.Year + " Hylke Bons and others" +
+ "\n" +
+ "\n" +
+ "SparkleShare is Free and Open Source Software. You are free to use, modify, and redistribute it " +
+ "under the GNU General Public License version 3 or later.",
+ Frame = new RectangleF (22, Frame.Height - 250, 318, 98),
+ BackgroundColor = NSColor.WindowBackground,
+ Bordered = false,
+ Editable = false,
+ Font = NSFontManager.SharedFontManager.FontWithFamily
+ ("Lucida Grande", NSFontTraitMask.Unbold, 0, 11),
+ };
+
+ WebsiteButton = new NSButton () {
+ Frame = new RectangleF (12, 12, 120, 32),
+ Title = "Visit Website",
+ BezelStyle = NSBezelStyle.Rounded,
+ Font = SparkleUI.Font
+ };
+
+ WebsiteButton.Activated += delegate {
+ NSUrl url = new NSUrl ("http://www.sparkleshare.org/");
+ NSWorkspace.SharedWorkspace.OpenUrl (url);
+ };
+
+ CreditsButton = new NSButton () {
+ Frame = new RectangleF (Frame.Width - 12 - 120, 12, 120, 32),
+ Title = "Show Credits",
+ BezelStyle = NSBezelStyle.Rounded,
+ Font = SparkleUI.Font
+ };
+
+ CreditsButton.Activated += delegate {
+
+ NSUrl url = new NSUrl ("http://www.sparkleshare.org/credits/");
+ NSWorkspace.SharedWorkspace.OpenUrl (url);
+
+ };
+
+ ContentView.AddSubview (Box);
+ ContentView.AddSubview (HeaderTextField);
+ ContentView.AddSubview (VersionTextField);
+ ContentView.AddSubview (UpdatesTextField);
+ ContentView.AddSubview (CreditsTextField);
+ ContentView.AddSubview (CreditsButton);
+ ContentView.AddSubview (WebsiteButton);
+ }
+ }
+
+
+ public class SparkleAboutDelegate : NSWindowDelegate {
+
+ public override bool WindowShouldClose (NSObject sender)
+ {
+ (sender as SparkleAbout).OrderOut (this);
+ return false;
+ }
+ }
+}
diff --git a/SparkleShare/Mac/SparkleAlert.cs b/SparkleShare/Mac/SparkleAlert.cs
new file mode 100644
index 0000000..c74d360
--- /dev/null
+++ b/SparkleShare/Mac/SparkleAlert.cs
@@ -0,0 +1,53 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+using MonoMac.WebKit;
+
+namespace SparkleShare {
+
+ public class SparkleAlert : NSAlert {
+
+ public SparkleAlert () : base ()
+ {
+ MessageText = "SparkleShare couldn't find Git on your system. Do you want to download it?";
+ InformativeText = "Git is required to run SparkleShare.";
+
+ Icon = NSImage.ImageNamed ("sparkleshare.icns");
+
+ AddButton ("Download");
+ AddButton ("Cancel");
+
+ Buttons [0].Activated += delegate {
+ NSUrl url = new NSUrl ("http://code.google.com/p/git-osx-installer/downloads/list");
+ NSWorkspace.SharedWorkspace.OpenUrl (url);
+ Environment.Exit (0);
+ };
+
+ Buttons [1].Activated += delegate {
+ Environment.Exit (-1);
+ };
+ }
+ }
+}
diff --git a/SparkleShare/Mac/SparkleIntro.cs b/SparkleShare/Mac/SparkleIntro.cs
new file mode 100644
index 0000000..db7ea75
--- /dev/null
+++ b/SparkleShare/Mac/SparkleIntro.cs
@@ -0,0 +1,440 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Drawing;
+using System.IO;
+using System.Timers;
+
+using Mono.Unix;
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+using MonoMac.WebKit;
+
+namespace SparkleShare {
+
+ public class SparkleIntro : SparkleWindow {
+
+ private NSButton ContinueButton;
+ private NSButton SyncButton;
+ private NSButton TryAgainButton;
+ private NSButton CancelButton;
+ private NSButton SkipButton;
+ private NSButton OpenFolderButton;
+ private NSButton FinishButton;
+ private NSForm UserInfoForm;
+ private NSProgressIndicator ProgressIndicator;
+ private NSTextField AddressTextField;
+ private NSTextField FolderNameTextField;
+ private NSTextField ServerTypeLabel;
+ private NSTextField AddressLabel;
+ private NSTextField FolderNameLabel;
+ private NSTextField FolderNameHelpLabel;
+ private NSButtonCell ButtonCellProto;
+ private NSMatrix Matrix;
+ private int ServerType;
+ private bool ServerFormOnly;
+
+
+ public SparkleIntro () : base ()
+ {
+ ServerFormOnly = false;
+ }
+
+
+ public void ShowAccountForm ()
+ {
+ Reset ();
+
+ Header = "Welcome to SparkleShare!";
+ Description = "Before we can create a SparkleShare folder on this " +
+ "computer, we need some information from you.";
+
+ UserInfoForm = new NSForm (new RectangleF (250, 115, 350, 64));
+ UserInfoForm.AddEntry ("Full Name:");
+ UserInfoForm.AddEntry ("Email Address:");
+ UserInfoForm.CellSize = new SizeF (280, 22);
+ UserInfoForm.IntercellSpacing = new SizeF (4, 4);
+
+ UserInfoForm.Cells [0].StringValue = SparkleShare.Controller.UserName;
+ UserInfoForm.Cells [1].StringValue = SparkleShare.Controller.UserEmail;
+
+ ContinueButton = new NSButton () {
+ Title = "Continue",
+ Enabled = false
+ };
+
+ ContinueButton.Activated += delegate {
+ SparkleShare.Controller.UserName = UserInfoForm.Cells [0].StringValue.Trim ();
+ SparkleShare.Controller.UserEmail = UserInfoForm.Cells [1].StringValue.Trim ();
+ SparkleShare.Controller.GenerateKeyPair ();
+ SparkleUI.StatusIcon.CreateMenu ();
+
+ InvokeOnMainThread (delegate {
+ ShowServerForm ();
+ });
+ };
+
+ // TODO: Ugly hack, do properly with events
+ Timer timer = new Timer () {
+ Interval = 50
+ };
+
+ timer.Elapsed += delegate {
+ InvokeOnMainThread (delegate {
+ bool name_is_correct =
+ !UserInfoForm.Cells [0].StringValue.Trim ().Equals ("");
+
+ bool email_is_correct = SparkleShare.Controller.IsValidEmail (
+ UserInfoForm.Cells [1].StringValue.Trim ());
+
+ ContinueButton.Enabled = (name_is_correct && email_is_correct);
+ });
+ };
+
+ timer.Start ();
+
+ ContentView.AddSubview (UserInfoForm);
+ Buttons.Add (ContinueButton);
+
+ ShowAll ();
+ }
+
+
+ public void ShowServerForm (bool server_form_only)
+ {
+ ServerFormOnly = server_form_only;
+ ShowServerForm ();
+ }
+
+
+ public void ShowServerForm ()
+ {
+ Reset ();
+
+ Header = "Where is your remote folder?";
+ Description = "";
+
+ ServerTypeLabel = new NSTextField () {
+ Alignment = NSTextAlignment.Right,
+ BackgroundColor = NSColor.WindowBackground,
+ Bordered = false,
+ Editable = false,
+ Frame = new RectangleF (150, Frame.Height - 139 , 160, 17),
+ StringValue = "Server Type:",
+ Font = SparkleUI.Font
+ };
+
+ AddressLabel = new NSTextField () {
+ Alignment = NSTextAlignment.Right,
+ BackgroundColor = NSColor.WindowBackground,
+ Bordered = false,
+ Editable = false,
+ Frame = new RectangleF (150, Frame.Height - 237 , 160, 17),
+ StringValue = "Address:",
+ Font = SparkleUI.Font
+ };
+
+ FolderNameLabel = new NSTextField () {
+ Alignment = NSTextAlignment.Right,
+ BackgroundColor = NSColor.WindowBackground,
+ Bordered = false,
+ Editable = false,
+ Frame = new RectangleF (150, Frame.Height - 264 , 160, 17),
+ StringValue = "Folder Name:",
+ Font = SparkleUI.Font
+ };
+
+
+ AddressTextField = new NSTextField () {
+ Frame = new RectangleF (320, Frame.Height - 240 , 256, 22),
+ Font = SparkleUI.Font
+ };
+
+ FolderNameTextField = new NSTextField () {
+ Frame = new RectangleF (320, Frame.Height - (240 + 22 + 4) , 256, 22),
+ StringValue = ""
+ };
+
+
+ FolderNameHelpLabel = new NSTextField () {
+ BackgroundColor = NSColor.WindowBackground,
+ Bordered = false,
+ TextColor = NSColor.DisabledControlText,
+ Editable = false,
+ Frame = new RectangleF (320, Frame.Height - 285 , 200, 17),
+ StringValue = "e.g. ‘rupert/website-design’"
+ };
+
+
+ ServerType = 0;
+
+ ButtonCellProto = new NSButtonCell ();
+ ButtonCellProto.SetButtonType (NSButtonType.Radio) ;
+
+ Matrix = new NSMatrix (new RectangleF (315, 180, 256, 78),
+ NSMatrixMode.Radio, ButtonCellProto, 4, 1);
+
+ Matrix.CellSize = new SizeF (256, 18);
+
+ Matrix.Cells [0].Title = "My own server";
+ Matrix.Cells [1].Title = "Github";
+ Matrix.Cells [2].Title = "Gitorious";
+ Matrix.Cells [3].Title = "The GNOME Project";
+
+ foreach (NSCell cell in Matrix.Cells)
+ cell.Font = SparkleUI.Font;
+
+ // TODO: Ugly hack, do properly with events
+ Timer timer = new Timer () {
+ Interval = 50
+ };
+
+ timer.Elapsed += delegate {
+
+ InvokeOnMainThread (delegate {
+
+ if (Matrix.SelectedRow != ServerType) {
+ ServerType = Matrix.SelectedRow;
+
+ AddressTextField.Enabled = (ServerType == 0);
+
+ switch (ServerType) {
+ case 0:
+ AddressTextField.StringValue = "";
+ FolderNameHelpLabel.StringValue = "e.g. ‘rupert/website-design’";
+ break;
+ case 1:
+ AddressTextField.StringValue = "ssh://git@github.com/";
+ FolderNameHelpLabel.StringValue = "e.g. ‘rupert/website-design’";
+ break;
+ case 2:
+ AddressTextField.StringValue = "ssh://git@gitorious.org/";
+ FolderNameHelpLabel.StringValue = "e.g. ‘project/website-design’";
+ break;
+ case 3:
+ AddressTextField.StringValue = "ssh://git@gnome.org/git/";
+ FolderNameHelpLabel.StringValue = "e.g. ‘gnome-icon-theme’";
+ break;
+ }
+ }
+
+
+ if (ServerType == 0 && !AddressTextField.StringValue.Trim ().Equals ("")
+ && !FolderNameTextField.StringValue.Trim ().Equals ("")) {
+
+ SyncButton.Enabled = true;
+
+ } else if (ServerType != 0 &&
+ !FolderNameTextField.StringValue.Trim ().Equals ("")) {
+
+ SyncButton.Enabled = true;
+
+ } else {
+ SyncButton.Enabled = false;
+ }
+ });
+
+ };
+
+ timer.Start ();
+
+ ContentView.AddSubview (ServerTypeLabel);
+ ContentView.AddSubview (Matrix);
+
+ ContentView.AddSubview (AddressLabel);
+ ContentView.AddSubview (AddressTextField);
+
+ ContentView.AddSubview (FolderNameLabel);
+ ContentView.AddSubview (FolderNameTextField);
+ ContentView.AddSubview (FolderNameHelpLabel);
+
+ SyncButton = new NSButton () {
+ Title = "Sync",
+ Enabled = false
+ };
+
+ SyncButton.Activated += delegate {
+ string folder_name = FolderNameTextField.StringValue;
+ string server = AddressTextField.StringValue;
+ string canonical_name = Path.GetFileNameWithoutExtension (folder_name);
+
+ ShowSyncingPage (canonical_name);
+
+ SparkleShare.Controller.FolderFetched += delegate {
+ InvokeOnMainThread (delegate {
+ ShowSuccessPage (canonical_name);
+ });
+ };
+
+ SparkleShare.Controller.FolderFetchError += delegate {
+ InvokeOnMainThread (delegate {
+ ShowErrorPage ();
+ });
+ };
+
+ SparkleShare.Controller.FetchFolder (server, folder_name);
+ };
+
+ Buttons.Add (SyncButton);
+
+ if (ServerFormOnly) {
+ CancelButton = new NSButton () {
+ Title = "Cancel"
+ };
+
+ CancelButton.Activated += delegate {
+ InvokeOnMainThread (delegate {
+ PerformClose (this);
+ });
+ };
+
+ Buttons.Add (CancelButton);
+ } else {
+ SkipButton = new NSButton () {
+ Title = "Skip"
+ };
+
+ SkipButton.Activated += delegate {
+ InvokeOnMainThread (delegate {
+ ShowCompletedPage ();
+ });
+ };
+
+ Buttons.Add (SkipButton);
+ }
+
+ ShowAll ();
+ }
+
+
+ public void ShowErrorPage ()
+ {
+ Reset ();
+
+ Header = "Something went wrong…";
+ Description = "";
+
+ TryAgainButton = new NSButton () {
+ Title = "Try again…"
+ };
+
+ TryAgainButton.Activated += delegate {
+ InvokeOnMainThread (delegate {
+ ShowServerForm ();
+ });
+ };
+
+ Buttons.Add (TryAgainButton);
+
+ ShowAll ();
+ }
+
+
+ private void ShowSyncingPage (string name)
+ {
+ Reset ();
+
+ Header = "Syncing folder ‘" + name + "’…";
+ Description = "This may take a while.\n" +
+ "Are you sure it’s not coffee o'clock?";
+
+ ProgressIndicator = new NSProgressIndicator () {
+ Frame = new RectangleF (190, Frame.Height - 200, 640 - 150 - 80, 20),
+ Style = NSProgressIndicatorStyle.Bar
+ };
+
+ ProgressIndicator.StartAnimation (this);
+
+ ContentView.AddSubview (ProgressIndicator);
+
+ FinishButton = new NSButton () {
+ Title = "Finish",
+ Enabled = false
+ };
+
+ Buttons.Add (FinishButton);
+
+ ShowAll ();
+ }
+
+
+ public void ShowSuccessPage (string folder_name)
+ {
+ Reset ();
+
+ Header = "Folder synced succesfully!";
+ Description = "Now you can access the synced files from ‘" + folder_name + "’ in " +
+ "your SparkleShare folder.";
+
+ FinishButton = new NSButton () {
+ Title = "Finish"
+ };
+
+ FinishButton.Activated += delegate {
+ InvokeOnMainThread (delegate {
+ SparkleUI.StatusIcon.CreateMenu ();
+ PerformClose (this);
+ });
+ };
+
+ OpenFolderButton = new NSButton () {
+ Title = "Open Folder"
+ };
+
+ OpenFolderButton.Activated += delegate {
+ SparkleShare.Controller.OpenSparkleShareFolder (folder_name);
+ };
+
+ Buttons.Add (FinishButton);
+ Buttons.Add (OpenFolderButton);
+
+ ShowAll ();
+
+ NSApplication.SharedApplication.RequestUserAttention
+ (NSRequestUserAttentionType.CriticalRequest);
+ }
+
+
+ private void ShowCompletedPage ()
+ {
+ Reset ();
+
+ Header = "SparkleShare is ready to go!";
+ Description = "Now you can start accepting invitations from others. " +
+ "Just click on invitations you get by email and " +
+ "we will take care of the rest.";
+
+ FinishButton = new NSButton () {
+ Title = "Finish"
+ };
+
+ FinishButton.Activated += delegate {
+ InvokeOnMainThread (delegate {
+ SparkleUI.StatusIcon.CreateMenu ();
+ PerformClose (this);
+ });
+
+ };
+
+ Buttons.Add (FinishButton);
+
+ ShowAll ();
+ }
+ }
+}
diff --git a/SparkleShare/Mac/SparkleLog.cs b/SparkleShare/Mac/SparkleLog.cs
new file mode 100644
index 0000000..5bab464
--- /dev/null
+++ b/SparkleShare/Mac/SparkleLog.cs
@@ -0,0 +1,207 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Drawing;
+using System.IO;
+using System.Threading;
+
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+using MonoMac.WebKit;
+
+namespace SparkleShare {
+
+ public class SparkleLog : NSWindow {
+
+ public readonly string LocalPath;
+
+ private WebView WebView;
+ private NSButton CloseButton;
+ private NSButton OpenFolderButton;
+ private NSBox Separator;
+ private string HTML;
+ private NSProgressIndicator ProgressIndicator;
+
+
+ public SparkleLog (IntPtr handle) : base (handle) { }
+
+ public SparkleLog (string path) : base ()
+ {
+ LocalPath = path;
+
+ Delegate = new SparkleLogDelegate ();
+
+ SetFrame (new RectangleF (0, 0, 480, 640), true);
+ Center ();
+
+ // Open slightly off center for each consecutive window
+ if (SparkleUI.OpenLogs.Count > 0) {
+ RectangleF offset = new RectangleF (Frame.X + (SparkleUI.OpenLogs.Count * 20),
+ Frame.Y - (SparkleUI.OpenLogs.Count * 20), Frame.Width, Frame.Height);
+
+ SetFrame (offset, true);
+ }
+
+ StyleMask = (NSWindowStyle.Closable |
+ NSWindowStyle.Miniaturizable |
+ NSWindowStyle.Titled);
+
+ MaxSize = new SizeF (480, 640);
+ MinSize = new SizeF (480, 640);
+ HasShadow = true;
+ BackingType = NSBackingStore.Buffered;
+
+ CreateEventLog ();
+ UpdateEventLog ();
+
+ OrderFrontRegardless ();
+ }
+
+
+ private void CreateEventLog ()
+ {
+ OpenFolderButton = new NSButton (new RectangleF (16, 12, 120, 32)) {
+ Title = "Open Folder",
+ BezelStyle = NSBezelStyle.Rounded ,
+ Font = SparkleUI.Font
+ };
+
+ OpenFolderButton.Activated += delegate {
+ SparkleShare.Controller.OpenSparkleShareFolder (LocalPath);
+ };
+
+ ContentView.AddSubview (OpenFolderButton);
+
+
+ CloseButton = new NSButton (new RectangleF (480 - 120 - 16, 12, 120, 32)) {
+ Title = "Close",
+ BezelStyle = NSBezelStyle.Rounded,
+ Font = SparkleUI.Font
+ };
+
+ CloseButton.Activated += delegate {
+ InvokeOnMainThread (delegate {
+ PerformClose (this);
+ });
+ };
+
+ ContentView.AddSubview (CloseButton);
+
+
+ string name = Path.GetFileName (LocalPath);
+ Title = String.Format ("Events in ‘{0}’", name);
+
+ Separator = new NSBox (new RectangleF (0, 58, 480, 1)) {
+ BorderColor = NSColor.LightGray,
+ BoxType = NSBoxType.NSBoxCustom
+ };
+
+ ContentView.AddSubview (Separator);
+
+
+ ProgressIndicator = new NSProgressIndicator () {
+ Style = NSProgressIndicatorStyle.Spinning,
+ Frame = new RectangleF (Frame.Width / 2 - 10, Frame.Height / 2 + 10, 20, 20)
+ };
+
+ ProgressIndicator.StartAnimation (this);
+
+ WebView = new WebView (new RectangleF (0, 59, 480, 559), "", ""){
+ PolicyDelegate = new SparkleWebPolicyDelegate ()
+ };
+
+ Update ();
+ }
+
+
+ public void UpdateEventLog ()
+ {
+ InvokeOnMainThread (delegate {
+
+ if (HTML == null)
+ ContentView.AddSubview (ProgressIndicator);
+ });
+
+ Thread thread = new Thread (new ThreadStart (delegate {
+ using (NSAutoreleasePool pool = new NSAutoreleasePool ()) {
+ GenerateHTML ();
+ AddHTML ();
+ }
+ }));
+
+ thread.Start ();
+ }
+
+
+ private void GenerateHTML ()
+ {
+ string folder_name = Path.GetFileName (LocalPath);
+ HTML = SparkleShare.Controller.GetHTMLLog (folder_name);
+
+ HTML = HTML.Replace ("<!-- $body-font-family -->", "Lucida Grande");
+ HTML = HTML.Replace ("<!-- $day-entry-header-font-size -->", "13.6px");
+ HTML = HTML.Replace ("<!-- $body-font-size -->", "13.4px");
+ HTML = HTML.Replace ("<!-- $secondary-font-color -->", "#bbb");
+ HTML = HTML.Replace ("<!-- $small-color -->", "#ddd");
+ HTML = HTML.Replace ("<!-- $day-entry-header-background-color -->", "#f5f5f5");
+ HTML = HTML.Replace ("<!-- $a-color -->", "#0085cf");
+ HTML = HTML.Replace ("<!-- $a-hover-color -->", "#009ff8");
+ HTML = HTML.Replace ("<!-- $no-buddy-icon-background-image -->",
+ "file://" + Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "avatar-default.png"));
+ }
+
+
+ private void AddHTML ()
+ {
+ InvokeOnMainThread (delegate {
+ if (ProgressIndicator.Superview == ContentView)
+ ProgressIndicator.RemoveFromSuperview ();
+
+ WebView.MainFrame.LoadHtmlString (HTML, new NSUrl (""));
+
+ ContentView.AddSubview (WebView);
+ Update ();
+
+ });
+ }
+ }
+
+
+ public class SparkleLogDelegate : NSWindowDelegate {
+
+ public override bool WindowShouldClose (NSObject sender)
+ {
+ (sender as SparkleLog).OrderOut (this);
+ return false;
+ }
+ }
+
+
+ public class SparkleWebPolicyDelegate : WebPolicyDelegate {
+
+ public override void DecidePolicyForNavigation (WebView web_view, NSDictionary action_info,
+ NSUrlRequest request, WebFrame frame, NSObject decision_token)
+ {
+ string file_path = request.Url.ToString ();
+ file_path = file_path.Replace ("%20", " ");
+
+ NSWorkspace.SharedWorkspace.OpenFile (file_path);
+ }
+ }
+}
diff --git a/SparkleShare/Mac/SparkleMacController.cs b/SparkleShare/Mac/SparkleMacController.cs
new file mode 100644
index 0000000..b3902f7
--- /dev/null
+++ b/SparkleShare/Mac/SparkleMacController.cs
@@ -0,0 +1,183 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Diagnostics;
+using System.IO;
+
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+using SparkleLib;
+
+namespace SparkleShare {
+
+ public class SparkleMacController : SparkleController {
+
+ // We have to use our own custom made folder watcher, as
+ // System.IO.FileSystemWatcher fails watching subfolders on Mac
+ private SparkleMacWatcher watcher = new SparkleMacWatcher (SparklePaths.SparklePath);
+
+ public SparkleMacController () : base () { }
+
+ public override void Initialize ()
+ {
+ base.Initialize ();
+
+ this.watcher.Changed += delegate (string path) {
+ string repo_name;
+
+ if (path.Contains ("/"))
+ repo_name = path.Substring (0, path.IndexOf ("/"));
+ else
+ repo_name = path;
+
+ // Ignore changes in the root of each subfolder, these
+ // are already handled bu the repository
+ if (Path.GetFileNameWithoutExtension (path).Equals (repo_name))
+ return;
+
+ repo_name = repo_name.Trim ("/".ToCharArray ());
+ FileSystemEventArgs args = new FileSystemEventArgs (WatcherChangeTypes.Changed,
+ Path.Combine (SparklePaths.SparklePath, path), Path.GetFileName (path));
+
+ foreach (SparkleRepoBase repo in Repositories) {
+ if (repo.Name.Equals (repo_name))
+ repo.OnFileActivity (this, args);
+ }
+ };
+ }
+
+
+ public override void EnableSystemAutostart ()
+ {
+ // N/A
+ }
+
+
+ public override void InstallLauncher ()
+ {
+ // N/A
+ }
+
+
+ // Adds the SparkleShare folder to the user's
+ // list of bookmarked places
+ public override void AddToBookmarks ()
+ {
+ // TODO: Waiting for NSMutableArray/Dictionary support
+ /* NSDictionary sidebar_plist = NSUserDefaults.StandardUserDefaults.PersistentDomainForName ("com.apple.sidebarlists");
+
+ foreach (object sidebar_item in sidebar_plist.Keys) {
+ if (sidebar_item.ToString ().Equals ("useritems")) {
+ NSDictionary user_items = (NSDictionary) sidebar_plist.ValueForKey (new NSString (sidebar_item.ToString ()));
+
+ foreach (NSObject user_item in user_items.Keys) {
+ if (user_item.ToString ().Equals ("CustomListItems")) {
+ NSArray custom_items = (NSArray) user_items.ValueForKey (new NSString (user_item.ToString ()));
+
+ NSDictionary new_dictionary = new NSDictionary ();
+ new dictionary.SetValueForKey (new NSString ("Test"), new NSString ("Name"));
+
+ custom_items.SetValueForKey (new_dictionary, new NSString ("Item 6"));
+ user_items.SetValueForKey (custom_items, new NSString (user_item.ToString ()));
+ }
+ }
+
+ sidebar_plist.SetValueForKey (user_items, new NSString (sidebar_item.ToString ()));
+ }
+ }
+
+ NSUserDefaults.StandardUserDefaults.SetPersistentDomain (sidebar_plist, "com.apple.sidebarlists"); */
+ }
+
+
+ // Creates the SparkleShare folder in the user's home folder
+ public override bool CreateSparkleShareFolder ()
+ {
+ if (!Directory.Exists (SparklePaths.SparklePath)) {
+ Directory.CreateDirectory (SparklePaths.SparklePath);
+ return true;
+
+ } else {
+ return false;
+ }
+ }
+
+
+ // Opens the SparkleShare folder or an (optional) subfolder
+ public override void OpenSparkleShareFolder (string subfolder)
+ {
+ string folder = Path.Combine (SparklePaths.SparklePath, subfolder);
+ folder.Replace (" ", "\\ "); // Escape space-characters
+
+ NSWorkspace.SharedWorkspace.OpenFile (folder);
+ }
+
+
+ public override string EventLogHTML
+ {
+ get {
+ string resource_path = NSBundle.MainBundle.ResourcePath;
+ string html_path = Path.Combine (resource_path, "HTML", "event-log.html");
+
+ StreamReader reader = new StreamReader (html_path);
+ string html = reader.ReadToEnd ();
+ reader.Close ();
+
+ return html;
+ }
+ }
+
+
+ public override string DayEntryHTML
+ {
+ get {
+ string resource_path = NSBundle.MainBundle.ResourcePath;
+ string html_path = Path.Combine (resource_path, "HTML", "day-entry.html");
+
+ StreamReader reader = new StreamReader (html_path);
+ string html = reader.ReadToEnd ();
+ reader.Close ();
+
+ return html;
+ }
+ }
+
+
+ public override string EventEntryHTML
+ {
+ get {
+ string resource_path = NSBundle.MainBundle.ResourcePath;
+ string html_path = Path.Combine (resource_path, "HTML", "event-entry.html");
+
+ StreamReader reader = new StreamReader (html_path);
+ string html = reader.ReadToEnd ();
+ reader.Close ();
+
+ return html;
+ }
+ }
+
+
+ new public void Quit ()
+ {
+ this.watcher.Dispose ();
+ base.Quit ();
+ }
+ }
+}
diff --git a/SparkleShare/Mac/SparkleShare.csproj b/SparkleShare/Mac/SparkleShare.csproj
new file mode 100644
index 0000000..d261233
--- /dev/null
+++ b/SparkleShare/Mac/SparkleShare.csproj
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>10.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}</ProjectGuid>
+ <ProjectTypeGuids>{1C533B1C-72DD-4CB1-9F6B-BF11D93BCFBE};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>SparkleShare</RootNamespace>
+ <AssemblyName>SparkleShare</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <ReleaseVersion>0.2</ReleaseVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <CustomCommands>
+ <CustomCommands>
+ <Command type="AfterBuild" command="mkdir -p ${TargetDir}/${SolutionName}.app/Contents/Frameworks; cp -r /Users/hbons/Code/SparkleShare/SparkleShare/Mac/Growl.framework ${TargetDir}/${SolutionName}.app/Contents/Frameworks" externalConsole="true" />
+ </CustomCommands>
+ </CustomCommands>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>none</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="System.Xml">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="System.Core">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="System.Xml.Linq">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="System.Drawing">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="MonoMac">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="SparkleLib, Version=0.2.0.0, Culture=neutral, PublicKeyToken=null">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\bin\SparkleLib.dll</HintPath>
+ </Reference>
+ <Reference Include="Mono.Posix">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="Meebey.SmartIrc4net, Version=0.4.5.0, Culture=neutral, PublicKeyToken=7868485fbf407e0f">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\bin\Meebey.SmartIrc4net.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="AppDelegate.cs">
+ <DependentUpon>MainMenu.xib</DependentUpon>
+ </Compile>
+ <Compile Include="MainMenu.xib.designer.cs">
+ <DependentUpon>MainMenu.xib</DependentUpon>
+ </Compile>
+ <Compile Include="..\SparkleController.cs">
+ <Link>SparkleController.cs</Link>
+ </Compile>
+ <Compile Include="SparkleWindow.cs" />
+ <Compile Include="SparkleIntro.cs" />
+ <Compile Include="SparkleLog.cs" />
+ <Compile Include="SparkleMacController.cs" />
+ <Compile Include="SparkleStatusIcon.cs" />
+ <Compile Include="SparkleUI.cs" />
+ <Compile Include="..\SparkleShare.cs">
+ <Link>SparkleShare.cs</Link>
+ </Compile>
+ <Compile Include="SparkleAbout.cs" />
+ <Compile Include="SparkleAlert.cs" />
+ <Compile Include="SparkleBubble.cs" />
+ <Compile Include="SparkleMacWatcher.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Page Include="MainMenu.xib" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Info.plist" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <Import Project="$(MSBuildExtensionsPath)\Mono\MonoMac\v0.0\Mono.MonoMac.targets" />
+ <ItemGroup>
+ <Content Include="..\..\data\html\day-entry.html">
+ <Link>HTML\day-entry.html</Link>
+ </Content>
+ <Content Include="..\..\data\html\event-entry.html">
+ <Link>HTML\event-entry.html</Link>
+ </Content>
+ <Content Include="..\..\data\html\event-log.html">
+ <Link>HTML\event-log.html</Link>
+ </Content>
+ <Content Include="..\..\data\side-splash.png">
+ <Link>Pixmaps\side-splash.png</Link>
+ </Content>
+ <Content Include="..\..\data\avatar-default.png">
+ <Link>Pixmaps\avatar-default.png</Link>
+ </Content>
+ <Content Include="..\..\data\sparkleshare-mac.icns">
+ <Link>sparkleshare-mac.icns</Link>
+ </Content>
+ <Content Include="..\..\data\sparkleshare.icns">
+ <Link>sparkleshare.icns</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle0-active.png">
+ <Link>Pixmaps\idle0-active.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle0.png">
+ <Link>Pixmaps\idle0.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle1-active.png">
+ <Link>Pixmaps\idle1-active.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle1.png">
+ <Link>Pixmaps\idle1.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle2-active.png">
+ <Link>Pixmaps\idle2-active.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle2.png">
+ <Link>Pixmaps\idle2.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle3-active.png">
+ <Link>Pixmaps\idle3-active.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle3.png">
+ <Link>Pixmaps\idle3.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle4-active.png">
+ <Link>Pixmaps\idle4-active.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\idle4.png">
+ <Link>Pixmaps\idle4.png</Link>
+ </Content>
+ <Content Include="Growl.plist" />
+ <Content Include="..\..\data\icons\error.png">
+ <Link>Pixmaps\error.png</Link>
+ </Content>
+ <Content Include="..\..\data\icons\error-active.png">
+ <Link>Pixmaps\error-active.png</Link>
+ </Content>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Pixmaps\" />
+ <Folder Include="HTML\" />
+ </ItemGroup>
+</Project>
diff --git a/SparkleShare/Mac/SparkleShare.sln b/SparkleShare/Mac/SparkleShare.sln
new file mode 100644
index 0000000..a3404e2
--- /dev/null
+++ b/SparkleShare/Mac/SparkleShare.sln
@@ -0,0 +1,21 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleShare", "SparkleShare.csproj", "{CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = SparkleShare.csproj
+ version = 0.2
+ EndGlobalSection
+EndGlobal
diff --git a/SparkleShare/Mac/SparkleStatusIcon.cs b/SparkleShare/Mac/SparkleStatusIcon.cs
new file mode 100644
index 0000000..357c3f4
--- /dev/null
+++ b/SparkleShare/Mac/SparkleStatusIcon.cs
@@ -0,0 +1,389 @@
+// SparkleShare, an instant update workflow to Git.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Drawing;
+using System.IO;
+using System.Timers;
+
+using Mono.Unix;
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+
+namespace SparkleShare {
+
+ // The statusicon that stays in the
+ // user's notification area
+ public class SparkleStatusIcon : NSObject {
+
+ private Timer Animation;
+ private int FrameNumber;
+ private string StateText;
+
+ private NSStatusItem StatusItem;
+ private NSMenu Menu;
+ private NSMenuItem StateMenuItem;
+ private NSMenuItem FolderMenuItem;
+ private NSMenuItem [] FolderMenuItems;
+ private NSMenuItem SyncMenuItem;
+ private NSMenuItem AboutMenuItem;
+ private NSMenuItem NotificationsMenuItem;
+
+ private delegate void Task ();
+ private EventHandler [] Tasks;
+
+
+ // Short alias for the translations
+ public static string _ (string s)
+ {
+ return Catalog.GetString (s);
+ }
+
+
+ public SparkleStatusIcon () : base ()
+ {
+ Animation = CreateAnimation ();
+
+ StatusItem = NSStatusBar.SystemStatusBar.CreateStatusItem (28);
+ StatusItem.HighlightMode = true;
+
+ SetNormalState ();
+ CreateMenu ();
+
+ Menu.Delegate = new SparkleStatusIconMenuDelegate ();
+
+ SparkleShare.Controller.FolderSizeChanged += delegate {
+ InvokeOnMainThread (delegate {
+ if (!Animation.Enabled)
+ SetNormalState ();
+
+ UpdateMenu ();
+ });
+ };
+
+ SparkleShare.Controller.FolderListChanged += delegate {
+ InvokeOnMainThread (delegate {
+ SetNormalState ();
+ CreateMenu ();
+ });
+ };
+
+ SparkleShare.Controller.OnIdle += delegate {
+ InvokeOnMainThread (delegate {
+ SetNormalState ();
+ CreateMenu ();
+ });
+ };
+
+ SparkleShare.Controller.OnSyncing += delegate {
+ InvokeOnMainThread (delegate {
+ SetAnimationState ();
+ UpdateMenu ();
+ });
+ };
+
+ SparkleShare.Controller.OnError += delegate {
+ InvokeOnMainThread (delegate {
+ SetNormalState (true);
+ CreateMenu ();
+ });
+ };
+ }
+
+
+ // Creates the Animation that handles the syncing animation
+ private Timer CreateAnimation ()
+ {
+ FrameNumber = 0;
+
+ Timer Animation = new Timer () {
+ Interval = 35
+ };
+
+ Animation.Elapsed += delegate {
+ if (FrameNumber < 4)
+ FrameNumber++;
+ else
+ FrameNumber = 0;
+
+ InvokeOnMainThread (delegate {
+ string image_path = Path.Combine (NSBundle.MainBundle.ResourcePath,
+ "Pixmaps", "idle" + FrameNumber + ".png");
+
+ string alternate_image_path = Path.Combine (NSBundle.MainBundle.ResourcePath,
+ "Pixmaps", "idle" + FrameNumber + "-active.png");
+
+ StatusItem.Image = new NSImage (image_path);
+ StatusItem.AlternateImage = new NSImage (alternate_image_path);
+ StatusItem.Image.Size = new SizeF (16, 16);
+ StatusItem.AlternateImage.Size = new SizeF (16, 16);
+ });
+ };
+
+ return Animation;
+ }
+
+
+ // Creates the menu that is popped up when the
+ // user clicks the status icon
+ public void CreateMenu ()
+ {
+ Menu = new NSMenu ();
+
+ StateMenuItem = new NSMenuItem () {
+ Title = StateText
+ };
+
+ Menu.AddItem (StateMenuItem);
+ Menu.AddItem (NSMenuItem.SeparatorItem);
+
+ FolderMenuItem = new NSMenuItem () {
+ Title = "SparkleShare"
+ };
+
+ FolderMenuItem.Activated += delegate {
+ SparkleShare.Controller.OpenSparkleShareFolder ();
+ };
+
+ string folder_icon_path = Path.Combine (NSBundle.MainBundle.ResourcePath,
+ "sparkleshare-mac.icns");
+
+ FolderMenuItem.Image = new NSImage (folder_icon_path);
+ FolderMenuItem.Image.Size = new SizeF (16, 16);
+
+ Menu.AddItem (FolderMenuItem);
+
+ if (SparkleShare.Controller.Folders.Count > 0) {
+ FolderMenuItems = new NSMenuItem [SparkleShare.Controller.Folders.Count];
+ Tasks = new EventHandler [SparkleShare.Controller.Folders.Count];
+
+ int i = 0;
+ foreach (string folder_name in SparkleShare.Controller.Folders) {
+ NSMenuItem item = new NSMenuItem ();
+
+ item.Title = folder_name;
+
+ if (SparkleShare.Controller.UnsyncedFolders.Contains (folder_name))
+ item.Image = NSImage.ImageNamed ("NSCaution");
+ else
+ item.Image = NSImage.ImageNamed ("NSFolder");
+
+ item.Image.Size = new SizeF (16, 16);
+ Tasks [i] = OpenEventLogDelegate (folder_name);
+
+ FolderMenuItems [i] = item;
+ FolderMenuItems [i].Activated += Tasks [i];
+ Menu.AddItem (FolderMenuItems [i]);
+
+ i++;
+ };
+
+
+
+ } else {
+ FolderMenuItems = new NSMenuItem [1];
+
+ FolderMenuItems [0] = new NSMenuItem () {
+ Title = "No Remote Folders Yet"
+ };
+
+ Menu.AddItem (FolderMenuItems [0]);
+ }
+
+ Menu.AddItem (NSMenuItem.SeparatorItem);
+
+ SyncMenuItem = new NSMenuItem () {
+ Title = "Add Remote Folder…"
+ };
+
+ if (!SparkleShare.Controller.FirstRun) {
+ SyncMenuItem.Activated += delegate {
+ InvokeOnMainThread (delegate {
+ NSApplication.SharedApplication.ActivateIgnoringOtherApps (true);
+
+ if (SparkleUI.Intro == null) {
+ SparkleUI.Intro = new SparkleIntro ();
+ SparkleUI.Intro.ShowServerForm (true);
+ }
+
+ if (!SparkleUI.Intro.IsVisible)
+ SparkleUI.Intro.ShowServerForm (true);
+
+ SparkleUI.Intro.OrderFrontRegardless ();
+ SparkleUI.Intro.MakeKeyAndOrderFront (this);
+ });
+ };
+ }
+
+ Menu.AddItem (SyncMenuItem);
+ Menu.AddItem (NSMenuItem.SeparatorItem);
+
+
+ NotificationsMenuItem = new NSMenuItem ();
+
+ if (SparkleShare.Controller.NotificationsEnabled)
+ NotificationsMenuItem.Title = "Turn Notifications Off";
+ else
+ NotificationsMenuItem.Title = "Turn Notifications On";
+
+ NotificationsMenuItem.Activated += delegate {
+ SparkleShare.Controller.ToggleNotifications ();
+
+ InvokeOnMainThread (delegate {
+ if (SparkleShare.Controller.NotificationsEnabled)
+ NotificationsMenuItem.Title = "Turn Notifications Off";
+ else
+ NotificationsMenuItem.Title = "Turn Notifications On";
+ });
+ };
+
+ Menu.AddItem (NotificationsMenuItem);
+ Menu.AddItem (NSMenuItem.SeparatorItem);
+
+
+ AboutMenuItem = new NSMenuItem () {
+ Title = "About SparkleShare"
+ };
+
+ AboutMenuItem.Activated += delegate {
+ InvokeOnMainThread (delegate {
+ NSApplication.SharedApplication.ActivateIgnoringOtherApps (true);
+
+ if (SparkleUI.About == null)
+ SparkleUI.About = new SparkleAbout ();
+
+ SparkleUI.About.OrderFrontRegardless ();
+ SparkleUI.About.MakeKeyAndOrderFront (this);
+ SparkleUI.About.CheckForNewVersion ();
+ });
+ };
+
+
+ Menu.AddItem (AboutMenuItem);
+
+
+ StatusItem.Menu = Menu;
+ StatusItem.Menu.Update ();
+ }
+
+
+ // A method reference that makes sure that opening the
+ // event log for each repository works correctly
+ private EventHandler OpenEventLogDelegate (string path)
+ {
+ return delegate {
+ InvokeOnMainThread (delegate {
+ NSApplication.SharedApplication.ActivateIgnoringOtherApps (true);
+
+ SparkleLog log = SparkleUI.OpenLogs.Find (delegate (SparkleLog l) {
+ return l.LocalPath.Equals (path);
+ });
+
+ // Check whether the log is already open, create a new one if
+ // that's not the case or present it to the user if it is
+ if (log == null) {
+ SparkleUI.OpenLogs.Add (new SparkleLog (path));
+ SparkleUI.OpenLogs [SparkleUI.OpenLogs.Count - 1].MakeKeyAndOrderFront (this);
+ } else {
+ log.OrderFrontRegardless ();
+ log.MakeKeyAndOrderFront (this);
+ }
+ });
+ };
+ }
+
+
+ public void UpdateMenu ()
+ {
+ StateMenuItem.Title = StateText;
+ }
+
+
+ // The state when there's nothing going on
+ private void SetNormalState ()
+ {
+ if (SparkleShare.Controller.UnsyncedFolders.Count > 0)
+ SetNormalState (true);
+ else
+ SetNormalState (false);
+ }
+
+
+ // The state when there's nothing going on
+ private void SetNormalState (bool error)
+ {
+ Animation.Stop ();
+
+ if (SparkleShare.Controller.Folders.Count == 0) {
+ StateText = _("Welcome to SparkleShare!");
+
+ InvokeOnMainThread (delegate {
+ StatusItem.Image = new NSImage (NSBundle.MainBundle.ResourcePath + "/Pixmaps/idle0.png");
+ StatusItem.AlternateImage = new NSImage (NSBundle.MainBundle.ResourcePath + "/Pixmaps/idle0-active.png");
+ StatusItem.Image.Size = new SizeF (16, 16);
+ StatusItem.AlternateImage.Size = new SizeF (16, 16);
+ });
+
+ } else {
+ if (error) {
+ StateText = _("Not everything is synced");
+
+ InvokeOnMainThread (delegate {
+ StatusItem.Image = new NSImage (NSBundle.MainBundle.ResourcePath + "/Pixmaps/error.png");
+ StatusItem.AlternateImage = new NSImage (NSBundle.MainBundle.ResourcePath + "/Pixmaps/error-active.png");
+ StatusItem.Image.Size = new SizeF (16, 16);
+ StatusItem.AlternateImage.Size = new SizeF (16, 16);
+ });
+
+ } else {
+ StateText = _("Up to date") + " (" + SparkleShare.Controller.FolderSize + ")";
+
+ InvokeOnMainThread (delegate {
+ StatusItem.Image = new NSImage (NSBundle.MainBundle.ResourcePath + "/Pixmaps/idle0.png");
+ StatusItem.AlternateImage = new NSImage (NSBundle.MainBundle.ResourcePath + "/Pixmaps/idle0-active.png");
+ StatusItem.Image.Size = new SizeF (16, 16);
+ StatusItem.AlternateImage.Size = new SizeF (16, 16);
+ });
+ }
+ }
+ }
+
+
+ // The state when animating
+ private void SetAnimationState ()
+ {
+ StateText = _("Syncing…");
+
+ if (!Animation.Enabled)
+ Animation.Start ();
+ }
+ }
+
+
+ public class SparkleStatusIconMenuDelegate : NSMenuDelegate {
+
+ public override void MenuWillHighlightItem (NSMenu menu, NSMenuItem item) { }
+
+ public override void MenuWillOpen (NSMenu menu)
+ {
+ InvokeOnMainThread (delegate {
+ NSApplication.SharedApplication.DockTile.BadgeLabel = null;
+ });
+ }
+ }
+}
diff --git a/SparkleShare/Mac/SparkleUI.cs b/SparkleShare/Mac/SparkleUI.cs
new file mode 100644
index 0000000..a923bce
--- /dev/null
+++ b/SparkleShare/Mac/SparkleUI.cs
@@ -0,0 +1,183 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Timers;
+
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+using MonoMac.Growl;
+
+namespace SparkleShare {
+
+ public partial class AppDelegate : NSApplicationDelegate {
+
+ public override void WillBecomeActive (NSNotification notification)
+ {
+ NSApplication.SharedApplication.DockTile.BadgeLabel = null;
+ }
+
+ public override void OrderFrontStandardAboutPanel (NSObject sender)
+ {
+ // FIXME: Doesn't work
+ new SparkleAbout ();
+ }
+
+ public override void WillTerminate (NSNotification notification)
+ {
+ SparkleShare.Controller.Quit ();
+ }
+ }
+
+
+ public class SparkleUI : AppDelegate {
+
+ public static SparkleStatusIcon StatusIcon;
+ public static List <SparkleLog> OpenLogs;
+ public static SparkleIntro Intro;
+ public static SparkleAbout About;
+ public static NSFont Font;
+
+ private NSAlert alert;
+
+
+ public SparkleUI ()
+ {
+ string content_path = Directory.GetParent (
+ System.AppDomain.CurrentDomain.BaseDirectory).ToString ();
+ string app_path = Directory.GetParent (content_path).ToString ();
+ string growl_path = Path.Combine (app_path, "Frameworks", "Growl.framework", "Growl");
+
+ // Needed for Growl
+ Dlfcn.dlopen (growl_path, 0);
+ NSApplication.Init ();
+
+ using (NSAutoreleasePool pool = new NSAutoreleasePool ()) {
+
+ // Needed for Growl
+ GrowlApplicationBridge.WeakDelegate = this;
+
+ NSApplication.SharedApplication.ApplicationIconImage
+ = NSImage.ImageNamed ("sparkleshare.icns");
+
+ SetFolderIcon ();
+
+ if (!SparkleShare.Controller.BackendIsPresent) {
+ this.alert = new SparkleAlert ();
+ this.alert.RunModal ();
+ return;
+ }
+
+ Font = NSFontManager.SharedFontManager.FontWithFamily
+ ("Lucida Grande", NSFontTraitMask.Condensed, 0, 13);
+
+ OpenLogs = new List <SparkleLog> ();
+ StatusIcon = new SparkleStatusIcon ();
+ }
+
+ SparkleShare.Controller.NotificationRaised += delegate (string user_name, string user_email,
+ string message, string repository_path) {
+ InvokeOnMainThread (delegate {
+ foreach (SparkleLog log in OpenLogs) {
+ if (log.LocalPath.Equals (repository_path))
+ log.UpdateEventLog ();
+ }
+
+ if (SparkleShare.Controller.NotificationsEnabled) {
+ if (NSApplication.SharedApplication.DockTile.BadgeLabel == null)
+ NSApplication.SharedApplication.DockTile.BadgeLabel = "1";
+ else
+ NSApplication.SharedApplication.DockTile.BadgeLabel =
+ (int.Parse (NSApplication.SharedApplication.DockTile.BadgeLabel) + 1).ToString ();
+
+ if (GrowlApplicationBridge.IsGrowlRunning ()) {
+ SparkleBubble bubble = new SparkleBubble (user_name, message) {
+ ImagePath = SparkleShare.Controller.GetAvatar (user_email, 36)
+ };
+
+ bubble.Show ();
+
+ } else {
+ NSApplication.SharedApplication.RequestUserAttention
+ (NSRequestUserAttentionType.InformationalRequest);
+ }
+ }
+ });
+ };
+
+
+ SparkleShare.Controller.ConflictNotificationRaised += delegate {
+ string title = "Ouch! Mid-air collision!";
+ string subtext = "Don't worry, SparkleShare made a copy of each conflicting file.";
+
+ new SparkleBubble (title, subtext).Show ();
+ };
+
+
+ SparkleShare.Controller.AvatarFetched += delegate {
+ InvokeOnMainThread (delegate {
+ foreach (SparkleLog log in SparkleUI.OpenLogs)
+ log.UpdateEventLog ();
+ });
+ };
+
+
+ SparkleShare.Controller.OnIdle += delegate {
+ InvokeOnMainThread (delegate {
+ foreach (SparkleLog log in SparkleUI.OpenLogs)
+ log.UpdateEventLog ();
+ });
+ };
+
+
+ if (SparkleShare.Controller.FirstRun) {
+ Intro = new SparkleIntro ();
+ Intro.ShowAccountForm ();
+ }
+ }
+
+
+ public void SetFolderIcon ()
+ {
+ string folder_icon_path = Path.Combine (NSBundle.MainBundle.ResourcePath,
+ "sparkleshare-mac.icns");
+
+ NSImage folder_icon = new NSImage (folder_icon_path);
+
+ NSWorkspace.SharedWorkspace.SetIconforFile (folder_icon,
+ SparkleShare.Controller.SparklePath, 0);
+ }
+
+
+ public void Run ()
+ {
+ NSApplication.Main (new string [0]);
+ }
+
+
+ [Export("registrationDictionaryForGrowl")]
+ NSDictionary RegistrationDictionaryForGrowl ()
+ {
+ string path = NSBundle.MainBundle.PathForResource ("Growl", "plist");
+ return NSDictionary.FromFile (path);
+ }
+ }
+}
diff --git a/SparkleShare/Mac/SparkleWindow.cs b/SparkleShare/Mac/SparkleWindow.cs
new file mode 100644
index 0000000..868203f
--- /dev/null
+++ b/SparkleShare/Mac/SparkleWindow.cs
@@ -0,0 +1,149 @@
+// SparkleShare, an instant update workflow to Git.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+using MonoMac.WebKit;
+using Mono.Unix;
+
+namespace SparkleShare {
+
+ public class SparkleWindow : NSWindow {
+
+ public List <NSButton> Buttons;
+ public string Header;
+ public string Description;
+
+ private NSImage SideSplash;
+ private NSImageView SideSplashView;
+ private NSTextField HeaderTextField;
+ private NSTextField DescriptionTextField;
+
+
+ public SparkleWindow () : base ()
+ {
+ SetFrame (new RectangleF (0, 0, 640, 380), true);
+
+ StyleMask = NSWindowStyle.Titled;
+ MaxSize = new SizeF (640, 380);
+ MinSize = new SizeF (640, 380);
+ HasShadow = true;
+ BackingType = NSBackingStore.Buffered;
+
+ Center ();
+
+ string side_splash_path = Path.Combine (NSBundle.MainBundle.ResourcePath,
+ "Pixmaps", "side-splash.png");
+
+ SideSplash = new NSImage (side_splash_path) {
+ Size = new SizeF (150, 407)
+ };
+
+ SideSplashView = new NSImageView () {
+ Image = SideSplash,
+ Frame = new RectangleF (0, 0, 150, 407)
+ };
+
+ Buttons = new List <NSButton> ();
+
+ HeaderTextField = new NSTextField () {
+ Frame = new RectangleF (190, Frame.Height - 100, Frame.Width, 48),
+ BackgroundColor = NSColor.WindowBackground,
+ Bordered = false,
+ Editable = false,
+ Font = NSFontManager.SharedFontManager.FontWithFamily
+ ("Lucida Grande", NSFontTraitMask.Bold, 0, 15)
+ };
+
+ DescriptionTextField = new NSTextField () {
+ Frame = new RectangleF (190, Frame.Height - 155 , 640 - 240, 64),
+ BackgroundColor = NSColor.WindowBackground,
+ Bordered = false,
+ Editable = false,
+ Font = SparkleUI.Font
+ };
+
+ NSApplication.SharedApplication.ActivateIgnoringOtherApps (true);
+ MakeKeyAndOrderFront (this);
+
+ OrderFrontRegardless ();
+ }
+
+
+ public void Reset ()
+ {
+ ContentView.Subviews = new NSView [0];
+ Buttons = new List <NSButton> ();
+ Header = "";
+ Description = "";
+ }
+
+
+ public void ShowAll ()
+ {
+ HeaderTextField.StringValue = Header;
+ DescriptionTextField.StringValue = Description;
+
+ ContentView.AddSubview (HeaderTextField);
+
+ if (!Description.Equals (""))
+ ContentView.AddSubview (DescriptionTextField);
+
+ ContentView.AddSubview (SideSplashView);
+
+ int i = 1;
+ if (Buttons.Count > 0) {
+ DefaultButtonCell = Buttons [0].Cell;
+
+ foreach (NSButton button in Buttons) {
+ button.BezelStyle = NSBezelStyle.Rounded;
+ button.Frame = new RectangleF (Frame.Width - 15 - (105 * i), 12, 105, 32);
+
+ // Make the button a bit wider if the text is
+ // likely to be longer
+ if (button.Title.Contains (" "))
+ button.Frame = new RectangleF (Frame.Width - 30 - (105 * i), 12, 120, 32);
+
+ button.Font = SparkleUI.Font;
+ ContentView.AddSubview (button);
+ i++;
+ }
+ }
+ }
+
+
+ public override void OrderFrontRegardless ()
+ {
+ NSApplication.SharedApplication.AddWindowsItem (this, "SparkleShare Setup", false);
+ base.OrderFrontRegardless ();
+ }
+
+
+ public override void PerformClose (NSObject sender)
+ {
+ OrderOut (this);
+ NSApplication.SharedApplication.RemoveWindowsItem (this);
+ return;
+ }
+ }
+}
diff --git a/SparkleShare/Makefile.am b/SparkleShare/Makefile.am
new file mode 100644
index 0000000..fd3ba6e
--- /dev/null
+++ b/SparkleShare/Makefile.am
@@ -0,0 +1,34 @@
+SUBDIRS = \
+ Nautilus \
+ Mac
+
+ASSEMBLY = SparkleShare
+TARGET = exe
+
+LINK = $(REF_SPARKLESHARE) $(NOTIFY_SHARP_LIBS) $(WEBKIT_SHARP_LIBS)
+
+
+SOURCES = \
+ SparkleAbout.cs \
+ SparkleBubble.cs \
+ SparkleController.cs \
+ SparkleEntry.cs \
+ SparkleInfobar.cs \
+ SparkleIntro.cs \
+ SparkleLinController.cs \
+ SparkleLog.cs \
+ SparkleShare.cs \
+ SparkleSpinner.cs \
+ SparkleStatusIcon.cs \
+ SparkleUI.cs \
+ SparkleUIHelpers.cs \
+ SparkleWindow.cs
+
+include $(top_srcdir)/build/build.mk
+
+bin_SCRIPTS = sparkleshare
+
+dist_man_MANS = $(top_srcdir)/man/sparkleshare.1
+
+Applicationsdir = $(datadir)/applications
+dist_Applications_DATA = sparkleshare.desktop
diff --git a/SparkleShare/Makefile.in b/SparkleShare/Makefile.in
new file mode 100644
index 0000000..c9acb3a
--- /dev/null
+++ b/SparkleShare/Makefile.in
@@ -0,0 +1,915 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+DIST_COMMON = $(dist_Applications_DATA) $(dist_man_MANS) \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/sparkleshare.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+@ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = SparkleShare
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = sparkleshare
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)" \
+ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(Applicationsdir)"
+SCRIPTS = $(bin_SCRIPTS) $(module_SCRIPTS)
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+DATA = $(dist_Applications_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+ Nautilus \
+ Mac
+
+ASSEMBLY = SparkleShare
+TARGET = exe
+LINK = $(REF_SPARKLESHARE) $(NOTIFY_SHARP_LIBS) $(WEBKIT_SHARP_LIBS) \
+ $(am__append_1)
+SOURCES = \
+ SparkleAbout.cs \
+ SparkleBubble.cs \
+ SparkleController.cs \
+ SparkleEntry.cs \
+ SparkleInfobar.cs \
+ SparkleIntro.cs \
+ SparkleLinController.cs \
+ SparkleLog.cs \
+ SparkleShare.cs \
+ SparkleSpinner.cs \
+ SparkleStatusIcon.cs \
+ SparkleUI.cs \
+ SparkleUIHelpers.cs \
+ SparkleWindow.cs
+
+
+# Initializers
+MONO_BASE_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_SMARTIRC4NET = -r:$(top_builddir)/$(SMARTIRC4NET_ASSEMBLY)
+REF_NOTIFY_SHARP = $(LINK_SYSTEM) $(LINK_DBUS) $(GTKSHARP_LIBS) $(GLIBSHARP_LIBS)
+LINK_NOTIFY_SHARP = -r:$(DIR_BIN)/NotifySharp.dll
+LINK_NOTIFY_SHARP_DEPS = $(REF_NOTIFY_SHARP) $(LINK_NOTIFY_SHARP)
+REF_FRIENDFACE = $(LINK_SYSTEM) $(LINK_GTK) $(LINK_MONO_POSIX)
+LINK_FRIENDFACE = -r:$(DIR_BIN)/FriendFace.dll
+LINK_FRIENDFACE_DEPS = $(REF_FRIENDFACE) $(LINK_FRIENDFACE)
+REF_SPARKLELIB = $(LINK_SYSTEM) $(LINK_MONO_POSIX) $(LINK_SMARTIRC4NET)
+LINK_SPARKLELIB = -r:$(DIR_BIN)/SparkleLib.dll
+LINK_SPARKLELIB_DEPS = $(REF_SPARKLELIB) $(LINK_SPARKLELIB)
+REF_SPARKLESHARE = $(LINK_DBUS) $(LINK_GTK) $(LINK_SPARKLELIB_DEPS)
+REF_SPARKLEDIFF = $(LINK_FRIENDFACE_DEPS) $(LINK_GTK) $(LINK_SPARKLELIB_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/SparkleLib/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+@ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+@ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+bin_SCRIPTS = sparkleshare
+dist_man_MANS = $(top_srcdir)/man/sparkleshare.1
+Applicationsdir = $(datadir)/applications
+dist_Applications_DATA = sparkleshare.desktop
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign SparkleShare/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign SparkleShare/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+sparkleshare: $(top_builddir)/config.status $(srcdir)/sparkleshare.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ { for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ test -z "$$files" || { \
+ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+install-dist_ApplicationsDATA: $(dist_Applications_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(Applicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(Applicationsdir)"
+ @list='$(dist_Applications_DATA)'; test -n "$(Applicationsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(Applicationsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(Applicationsdir)" || exit $$?; \
+ done
+
+uninstall-dist_ApplicationsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_Applications_DATA)'; test -n "$(Applicationsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(Applicationsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(Applicationsdir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @list='$(MANS)'; if test -n "$$list"; then \
+ list=`for p in $$list; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+ if test -n "$$list" && \
+ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
+ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+ echo " typically \`make maintainer-clean' will remove them" >&2; \
+ exit 1; \
+ else :; fi; \
+ else :; fi
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(SCRIPTS) $(MANS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(Applicationsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-dist_ApplicationsDATA install-man \
+ install-moduleSCRIPTS
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binSCRIPTS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS uninstall-dist_ApplicationsDATA \
+ uninstall-man uninstall-moduleSCRIPTS
+
+uninstall-man: uninstall-man1
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binSCRIPTS \
+ install-data install-data-am install-dist_ApplicationsDATA \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-man1 install-moduleSCRIPTS install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-binSCRIPTS uninstall-dist_ApplicationsDATA \
+ uninstall-man uninstall-man1 uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE)
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -codepage:utf8 \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SparkleShare/Nautilus/Makefile.am b/SparkleShare/Nautilus/Makefile.am
new file mode 100644
index 0000000..68b8772
--- /dev/null
+++ b/SparkleShare/Nautilus/Makefile.am
@@ -0,0 +1,10 @@
+SOURCES = \
+ sparkleshare-nautilus-extension.py
+
+if NAUTILUS_EXTENSION_ENABLED
+NAUTILUS_PYTHON_INSTALL_DIR=$(subst $(NAUTILUS_PREFIX)/,${prefix}/,$(NAUTILUS_PYTHON_DIR))
+extensiondir = $(NAUTILUS_PYTHON_INSTALL_DIR)
+extension_SCRIPTS = $(addprefix $(srcdir)/, $(SOURCES))
+else
+EXTRA_DIST = $(SOURCES) sparkleshare-nautilus-extension.py.in
+endif
diff --git a/SparkleShare/Nautilus/Makefile.in b/SparkleShare/Nautilus/Makefile.in
new file mode 100644
index 0000000..3084a51
--- /dev/null
+++ b/SparkleShare/Nautilus/Makefile.in
@@ -0,0 +1,457 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = SparkleShare/Nautilus
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/sparkleshare-nautilus-extension.py.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = sparkleshare-nautilus-extension.py
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(extensiondir)"
+SCRIPTS = $(extension_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SOURCES = \
+ sparkleshare-nautilus-extension.py
+
+@NAUTILUS_EXTENSION_ENABLED_TRUE@NAUTILUS_PYTHON_INSTALL_DIR = $(subst $(NAUTILUS_PREFIX)/,${prefix}/,$(NAUTILUS_PYTHON_DIR))
+@NAUTILUS_EXTENSION_ENABLED_TRUE@extensiondir = $(NAUTILUS_PYTHON_INSTALL_DIR)
+@NAUTILUS_EXTENSION_ENABLED_TRUE@extension_SCRIPTS = $(addprefix $(srcdir)/, $(SOURCES))
+@NAUTILUS_EXTENSION_ENABLED_FALSE@EXTRA_DIST = $(SOURCES) sparkleshare-nautilus-extension.py.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign SparkleShare/Nautilus/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign SparkleShare/Nautilus/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+sparkleshare-nautilus-extension.py: $(top_builddir)/config.status $(srcdir)/sparkleshare-nautilus-extension.py.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-extensionSCRIPTS: $(extension_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(extensiondir)" || $(MKDIR_P) "$(DESTDIR)$(extensiondir)"
+ @list='$(extension_SCRIPTS)'; test -n "$(extensiondir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(extensiondir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(extensiondir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-extensionSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(extension_SCRIPTS)'; test -n "$(extensiondir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(extensiondir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(extensiondir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(extensiondir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-extensionSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-extensionSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-extensionSCRIPTS \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-extensionSCRIPTS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in b/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in
new file mode 100644
index 0000000..e7a157e
--- /dev/null
+++ b/SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in
@@ -0,0 +1,172 @@
+# SparkleShare, an instant update workflow to Git.
+# Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import shutil
+import time
+
+import gio
+import nautilus
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+
+SPARKLESHARE_PATH = os.path.join (os.path.expanduser ('~'), "SparkleShare")
+
+import gettext
+gettext.bindtextdomain('sparkleshare', '@prefix@/share/locale')
+gettext.textdomain('sparkleshare')
+_ = gettext.gettext
+
+class SparkleShareExtension (nautilus.MenuProvider):
+
+
+ def __init__ (self):
+
+ debug = "Loaded Nautilus SparkleShare Extension."
+
+
+ def checkout_version (self, menu, file_reference, commit_hash, username, timestamp):
+
+ file_name = file_reference.get_basename ().replace (" ", "\ ").replace ("(", "\(").replace (")", "\)")
+ file_path = file_reference.get_path ().replace (" ", "\ ").replace ("(", "\(").replace (")", "\)")
+ tmp_file_path = os.path.join (SPARKLESHARE_PATH, ".tmp", file_reference.get_basename ())
+
+ # Move the current version to a temporary path
+ shutil.move (file_reference.get_path (), tmp_file_path)
+
+ # Check out the earlier version
+ os.chdir (file_reference.get_parent ().get_path ())
+ os.popen ("git checkout " + commit_hash + " " + file_name
+ .replace (" ", "\ ").replace ("(", "\(").replace (")", "\)"))
+
+ new_tmp_file_name = file_name + " (" + username + ", "
+ new_tmp_file_name += time.strftime ("%H:%M %d %b %Y", timestamp).replace (" 0", " ") + ") "
+
+ # Rename the checked out file
+ shutil.move (file_name, new_tmp_file_name)
+
+ # Move the original file back
+ shutil.move (tmp_file_path, file_path)
+
+ return True
+
+
+ def copy_web_link (self, menu, file_reference):
+
+ path = file_reference.get_path ()
+
+ # Get the remote url used for the repo
+ url_command = os.popen ("git config --get remote.origin.url")
+ url = url_command.readline ().strip ()
+
+ # Strip the unneeded parts
+ url = url.lstrip ("ssh://git")
+ url = url.lstrip ("@")
+ url = url.rstrip (".git")
+
+ # Format the right web url depending on the service
+ relative_path = path.lstrip (SPARKLESHARE_PATH)
+ repo_name = relative_path [:relative_path.find ("/")]
+ relative_path = relative_path.lstrip (repo_name)
+
+ if "gitorious.org" in url:
+ url = "http://" + url + "/blobs/master" + relative_path
+ if "github.com" in url:
+ url = "http://" + url + "/raw/master" + relative_path
+
+ url = url.replace (" ", "%20");
+
+ clipboard = gtk.clipboard_get ()
+ clipboard.set_text (url)
+ clipboard.store ()
+
+ return
+
+
+ def get_file_items (self, window, files):
+
+ # Only work if one file is selected
+ if len (files) != 1:
+ return
+
+ file_reference = gio.File (files [0].get_uri ())
+
+ # Only work if we're in a SparkleShare repository folder
+ if not (file_reference.get_path ().startswith (SPARKLESHARE_PATH)):
+ return
+
+ web_link_menu_item = nautilus.MenuItem ("Nautilus::CopyWebLink", _("Copy Web Link"),
+ _("Copy the web address of this file to the clipboard"))
+
+ web_link_menu_item.connect ("activate", self.copy_web_link, file_reference)
+
+
+ epochs = ["", "", "", "", "", "", "", "", "", ""]
+ commit_hashes = ["", "", "", "", "", "", "", "", "", ""]
+
+ os.chdir (file_reference.get_parent ().get_path ())
+
+ time_command = os.popen ("git log -10 --format='%at' " + file_reference.get_path ()
+ .replace (" ", "\ ").replace ("(", "\(").replace (")", "\)"))
+
+ author_command = os.popen ("git log -10 --format='%an' " + file_reference.get_path ()
+ .replace (" ", "\ ").replace ("(", "\(").replace (")", "\)"))
+
+ hash_command = os.popen ("git log -10 --format='%H' " + file_reference.get_path ()
+ .replace (" ", "\ ").replace ("(", "\(").replace (")", "\)"))
+
+ i = 0
+ for line in time_command.readlines ():
+ epochs [i] = line.strip ("\n")
+ i += 1
+
+ # Only work if there is history
+ if i < 2:
+ return web_link_menu_item,
+
+ i = 0
+ for line in hash_command.readlines ():
+ commit_hashes [i] = line.strip ("\n")
+ i += 1
+
+ earlier_version_menu_item = nautilus.MenuItem ("Nautilus::OpenOlderVersion", _("Get Earlier Version"),
+ _("Make a copy of an earlier version in this folder"))
+ submenu = nautilus.Menu ()
+
+ i = 0
+ for line in author_command.readlines ():
+
+ if i > 0:
+
+ timestamp = time.strftime ("%d %b\t%H:%M", time.localtime (float (epochs [i])))
+ username = line.strip ("\n")
+
+ menu_item = nautilus.MenuItem ("Nautilus::Version" + epochs [i],
+ timestamp + "\t" + username,
+ _("Select to get a copy of this version"))
+
+ menu_item.connect ("activate", self.checkout_version, file_reference, commit_hashes [i],
+ username, time.localtime (float (epochs [i])))
+ submenu.append_item (menu_item)
+
+ i += 1
+
+ earlier_version_menu_item.set_submenu (submenu)
+
+
+ return earlier_version_menu_item, web_link_menu_item
diff --git a/SparkleShare/SparkleAbout.cs b/SparkleShare/SparkleAbout.cs
new file mode 100644
index 0000000..5484c99
--- /dev/null
+++ b/SparkleShare/SparkleAbout.cs
@@ -0,0 +1,155 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons (hylkebons@gmail.com)
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see (http://www.gnu.org/licenses/).
+
+
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Net;
+
+using Gtk;
+using SparkleLib;
+using Mono.Unix;
+
+namespace SparkleShare {
+
+ public class SparkleAbout : Window {
+
+ private Label version;
+
+
+ // Short alias for the translations
+ public static string _(string s)
+ {
+ return Catalog.GetString (s);
+ }
+
+
+ public SparkleAbout () : base ("")
+ {
+ DefaultSize = new Gdk.Size (360, 260);
+ BorderWidth = 0;
+ IconName = "folder-sparkleshare";
+ WindowPosition = WindowPosition.Center;
+ Title = _("About SparkleShare");
+ Resizable = false;
+
+ CreateAbout ();
+
+ SparkleShare.Controller.NewVersionAvailable += delegate (string new_version) {
+ Application.Invoke (delegate {
+ this.version.Markup = String.Format ("<small><span fgcolor='#f57900'>{0}: {1}</span></small>", _("A newer version is available"), new_version);
+ this.version.ShowAll ();
+ });
+ };
+
+ SparkleShare.Controller.VersionUpToDate += delegate {
+ Application.Invoke (delegate {
+ this.version.Markup = String.Format ("<small><span fgcolor='#4e9a06'>{0}</span></small>", _("You are running the latest version."));
+ this.version.ShowAll ();
+ });
+ };
+
+ SparkleShare.Controller.CheckForNewVersion ();
+ }
+
+
+ private void CreateAbout ()
+ {
+ Gdk.Color color = Style.Foreground (StateType.Insensitive);
+ string secondary_text_color = SparkleUIHelpers.GdkColorToHex (color);
+
+ EventBox box = new EventBox ();
+ box.ModifyBg (StateType.Normal, new TreeView ().Style.Base (StateType.Normal));
+
+ Label header = new Label () {
+ Markup = "<span font_size='xx-large'>SparkleShare</span>\n<span fgcolor='" + secondary_text_color + "'><small>" + Defines.VERSION + "</small></span>",
+ Xalign = 0,
+ Xpad = 18,
+ Ypad = 18
+ };
+
+ box.Add (header);
+
+ this.version = new Label () {
+ Markup = String.Format ("<small>{0}</small>", _("Checking for updates...")),
+ Xalign = 0,
+ Xpad = 18,
+ Ypad = 22,
+ };
+
+ Label license = new Label () {
+ Xalign = 0,
+ Xpad = 18,
+ Ypad = 0,
+ LineWrap = true,
+ Wrap = true,
+ LineWrapMode = Pango.WrapMode.Word,
+
+ Markup = "<small>Copyright © 2010–" + DateTime.Now.Year + " Hylke Bons and others\n" +
+ "\n" +
+ "SparkleShare is Free and Open Source Software. " +
+ "You are free to use, modify, and redistribute it " +
+ "under the terms of the GNU General Public License version 3 or later.</small>"
+ };
+
+ VBox vbox = new VBox (false, 0) {
+ BorderWidth = 0
+ };
+
+ HButtonBox button_bar = new HButtonBox () {
+ BorderWidth = 12
+ };
+
+ Button credits_button = new Button (_("_Show Credits")) {
+ UseUnderline = true
+ };
+
+ credits_button.Clicked += delegate {
+
+ Process process = new Process ();
+ process.StartInfo.FileName = "xdg-open";
+ process.StartInfo.Arguments = "http://www.sparkleshare.org/credits";
+ process.Start ();
+
+ };
+
+ Button website_button = new Button (_("_Visit Website")) {
+ UseUnderline = true
+ };
+
+ website_button.Clicked += delegate {
+
+ Process process = new Process ();
+ process.StartInfo.FileName = "xdg-open";
+ process.StartInfo.Arguments = "http://www.sparkleshare.org/";
+ process.Start ();
+
+ };
+
+ button_bar.Add (website_button);
+ button_bar.Add (credits_button);
+
+ vbox.PackStart (box, true, true, 0);
+ vbox.PackStart (this.version, false, false, 0);
+ vbox.PackStart (license, true, true, 0);
+ vbox.PackStart (new Label (""), true, true, 0);
+ vbox.PackStart (button_bar, false, false, 0);
+
+ Add (vbox);
+ }
+ }
+}
diff --git a/SparkleShare/SparkleBubble.cs b/SparkleShare/SparkleBubble.cs
new file mode 100644
index 0000000..6127544
--- /dev/null
+++ b/SparkleShare/SparkleBubble.cs
@@ -0,0 +1,41 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using Notifications;
+
+namespace SparkleShare {
+
+ public class SparkleBubble : Notification {
+
+ public SparkleBubble (string title, string subtext) : base (title, subtext)
+ {
+ IconName = "folder-sparkleshare";
+ Timeout = 4500;
+ Urgency = Urgency.Low;
+ }
+
+
+ // Checks whether the system allows adding buttons to a notification,
+ // prevents error messages in Ubuntu.
+ new public void AddAction (string action, string label, ActionHandler handler)
+ {
+ if (Array.IndexOf (Notifications.Global.Capabilities, "actions") > -1)
+ base.AddAction (action, label, handler);
+ }
+ }
+}
diff --git a/SparkleShare/SparkleController.cs b/SparkleShare/SparkleController.cs
new file mode 100644
index 0000000..5b8c8e5
--- /dev/null
+++ b/SparkleShare/SparkleController.cs
@@ -0,0 +1,1025 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Net;
+using System.Security.Cryptography;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Xml;
+
+using Mono.Unix;
+using SparkleLib;
+
+namespace SparkleShare {
+
+ public abstract class SparkleController {
+
+ public List <SparkleRepoBase> Repositories;
+ public string FolderSize;
+ public readonly string SparklePath = SparklePaths.SparklePath;
+
+ public event OnQuitWhileSyncingEventHandler OnQuitWhileSyncing;
+ public delegate void OnQuitWhileSyncingEventHandler ();
+
+ public event FolderFetchedEventHandler FolderFetched;
+ public delegate void FolderFetchedEventHandler ();
+
+ public event FolderFetchErrorEventHandler FolderFetchError;
+ public delegate void FolderFetchErrorEventHandler ();
+
+ public event FolderListChangedEventHandler FolderListChanged;
+ public delegate void FolderListChangedEventHandler ();
+
+ public event FolderSizeChangedEventHandler FolderSizeChanged;
+ public delegate void FolderSizeChangedEventHandler (string folder_size);
+
+ public event AvatarFetchedEventHandler AvatarFetched;
+ public delegate void AvatarFetchedEventHandler ();
+
+ public event OnIdleEventHandler OnIdle;
+ public delegate void OnIdleEventHandler ();
+
+ public event OnSyncingEventHandler OnSyncing;
+ public delegate void OnSyncingEventHandler ();
+
+ public event OnErrorEventHandler OnError;
+ public delegate void OnErrorEventHandler ();
+
+ public event OnInvitationEventHandler OnInvitation;
+ public delegate void OnInvitationEventHandler (string server, string folder, string token);
+
+ public event ConflictNotificationRaisedEventHandler ConflictNotificationRaised;
+ public delegate void ConflictNotificationRaisedEventHandler ();
+
+ public event NotificationRaisedEventHandler NotificationRaised;
+ public delegate void NotificationRaisedEventHandler (string user_name, string user_email,
+ string message, string repository_path);
+
+ public event NewVersionAvailableEventHandler NewVersionAvailable;
+ public delegate void NewVersionAvailableEventHandler (string new_version);
+
+ public event VersionUpToDateEventHandler VersionUpToDate;
+ public delegate void VersionUpToDateEventHandler ();
+
+
+ // Short alias for the translations
+ public static string _ (string s)
+ {
+ return Catalog.GetString (s);
+ }
+
+
+ public SparkleController () { }
+
+ public virtual void Initialize ()
+ {
+ InstallLauncher ();
+ EnableSystemAutostart ();
+
+ // Create the SparkleShare folder and add it to the bookmarks
+ if (CreateSparkleShareFolder ())
+ AddToBookmarks ();
+
+ FolderSize = GetFolderSize ();
+
+ // TODO: Legacy. Remove at some later point
+ string old_global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config");
+ if (File.Exists (old_global_config_file_path))
+ MigrateConfig ();
+
+ if (FirstRun)
+ SparkleConfig.DefaultConfig.SetConfigOption ("notifications", bool.TrueString);
+ else
+ AddKey ();
+
+ // Watch the SparkleShare folder
+ FileSystemWatcher watcher = new FileSystemWatcher (SparklePaths.SparklePath) {
+ IncludeSubdirectories = false,
+ EnableRaisingEvents = true,
+ Filter = "*"
+ };
+
+ // Remove the repository when a delete event occurs
+ watcher.Deleted += delegate (object o, FileSystemEventArgs args) {
+ RemoveRepository (args.FullPath);
+ SparkleConfig.DefaultConfig.RemoveFolder (Path.GetFileName (args.Name));
+
+ if (FolderListChanged != null)
+ FolderListChanged ();
+
+ FolderSize = GetFolderSize ();
+
+ if (FolderSizeChanged != null)
+ FolderSizeChanged (FolderSize);
+ };
+
+
+ watcher.Created += delegate (object o, FileSystemEventArgs args) {
+
+ // Handle invitations when the user saves an
+ // invitation into the SparkleShare folder
+ if (args.Name.EndsWith (".sparkle") && !FirstRun) {
+ XmlDocument xml_doc = new XmlDocument ();
+ xml_doc.Load (args.Name);
+
+ string server = xml_doc.GetElementsByTagName ("server") [0].InnerText;
+ string folder = xml_doc.GetElementsByTagName ("folder") [0].InnerText;
+ string token = xml_doc.GetElementsByTagName ("token") [0].InnerText;
+
+ // FIXME: this is broken :\
+ if (OnInvitation != null)
+ OnInvitation (server, folder, token);
+ }
+ };
+
+ new Thread (new ThreadStart (PopulateRepositories)).Start ();
+ }
+
+
+ public bool FirstRun {
+ get {
+ return SparkleConfig.DefaultConfig.UserEmail.Equals ("Unknown");
+ }
+ }
+
+
+ private void MigrateConfig ()
+ {
+ string old_global_config_file_path = Path.Combine (SparklePaths.SparkleConfigPath, "config");
+
+ StreamReader reader = new StreamReader (old_global_config_file_path);
+ string global_config_file = reader.ReadToEnd ();
+ reader.Close ();
+
+ Regex regex = new Regex (@"name.+= (.+)");
+ Match match = regex.Match (global_config_file);
+
+ string user_name = match.Groups [1].Value;
+
+ regex = new Regex (@"email.+= (.+)");
+ match = regex.Match (global_config_file);
+
+ string user_email = match.Groups [1].Value;
+
+ SparkleConfig.DefaultConfig.UserName = user_name;
+ SparkleConfig.DefaultConfig.UserEmail = user_email;
+
+ File.Delete (old_global_config_file_path);
+ }
+
+
+ // Uploads the user's public key to the server
+ public bool AcceptInvitation (string server, string folder, string token)
+ {
+ // The location of the user's public key for SparkleShare
+ string public_key_file_path = SparkleHelpers.CombineMore (SparklePaths.HomePath, ".ssh",
+ "sparkleshare." + UserEmail + ".key.pub");
+
+ if (!File.Exists (public_key_file_path))
+ return false;
+
+ StreamReader reader = new StreamReader (public_key_file_path);
+ string public_key = reader.ReadToEnd ();
+ reader.Close ();
+
+ string url = "https://" + server + "/?folder=" + folder +
+ "&token=" + token + "&pubkey=" + public_key;
+
+ SparkleHelpers.DebugInfo ("WebRequest", url);
+
+ HttpWebRequest request = (HttpWebRequest) WebRequest.Create (url);
+ HttpWebResponse response = (HttpWebResponse) request.GetResponse();
+
+ if (response.StatusCode == HttpStatusCode.OK) {
+ response.Close ();
+ return true;
+
+ } else {
+ response.Close ();
+ return false;
+ }
+ }
+
+
+ public List<string> Folders {
+ get {
+ return SparkleConfig.DefaultConfig.Folders;
+ }
+ }
+
+
+ public List<string> UnsyncedFolders {
+ get {
+ List<string> unsynced_folders = new List<string> ();
+
+ foreach (SparkleRepoBase repo in Repositories) {
+ if (repo.HasUnsyncedChanges)
+ unsynced_folders.Add (repo.Name);
+ }
+
+ return unsynced_folders;
+ }
+ }
+
+
+ public List <SparkleChangeSet> GetLog (string name)
+ {
+ string path = Path.Combine (SparklePaths.SparklePath, name);
+ int log_size = 30;
+
+ foreach (SparkleRepoBase repo in Repositories) {
+ if (repo.LocalPath.Equals (path))
+ return repo.GetChangeSets (log_size);
+ }
+
+ return null;
+ }
+
+
+ public abstract string EventLogHTML { get; }
+ public abstract string DayEntryHTML { get; }
+ public abstract string EventEntryHTML { get; }
+
+
+ public string GetHTMLLog (string name)
+ {
+ List <SparkleChangeSet> change_sets = GetLog (name);
+ List <ActivityDay> activity_days = new List <ActivityDay> ();
+
+ if (change_sets.Count == 0)
+ return null;
+
+ foreach (SparkleChangeSet change_set in change_sets) {
+ GetAvatar (change_set.UserEmail, 36);
+
+ bool change_set_inserted = false;
+ foreach (ActivityDay stored_activity_day in activity_days) {
+ if (stored_activity_day.DateTime.Year == change_set.Timestamp.Year &&
+ stored_activity_day.DateTime.Month == change_set.Timestamp.Month &&
+ stored_activity_day.DateTime.Day == change_set.Timestamp.Day) {
+
+ stored_activity_day.Add (change_set);
+ change_set_inserted = true;
+ break;
+ }
+ }
+
+ if (!change_set_inserted) {
+ ActivityDay activity_day = new ActivityDay (change_set.Timestamp);
+ activity_day.Add (change_set);
+ activity_days.Add (activity_day);
+ }
+ }
+
+ string event_log_html = EventLogHTML;
+ string day_entry_html = DayEntryHTML;
+ string event_entry_html = EventEntryHTML;
+ string event_log = "";
+
+ foreach (ActivityDay activity_day in activity_days) {
+ string event_entries = "";
+
+ foreach (SparkleChangeSet change_set in activity_day) {
+ string event_entry = "<dl>";
+
+ if (change_set.IsMerge) {
+ event_entry += "<dt>Merged a branch</dt>";
+
+ } else {
+ if (change_set.Edited.Count > 0) {
+ event_entry += "<dt>Edited</dt>";
+
+ foreach (string file_path in change_set.Edited) {
+ string absolute_file_path = SparkleHelpers.CombineMore (SparklePaths.SparklePath,
+ name, file_path);
+
+ if (File.Exists (absolute_file_path))
+ event_entry += "<dd><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>";
+ else
+ event_entry += "<dd>" + file_path + "</dd>";
+ }
+ }
+
+ if (change_set.Added.Count > 0) {
+ event_entry += "<dt>Added</dt>";
+
+ foreach (string file_path in change_set.Added) {
+ string absolute_file_path = SparkleHelpers.CombineMore (SparklePaths.SparklePath,
+ name, file_path);
+
+ if (File.Exists (absolute_file_path))
+ event_entry += "<dd><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>";
+ else
+ event_entry += "<dd>" + file_path + "</dd>";
+ }
+ }
+
+ if (change_set.Deleted.Count > 0) {
+ event_entry += "<dt>Deleted</dt>";
+
+ foreach (string file_path in change_set.Deleted) {
+ string absolute_file_path = SparkleHelpers.CombineMore (SparklePaths.SparklePath,
+ name, file_path);
+
+ if (File.Exists (absolute_file_path))
+ event_entry += "<dd><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>";
+ else
+ event_entry += "<dd>" + file_path + "</dd>";
+ }
+ }
+
+ if (change_set.MovedFrom.Count > 0) {
+ event_entry += "<dt>Moved</dt>";
+
+ int i = 0;
+ foreach (string file_path in change_set.MovedFrom) {
+ string to_file_path = change_set.MovedTo [i];
+ string absolute_file_path = SparkleHelpers.CombineMore (SparklePaths.SparklePath,
+ name, file_path);
+ string absolute_to_file_path = SparkleHelpers.CombineMore (SparklePaths.SparklePath,
+ name, to_file_path);
+
+ if (File.Exists (absolute_file_path))
+ event_entry += "<dd><a href='" + absolute_file_path + "'>" + file_path + "</a><br/>" +
+ "<span class='moved-arrow'>&rarr;</span> ";
+ else
+ event_entry += "<dd>" + file_path + "<br/>" +
+ "<span class='moved-arrow'>&rarr;</span> ";
+
+ if (File.Exists (absolute_to_file_path))
+ event_entry += "<a href='" + absolute_to_file_path + "'>" + to_file_path + "</a></dd>";
+ else
+ event_entry += to_file_path + "</dd>";
+
+ i++;
+ }
+ }
+ }
+
+ event_entry += "</dl>";
+ event_entries += event_entry_html.Replace ("<!-- $event-entry-content -->", event_entry)
+ .Replace ("<!-- $event-user-name -->", change_set.UserName)
+ .Replace ("<!-- $event-avatar-url -->", "file://" + GetAvatar (change_set.UserEmail, 36) )
+ .Replace ("<!-- $event-time -->", change_set.Timestamp.ToString ("H:mm"));
+ }
+
+ string day_entry = "";
+ DateTime today = DateTime.Now;
+ DateTime yesterday = DateTime.Now.AddDays (-1);
+
+ if (today.Day == activity_day.DateTime.Day &&
+ today.Month == activity_day.DateTime.Month &&
+ today.Year == activity_day.DateTime.Year) {
+
+ day_entry = day_entry_html.Replace ("<!-- $day-entry-header -->", "<b>Today</b>");
+
+ } else if (yesterday.Day == activity_day.DateTime.Day &&
+ yesterday.Month == activity_day.DateTime.Month &&
+ yesterday.Year == activity_day.DateTime.Year) {
+
+ day_entry = day_entry_html.Replace ("<!-- $day-entry-header -->", "<b>Yesterday</b>");
+
+ } else {
+ if (activity_day.DateTime.Year != DateTime.Now.Year) {
+ // TRANSLATORS: This is the date in the event logs
+ day_entry = day_entry_html.Replace ("<!-- $day-entry-header -->",
+ "<b>" + activity_day.DateTime.ToString (_("ddd MMM d, yyyy")) + "</b>");
+
+ } else {
+ // TRANSLATORS: This is the date in the event logs, without the year
+ day_entry = day_entry_html.Replace ("<!-- $day-entry-header -->",
+ "<b>" + activity_day.DateTime.ToString (_("ddd MMM d")) + "</b>");
+ }
+ }
+
+ event_log += day_entry.Replace ("<!-- $day-entry-content -->", event_entries);
+ }
+
+ return event_log_html.Replace ("<!-- $event-log-content -->", event_log);
+ }
+
+
+ // Creates a .desktop entry in autostart folder to
+ // start SparkleShare automatically at login
+ public abstract void EnableSystemAutostart ();
+
+ // Installs a launcher so the user can launch SparkleShare
+ // from the Internet category if needed
+ public abstract void InstallLauncher ();
+
+ // Adds the SparkleShare folder to the user's
+ // list of bookmarked places
+ public abstract void AddToBookmarks ();
+
+ // Creates the SparkleShare folder in the user's home folder
+ public abstract bool CreateSparkleShareFolder ();
+
+ // Opens the SparkleShare folder or an (optional) subfolder
+ public abstract void OpenSparkleShareFolder (string subfolder);
+
+
+ // Fires events for the current syncing state
+ private void UpdateState ()
+ {
+ foreach (SparkleRepoBase repo in Repositories) {
+ if (repo.Status == SyncStatus.SyncDown ||
+ repo.Status == SyncStatus.SyncUp ||
+ repo.IsBuffering) {
+
+ if (OnSyncing != null)
+ OnSyncing ();
+
+ return;
+
+ } else if (repo.HasUnsyncedChanges) {
+ if (OnError != null)
+ OnError ();
+
+ return;
+ }
+ }
+
+ if (OnIdle != null)
+ OnIdle ();
+
+ FolderSize = GetFolderSize ();
+
+ if (FolderSizeChanged != null)
+ FolderSizeChanged (FolderSize);
+ }
+
+
+ // Adds a repository to the list of repositories
+ private void AddRepository (string folder_path)
+ {
+ if (folder_path.Equals (SparklePaths.SparkleTmpPath))
+ return;
+
+ string folder_name = Path.GetFileName (folder_path);
+ string backend = SparkleConfig.DefaultConfig.GetBackendForFolder (folder_name);
+
+ if (backend == null)
+ return;
+
+
+ SparkleRepoBase repo = null;
+
+ if (backend.Equals ("Hg"))
+ repo = new SparkleRepoHg (folder_path, new SparkleBackendHg ());
+
+ else if (backend.Equals ("Scp"))
+ repo = new SparkleRepoScp (folder_path, new SparkleBackendScp ());
+
+ else
+ repo = new SparkleRepoGit (folder_path, SparkleBackend.DefaultBackend);
+
+
+ repo.NewChangeSet += delegate (SparkleChangeSet change_set, string repository_path) {
+ string message = FormatMessage (change_set);
+
+ if (NotificationRaised != null)
+ NotificationRaised (change_set.UserName, change_set.UserEmail, message, repository_path);
+ };
+
+ repo.ConflictResolved += delegate {
+ if (ConflictNotificationRaised != null)
+ ConflictNotificationRaised ();
+ };
+
+ repo.SyncStatusChanged += delegate (SyncStatus status) {
+ if (status == SyncStatus.Idle ||
+ status == SyncStatus.SyncUp ||
+ status == SyncStatus.SyncDown ||
+ status == SyncStatus.Error) {
+
+ UpdateState ();
+ }
+ };
+
+ repo.ChangesDetected += delegate {
+ UpdateState ();
+ };
+
+ Repositories.Add (repo);
+ }
+
+
+ // Removes a repository from the list of repositories and
+ // updates the statusicon menu
+ private void RemoveRepository (string folder_path)
+ {
+ string folder_name = Path.GetFileName (folder_path);
+
+ for (int i = 0; i < Repositories.Count; i++) {
+ SparkleRepoBase repo = Repositories [i];
+
+ if (repo.Name.Equals (folder_name)) {
+ repo.Dispose ();
+ Repositories.Remove (repo);
+ repo = null;
+ break;
+ }
+ }
+ }
+
+
+ // Updates the list of repositories with all the
+ // folders in the SparkleShare folder
+ private void PopulateRepositories ()
+ {
+ Repositories = new List<SparkleRepoBase> ();
+
+ foreach (string folder_name in SparkleConfig.DefaultConfig.Folders) {
+ string folder_path = Path.Combine (SparklePaths.SparklePath, folder_name);
+
+ if (Directory.Exists (folder_path))
+ AddRepository (folder_path);
+ else
+ SparkleConfig.DefaultConfig.RemoveFolder (folder_name);
+ }
+
+ if (FolderListChanged != null)
+ FolderListChanged ();
+
+ FolderSize = GetFolderSize ();
+
+ if (FolderSizeChanged != null)
+ FolderSizeChanged (FolderSize);
+ }
+
+
+ public bool NotificationsEnabled {
+ get {
+ string notifications_enabled =
+ SparkleConfig.DefaultConfig.GetConfigOption ("notifications");
+
+ if (String.IsNullOrEmpty (notifications_enabled)) {
+ SparkleConfig.DefaultConfig.SetConfigOption ("notifications", bool.TrueString);
+ return true;
+
+ } else {
+ return notifications_enabled.Equals (bool.TrueString);
+ }
+ }
+ }
+
+
+ public void ToggleNotifications () {
+ bool notifications_enabled =
+ SparkleConfig.DefaultConfig.GetConfigOption ("notifications")
+ .Equals (bool.TrueString);
+
+ if (notifications_enabled)
+ SparkleConfig.DefaultConfig.SetConfigOption ("notifications", bool.FalseString);
+ else
+ SparkleConfig.DefaultConfig.SetConfigOption ("notifications", bool.TrueString);
+ }
+
+
+ private string GetFolderSize ()
+ {
+ double folder_size = CalculateFolderSize (new DirectoryInfo (SparklePaths.SparklePath));
+ return FormatFolderSize (folder_size);
+ }
+
+
+ private string FormatMessage (SparkleChangeSet change_set)
+ {
+ string file_name = "";
+ string message = "";
+
+ if (change_set.Added.Count > 0) {
+ file_name = change_set.Added [0];
+ message = String.Format (_("added ‘{0}’"), file_name);
+ }
+
+ if (change_set.MovedFrom.Count > 0) {
+ file_name = change_set.MovedFrom [0];
+ message = String.Format (_("moved ‘{0}’"), file_name);
+ }
+
+ if (change_set.Edited.Count > 0) {
+ file_name = change_set.Edited [0];
+ message = String.Format (_("edited ‘{0}’"), file_name);
+ }
+
+ if (change_set.Deleted.Count > 0) {
+ file_name = change_set.Deleted [0];
+ message = String.Format (_("deleted ‘{0}’"), file_name);
+ }
+
+ int changes_count = (change_set.Added.Count +
+ change_set.Edited.Count +
+ change_set.Deleted.Count +
+ change_set.MovedFrom.Count) - 1;
+
+ if (changes_count > 0) {
+ string msg = Catalog.GetPluralString ("and {0} more", "and {0} more", changes_count);
+ message += " " + String.Format (msg, changes_count);
+
+ } else if (changes_count < 0) {
+ message += _("did something magical");
+ }
+
+ return message;
+ }
+
+
+ // Recursively gets a folder's size in bytes
+ private double CalculateFolderSize (DirectoryInfo parent)
+ {
+ if (!Directory.Exists (parent.ToString ()))
+ return 0;
+
+ double size = 0;
+
+ // Ignore the temporary 'rebase-apply' and '.tmp' directories. This prevents potential
+ // crashes when files are being queried whilst the files have already been deleted.
+ if (parent.Name.Equals ("rebase-apply") ||
+ parent.Name.Equals (".tmp"))
+ return 0;
+
+ try {
+ foreach (FileInfo file in parent.GetFiles()) {
+ if (!file.Exists)
+ return 0;
+
+ size += file.Length;
+ }
+
+ foreach (DirectoryInfo directory in parent.GetDirectories())
+ size += CalculateFolderSize (directory);
+
+ } catch (DirectoryNotFoundException) {
+ return 0;
+ }
+
+ return size;
+ }
+
+
+ // Format a file size nicely with small caps.
+ // Example: 1048576 becomes "1 ᴍʙ"
+ private string FormatFolderSize (double byte_count)
+ {
+ if (byte_count >= 1099511627776)
+ return String.Format ("{0:##.##} ᴛʙ", Math.Round (byte_count / 1099511627776, 1));
+ else if (byte_count >= 1073741824)
+ return String.Format ("{0:##.##} ɢʙ", Math.Round (byte_count / 1073741824, 1));
+ else if (byte_count >= 1048576)
+ return String.Format ("{0:##.##} ᴍʙ", Math.Round (byte_count / 1048576, 1));
+ else if (byte_count >= 1024)
+ return String.Format ("{0:##.##} ᴋʙ", Math.Round (byte_count / 1024, 1));
+ else
+ return byte_count.ToString () + " bytes";
+ }
+
+
+ public void OpenSparkleShareFolder ()
+ {
+ OpenSparkleShareFolder ("");
+ }
+
+
+ // Adds the user's SparkleShare key to the ssh-agent,
+ // so all activity is done with this key
+ public void AddKey ()
+ {
+ string keys_path = SparklePaths.SparkleConfigPath;
+ string key_file_name = "sparkleshare." + UserEmail + ".key";
+
+ Process process = new Process ();
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.FileName = "ssh-add";
+ process.StartInfo.Arguments = Path.Combine (keys_path, key_file_name);
+ process.Start ();
+ process.WaitForExit ();
+ }
+
+
+ public bool BackendIsPresent {
+ get {
+ return SparkleBackend.DefaultBackend.IsPresent;
+ }
+ }
+
+
+ // Looks up the user's name from the global configuration
+ public string UserName
+ {
+ get {
+ return SparkleConfig.DefaultConfig.UserName;
+ }
+
+ set {
+ SparkleConfig.DefaultConfig.UserName = value;
+ }
+ }
+
+
+ // Looks up the user's email from the global configuration
+ public string UserEmail
+ {
+ get {
+ return SparkleConfig.DefaultConfig.UserEmail;
+ }
+
+ set {
+ SparkleConfig.DefaultConfig.UserEmail = value;
+ }
+ }
+
+
+ // Generates and installs an RSA keypair to identify this system
+ public void GenerateKeyPair ()
+ {
+ string keys_path = SparklePaths.SparkleConfigPath;
+ string key_file_name = "sparkleshare." + UserEmail + ".key";
+ string key_file_path = Path.Combine (keys_path, key_file_name);
+
+ if (File.Exists (key_file_path)) {
+ SparkleHelpers.DebugInfo ("Config", "Key already exists ('" + key_file_name + "'), " +
+ "leaving it untouched");
+ return;
+ }
+
+ if (!Directory.Exists (keys_path))
+ Directory.CreateDirectory (keys_path);
+
+ if (!File.Exists (key_file_name)) {
+ Process process = new Process () {
+ EnableRaisingEvents = true
+ };
+
+ process.StartInfo.WorkingDirectory = keys_path;
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.FileName = "ssh-keygen";
+
+ // -t is the crypto type
+ // -P is the password (none)
+ // -f is the file name to store the private key in
+ process.StartInfo.Arguments = "-t rsa -P \"\" -f " + key_file_name;
+
+ process.Exited += delegate {
+ SparkleHelpers.DebugInfo ("Config", "Created private key '" + key_file_name + "'");
+ SparkleHelpers.DebugInfo ("Config", "Created public key '" + key_file_name + ".pub'");
+
+ // Create an easily accessible copy of the public
+ // key in the user's SparkleShare folder
+ File.Copy (key_file_path + ".pub",
+ Path.Combine (SparklePath, UserName + "'s key.txt"));
+ };
+
+ process.Start ();
+ process.WaitForExit ();
+ }
+ }
+
+
+ // Gets the avatar for a specific email address and size
+ public string GetAvatar (string email, int size)
+ {
+ string avatar_path = SparkleHelpers.CombineMore (SparklePaths.SparkleLocalIconPath,
+ size + "x" + size, "status");
+
+ if (!Directory.Exists (avatar_path)) {
+ Directory.CreateDirectory (avatar_path);
+ SparkleHelpers.DebugInfo ("Config", "Created '" + avatar_path + "'");
+ }
+
+ string avatar_file_path = SparkleHelpers.CombineMore (avatar_path, "avatar-" + email);
+
+ if (File.Exists (avatar_file_path)) {
+ return avatar_file_path;
+
+ } else {
+ // Let's try to get the person's gravatar for next time
+ WebClient web_client = new WebClient ();
+ Uri uri = new Uri ("http://www.gravatar.com/avatar/" + GetMD5 (email) +
+ ".jpg?s=" + size + "&d=404");
+
+ string tmp_file_path = SparkleHelpers.CombineMore (SparklePaths.SparkleTmpPath, email + size);
+
+ if (!File.Exists (tmp_file_path)) {
+ web_client.DownloadFileAsync (uri, tmp_file_path);
+
+ web_client.DownloadFileCompleted += delegate {
+ if (File.Exists (avatar_file_path))
+ File.Delete (avatar_file_path);
+
+ FileInfo tmp_file_info = new FileInfo (tmp_file_path);
+
+ if (tmp_file_info.Length > 255)
+ File.Move (tmp_file_path, avatar_file_path);
+
+ if (AvatarFetched != null)
+ AvatarFetched ();
+ };
+ }
+
+ // Fall back to a generic icon if there is no gravatar
+ if (File.Exists (avatar_file_path))
+ return avatar_file_path;
+ else
+ return null;
+ }
+ }
+
+
+ public void FetchFolder (string server, string remote_folder)
+ {
+ if (!Directory.Exists (SparklePaths.SparkleTmpPath))
+ Directory.CreateDirectory (SparklePaths.SparkleTmpPath);
+
+ // Strip the '.git' from the name
+ string canonical_name = Path.GetFileNameWithoutExtension (remote_folder);
+ string tmp_folder = Path.Combine (SparklePaths.SparkleTmpPath, canonical_name);
+
+ SparkleFetcherBase fetcher = null;
+ string backend = null;
+
+ if (remote_folder.EndsWith (".hg")) {
+ remote_folder = remote_folder.Substring (0, (remote_folder.Length - 3));
+ fetcher = new SparkleFetcherHg (server, remote_folder, tmp_folder);
+ backend = "Hg";
+
+ } else if (remote_folder.EndsWith (".scp")) {
+ remote_folder = remote_folder.Substring (0, (remote_folder.Length - 4));
+ fetcher = new SparkleFetcherScp (server, remote_folder, tmp_folder);
+ backend = "Scp";
+
+ } else {
+ fetcher = new SparkleFetcherGit (server, remote_folder, tmp_folder);
+ backend = "Git";
+ }
+
+ bool target_folder_exists = Directory.Exists (Path.Combine (SparklePaths.SparklePath, canonical_name));
+
+ // Add a numbered suffix to the nameif a folder with the same name
+ // already exists. Example: "Folder (2)"
+ int i = 1;
+ while (target_folder_exists) {
+ i++;
+ target_folder_exists = Directory.Exists (
+ Path.Combine (SparklePaths.SparklePath, canonical_name + " (" + i + ")"));
+ }
+
+ string target_folder_name = canonical_name;
+ if (i > 1)
+ target_folder_name += " (" + i + ")";
+
+ fetcher.Finished += delegate {
+
+ // Needed to do the moving
+ SparkleHelpers.ClearAttributes (tmp_folder);
+ string target_folder_path = Path.Combine (SparklePaths.SparklePath, target_folder_name);
+
+ try {
+ Directory.Move (tmp_folder, target_folder_path);
+ } catch (Exception e) {
+ SparkleHelpers.DebugInfo ("Controller", "Error moving folder: " + e.Message);
+ }
+
+ SparkleConfig.DefaultConfig.AddFolder (target_folder_name, fetcher.RemoteUrl, backend);
+ AddRepository (target_folder_path);
+
+ if (FolderFetched != null)
+ FolderFetched ();
+
+ FolderSize = GetFolderSize ();
+
+ if (FolderSizeChanged != null)
+ FolderSizeChanged (FolderSize);
+
+ if (FolderListChanged != null)
+ FolderListChanged ();
+
+ fetcher.Dispose ();
+
+ if (Directory.Exists (SparklePaths.SparkleTmpPath))
+ Directory.Delete (SparklePaths.SparkleTmpPath, true);
+ };
+
+
+ fetcher.Failed += delegate {
+
+ if (FolderFetchError != null)
+ FolderFetchError ();
+
+ fetcher.Dispose ();
+
+ if (Directory.Exists (SparklePaths.SparkleTmpPath))
+ Directory.Delete (SparklePaths.SparkleTmpPath, true);
+ };
+
+
+ fetcher.Start ();
+ }
+
+
+ // Creates an MD5 hash of input
+ private string GetMD5 (string s)
+ {
+ MD5 md5 = new MD5CryptoServiceProvider ();
+ Byte[] bytes = ASCIIEncoding.Default.GetBytes (s);
+ Byte[] encoded_bytes = md5.ComputeHash (bytes);
+ return BitConverter.ToString (encoded_bytes).ToLower ().Replace ("-", "");
+ }
+
+
+ // Checks whether there are any folders syncing and
+ // quits if safe
+ public void TryQuit ()
+ {
+ foreach (SparkleRepoBase repo in Repositories) {
+ if (repo.Status == SyncStatus.SyncUp ||
+ repo.Status == SyncStatus.SyncDown ||
+ repo.IsBuffering) {
+
+ if (OnQuitWhileSyncing != null)
+ OnQuitWhileSyncing ();
+
+ return;
+ }
+ }
+
+ Quit ();
+ }
+
+
+ public void Quit ()
+ {
+ foreach (SparkleRepoBase repo in Repositories)
+ repo.Dispose ();
+
+ Environment.Exit (0);
+ }
+
+
+ // Checks to see if an email address is valid
+ public bool IsValidEmail (string email)
+ {
+ Regex regex = new Regex (@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", RegexOptions.IgnoreCase);
+ return regex.IsMatch (email);
+ }
+
+
+ public void CheckForNewVersion ()
+ {
+ WebClient web_client = new WebClient ();
+ Uri uri = new Uri ("http://www.sparkleshare.org/version");
+
+ web_client.DownloadStringCompleted += delegate (object o, DownloadStringCompletedEventArgs args) {
+ string new_version = args.Result.Trim ();
+
+ if (Defines.VERSION.Equals (new_version)) {
+ if (VersionUpToDate != null)
+ VersionUpToDate ();
+
+ } else {
+ if (NewVersionAvailable != null)
+ NewVersionAvailable (new_version);
+ }
+ };
+
+ web_client.DownloadStringAsync (uri);
+ }
+ }
+
+
+ public class ChangeSet : SparkleChangeSet { }
+
+
+ // All change sets that happened on a day
+ public class ActivityDay : List <SparkleChangeSet>
+ {
+ public DateTime DateTime;
+
+ public ActivityDay (DateTime date_time)
+ {
+ DateTime = date_time;
+ DateTime = new DateTime (DateTime.Year, DateTime.Month, DateTime.Day);
+ }
+ }
+}
diff --git a/SparkleShare/SparkleEntry.cs b/SparkleShare/SparkleEntry.cs
new file mode 100644
index 0000000..96ac5be
--- /dev/null
+++ b/SparkleShare/SparkleEntry.cs
@@ -0,0 +1,92 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General private License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General private License for more details.
+//
+// You should have received a copy of the GNU General private License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using Gtk;
+
+namespace SparkleShare {
+
+ public class SparkleEntry : Entry {
+
+ public bool ExampleTextActive;
+ private string pExampleText;
+
+
+ public SparkleEntry ()
+ {
+ ExampleTextActive = true;
+
+ FocusGrabbed += delegate { OnEntered (); };
+ ClipboardPasted += delegate { OnEntered (); };
+
+ FocusOutEvent += delegate {
+
+ if (Text.Equals ("") || Text == null)
+ ExampleTextActive = true;
+
+ if (ExampleTextActive)
+ UseExampleText ();
+ };
+ }
+
+
+ private void OnEntered ()
+ {
+ if (ExampleTextActive) {
+ ExampleTextActive = false;
+ Text = "";
+ UseNormalTextColor ();
+ }
+ }
+
+
+ public string ExampleText
+ {
+ get {
+ return pExampleText;
+ }
+
+ set {
+ pExampleText = value;
+
+ if (ExampleTextActive) {
+
+ UseExampleText ();
+
+ }
+ }
+ }
+
+
+ private void UseExampleText ()
+ {
+ Text = pExampleText;
+ UseSecondaryTextColor ();
+ }
+
+
+ private void UseSecondaryTextColor ()
+ {
+ ModifyText (StateType.Normal, Style.Foreground (StateType.Insensitive));
+ }
+
+
+ private void UseNormalTextColor ()
+ {
+ ModifyText (StateType.Normal, Style.Foreground (StateType.Normal));
+ }
+ }
+}
diff --git a/SparkleShare/SparkleInfobar.cs b/SparkleShare/SparkleInfobar.cs
new file mode 100644
index 0000000..b211771
--- /dev/null
+++ b/SparkleShare/SparkleInfobar.cs
@@ -0,0 +1,50 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using Gtk;
+
+namespace SparkleShare {
+
+ // An infobar
+ public class SparkleInfobar : EventBox {
+
+ public SparkleInfobar (string icon_name, string title, string text)
+ {
+ Window window = new Window (WindowType.Popup) {
+ Name = "gtk-tooltip"
+ };
+
+ window.EnsureStyle ();
+ Style = window.Style;
+
+ Label label = new Label () {
+ Markup = "<b>" + title + "</b>\n" + text
+ };
+
+ HBox hbox = new HBox (false, 12) {
+ BorderWidth = 12
+ };
+
+ hbox.PackStart (new Image (SparkleUIHelpers.GetIcon (icon_name, 24)),
+ false, false, 0);
+
+ hbox.PackStart (label, false, false, 0);
+
+ Add (hbox);
+ }
+ }
+}
diff --git a/SparkleShare/SparkleIntro.cs b/SparkleShare/SparkleIntro.cs
new file mode 100644
index 0000000..2184d8a
--- /dev/null
+++ b/SparkleShare/SparkleIntro.cs
@@ -0,0 +1,665 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General private License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General private License for more details.
+//
+// You should have received a copy of the GNU General private License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Timers;
+
+using Gtk;
+using Mono.Unix;
+using Notifications;
+
+namespace SparkleShare {
+
+ public class SparkleIntro : SparkleWindow {
+
+ private Entry NameEntry;
+ private Entry EmailEntry;
+ private SparkleEntry ServerEntry;
+ private SparkleEntry FolderEntry;
+ private Button NextButton;
+ private Button SyncButton;
+ private bool ServerFormOnly;
+ private string SecondaryTextColor;
+ private ProgressBar progress_bar = new ProgressBar () { PulseStep = 0.01 };
+ private Timer progress_bar_pulse_timer = new Timer () { Interval = 25, Enabled = true };
+
+
+ // Short alias for the translations
+ public static string _ (string s)
+ {
+ return Catalog.GetString (s);
+ }
+
+
+ public SparkleIntro () : base ()
+ {
+ ServerFormOnly = false;
+ SecondaryTextColor = SparkleUIHelpers.GdkColorToHex (Style.Foreground (StateType.Insensitive));
+ }
+
+
+ public void ShowAccountForm ()
+ {
+ Reset ();
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Deletable = false;
+
+ Label header = new Label ("<span size='large'><b>" +
+ _("Welcome to SparkleShare!") +
+ "</b></span>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Label information = new Label (_("Before we can create a SparkleShare folder on this " +
+ "computer, we need a few bits of information from you.")) {
+ Xalign = 0,
+ Wrap = true
+ };
+
+ Table table = new Table (4, 2, true) {
+ RowSpacing = 6
+ };
+
+ Label name_label = new Label ("<b>" + _("Full Name:") + "</b>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ NameEntry = new Entry (SparkleShare.Controller.UserName);
+ NameEntry.Changed += delegate {
+ CheckAccountForm ();
+ };
+
+ EmailEntry = new Entry ();
+ EmailEntry.Changed += delegate {
+ CheckAccountForm ();
+ };
+
+ Label email_label = new Label ("<b>" + _("Email:") + "</b>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+
+ table.Attach (name_label, 0, 1, 0, 1);
+ table.Attach (NameEntry, 1, 2, 0, 1);
+ table.Attach (email_label, 0, 1, 1, 2);
+ table.Attach (EmailEntry, 1, 2, 1, 2);
+
+ NextButton = new Button (_("Next")) {
+ Sensitive = false
+ };
+
+ NextButton.Clicked += delegate (object o, EventArgs args) {
+ NextButton.Remove (NextButton.Child);
+ NextButton.Add (new Label (_("Configuring…")));
+
+ NextButton.Sensitive = false;
+ table.Sensitive = false;
+
+ NextButton.ShowAll ();
+
+ SparkleShare.Controller.UserName = NameEntry.Text;
+ SparkleShare.Controller.UserEmail = EmailEntry.Text;
+
+ SparkleShare.Controller.GenerateKeyPair ();
+ SparkleShare.Controller.AddKey ();
+
+ SparkleUI.StatusIcon.CreateMenu ();
+
+ Deletable = true;
+ ShowServerForm ();
+ };
+
+ AddButton (NextButton);
+
+ layout_vertical.PackStart (header, false, false, 0);
+ layout_vertical.PackStart (information, false, false, 21);
+ layout_vertical.PackStart (new Label (""), false, false, 0);
+ layout_vertical.PackStart (table, false, false, 0);
+
+ Add (layout_vertical);
+ CheckAccountForm ();
+ ShowAll ();
+ }
+
+
+ public void ShowServerForm (bool server_form_only)
+ {
+ ServerFormOnly = server_form_only;
+ ShowServerForm ();
+ }
+
+
+ public void ShowServerForm ()
+ {
+ Reset ();
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("<span size='large'><b>" +
+ _("Where is your remote folder?") +
+ "</b></span>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Table table = new Table (7, 2, false) {
+ RowSpacing = 12
+ };
+
+ HBox layout_server = new HBox (true, 0);
+
+ ServerEntry = new SparkleEntry () {
+ ExampleText = _("address-to-server.com")
+ };
+
+ ServerEntry.Changed += CheckServerForm;
+
+ RadioButton radio_button = new RadioButton ("<b>" + _("On my own server:") + "</b>");
+
+ layout_server.Add (radio_button);
+ layout_server.Add (ServerEntry);
+
+ string github_text = "<b>" + "Github" + "</b>\n" +
+ "<span fgcolor='" + SecondaryTextColor + "' size='small'>" +
+ _("Free hosting for Free and Open Source Software projects.") + "\n" +
+ _("Also has paid accounts for extra private space and bandwidth.") +
+ "</span>";
+
+ RadioButton radio_button_github = new RadioButton (radio_button, github_text);
+
+ (radio_button_github.Child as Label).UseMarkup = true;
+ (radio_button_github.Child as Label).Wrap = true;
+
+ string gnome_text = "<b>" + _("The GNOME Project") + "</b>\n" +
+ "<span fgcolor='" + SecondaryTextColor + "' size='small'>" +
+ _("GNOME is an easy to understand interface to your computer.") + "\n" +
+ _("Select this option if you’re a developer or designer working on GNOME.") +
+ "</span>";
+
+ RadioButton radio_button_gnome = new RadioButton (radio_button, gnome_text);
+
+ (radio_button_gnome.Child as Label).UseMarkup = true;
+ (radio_button_gnome.Child as Label).Wrap = true;
+
+ string gitorious_text = "<b>" + _("Gitorious") + "</b>\n" +
+ "<span fgcolor='" + SecondaryTextColor + "' size='small'>" +
+ _("Completely Free as in Freedom infrastructure.") + "\n" +
+ _("Free accounts for Free and Open Source projects.") +
+ "</span>";
+ RadioButton radio_button_gitorious = new RadioButton (radio_button, gitorious_text) {
+ Xalign = 0
+ };
+
+ (radio_button_gitorious.Child as Label).UseMarkup = true;
+ (radio_button_gitorious.Child as Label).Wrap = true;
+
+ radio_button_github.Toggled += delegate {
+ if (radio_button_github.Active)
+ FolderEntry.ExampleText = _("Username/Folder");
+ };
+
+ radio_button_gitorious.Toggled += delegate {
+ if (radio_button_gitorious.Active)
+ FolderEntry.ExampleText = _("Project/Folder");
+ };
+
+ radio_button_gnome.Toggled += delegate {
+ if (radio_button_gnome.Active)
+ FolderEntry.ExampleText = _("Project");
+ };
+
+ radio_button.Toggled += delegate {
+ if (radio_button.Active) {
+ FolderEntry.ExampleText = _("Folder");
+ ServerEntry.Sensitive = true;
+ CheckServerForm ();
+ } else {
+ ServerEntry.Sensitive = false;
+ CheckServerForm ();
+ }
+
+ ShowAll ();
+ };
+
+ table.Attach (layout_server, 0, 2, 1, 2);
+ table.Attach (radio_button_github, 0, 2, 2, 3);
+ table.Attach (radio_button_gitorious, 0, 2, 3, 4);
+ table.Attach (radio_button_gnome, 0, 2, 4, 5);
+
+ HBox layout_folder = new HBox (true, 0);
+
+ FolderEntry = new SparkleEntry () {
+ ExampleText = _("Folder")
+ };
+
+ FolderEntry.Changed += CheckServerForm;
+
+ Label folder_label = new Label (_("Folder Name:")) {
+ UseMarkup = true,
+ Xalign = 1
+ };
+
+ (radio_button.Child as Label).UseMarkup = true;
+
+ layout_folder.PackStart (folder_label, true, true, 12);
+ layout_folder.PackStart (FolderEntry, true, true, 0);
+
+ SyncButton = new Button (_("Sync"));
+
+ SyncButton.Clicked += delegate {
+ string folder_name = FolderEntry.Text;
+ string server = ServerEntry.Text;
+ string canonical_name = System.IO.Path.GetFileNameWithoutExtension (folder_name);
+
+ if (radio_button_gitorious.Active)
+ server = "gitorious.org";
+
+ if (radio_button_github.Active)
+ server = "github.com";
+
+ if (radio_button_gnome.Active)
+ server = "gnome.org";
+
+ Application.Invoke (delegate {
+ Deletable = false;
+ ShowSyncingPage (canonical_name);
+ });
+
+ SparkleShare.Controller.FolderFetched += delegate {
+ Application.Invoke (delegate {
+ this.progress_bar_pulse_timer.Stop ();
+ Deletable = true;
+ UrgencyHint = true;
+ ShowSuccessPage (canonical_name);
+ });
+ };
+
+ SparkleShare.Controller.FolderFetchError += delegate {
+ Application.Invoke (delegate {
+ this.progress_bar_pulse_timer.Stop ();
+ Deletable = true;
+ ShowErrorPage ();
+ });
+ };
+
+ SparkleShare.Controller.FetchFolder (server, folder_name);
+ };
+
+
+ if (ServerFormOnly) {
+ Button cancel_button = new Button (_("Cancel"));
+
+ cancel_button.Clicked += delegate {
+ Close ();
+ };
+
+ AddButton (cancel_button);
+ } else {
+ Button skip_button = new Button (_("Skip"));
+
+ skip_button.Clicked += delegate {
+ ShowCompletedPage ();
+ };
+
+ AddButton (skip_button);
+ }
+
+ AddButton (SyncButton);
+
+ layout_vertical.PackStart (header, false, false, 0);
+ layout_vertical.PackStart (new Label (""), false, false, 3);
+ layout_vertical.PackStart (table, false, false, 0);
+ layout_vertical.PackStart (layout_folder, false, false, 6);
+
+ Add (layout_vertical);
+ CheckServerForm ();
+ ShowAll ();
+ }
+
+
+ public void ShowInvitationPage (string server, string folder, string token)
+ {
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("<span size='large'><b>" +
+ _("Invitation received!") +
+ "</b></span>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Label information = new Label (_("You've received an invitation to join a shared folder.\n" +
+ "We're ready to hook you up immediately if you wish.")) {
+ Xalign = 0,
+ Wrap = true
+ };
+
+ Label question = new Label (_("Do you accept this invitation?")) {
+ Xalign = 0,
+ Wrap = true
+ };
+
+ Table table = new Table (2, 2, false) {
+ RowSpacing = 6
+ };
+
+ Label server_label = new Label (_("Server Address:")) {
+ Xalign = 0
+ };
+
+ Label server_text = new Label ("<b>" + server + "</b>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Label folder_label = new Label (_("Folder Name:")) {
+ Xalign = 0
+ };
+
+ Label folder_text = new Label ("<b>" + folder + "</b>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ table.Attach (folder_label, 0, 1, 0, 1);
+ table.Attach (folder_text, 1, 2, 0, 1);
+ table.Attach (server_label, 0, 1, 1, 2);
+ table.Attach (server_text, 1, 2, 1, 2);
+
+ Button reject_button = new Button (_("Reject"));
+ Button accept_button = new Button (_("Accept and Sync"));
+
+ reject_button.Clicked += delegate {
+ Close ();
+ };
+
+ accept_button.Clicked += delegate {
+ string url = "ssh://git@" + server + "/" + folder;
+
+ SparkleShare.Controller.FolderFetched += delegate {
+ Application.Invoke (delegate {
+ this.progress_bar_pulse_timer.Stop ();
+ ShowSuccessPage (folder);
+ });
+ };
+
+ SparkleShare.Controller.FolderFetchError += delegate {
+ Application.Invoke (delegate {
+ this.progress_bar_pulse_timer.Stop ();
+ ShowErrorPage ();
+ });
+ };
+
+
+ SparkleShare.Controller.FetchFolder (url, folder);
+ };
+
+ AddButton (reject_button);
+ AddButton (accept_button);
+
+ layout_vertical.PackStart (header, false, false, 0);
+ layout_vertical.PackStart (information, false, false, 21);
+ layout_vertical.PackStart (new Label (""), false, false, 0);
+ layout_vertical.PackStart (table, false, false, 0);
+ layout_vertical.PackStart (new Label (""), false, false, 0);
+ layout_vertical.PackStart (question, false, false, 21);
+
+ Add (layout_vertical);
+ ShowAll ();
+ }
+
+
+ // The page shown when syncing has failed
+ private void ShowErrorPage ()
+ {
+ Reset ();
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("<span size='large'><b>" +
+ _("Something went wrong…") +
+ "</b></span>\n") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Button try_again_button = new Button (_("Try Again")) {
+ Sensitive = true
+ };
+
+ try_again_button.Clicked += delegate (object o, EventArgs args) {
+ ShowServerForm ();
+ };
+
+ AddButton (try_again_button);
+
+ layout_vertical.PackStart (header, false, false, 0);
+
+ Add (layout_vertical);
+ ShowAll ();
+ }
+
+
+ // The page shown when syncing has succeeded
+ private void ShowSuccessPage (string folder_name)
+ {
+ Reset ();
+
+ UrgencyHint = true;
+
+ if (!HasToplevelFocus) {
+ string title = String.Format (_("‘{0}’ has been successfully added"), folder_name);
+ string subtext = _("");
+
+ new SparkleBubble (title, subtext).Show ();
+ }
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("<span size='large'><b>" +
+ _("Folder synced successfully!") +
+ "</b></span>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Label information = new Label (
+ String.Format (_("Now you can access the synced files from ‘{0}’ in your SparkleShare folder."),
+ folder_name)) {
+ Xalign = 0,
+ Wrap = true,
+ UseMarkup = true
+ };
+
+ // A button that opens the synced folder
+ Button open_folder_button = new Button (_("Open Folder"));
+
+ open_folder_button.Clicked += delegate {
+ SparkleShare.Controller.OpenSparkleShareFolder (folder_name);
+ };
+
+ Button finish_button = new Button (_("Finish"));
+
+ finish_button.Clicked += delegate (object o, EventArgs args) {
+ Close ();
+ };
+
+ AddButton (open_folder_button);
+ AddButton (finish_button);
+
+ layout_vertical.PackStart (header, false, false, 0);
+ layout_vertical.PackStart (information, false, false, 21);
+
+ Add (layout_vertical);
+ ShowAll ();
+ }
+
+
+ // The page shown whilst syncing
+ private void ShowSyncingPage (string name)
+ {
+ Reset ();
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("<span size='large'><b>" +
+ String.Format (_("Syncing folder ‘{0}’…"), name) +
+ "</b></span>") {
+ UseMarkup = true,
+ Xalign = 0,
+ Wrap = true
+ };
+
+ Label information = new Label (_("This may take a while.\n") +
+ _("Are you sure it’s not coffee o'clock?")) {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Button button = new Button () {
+ Sensitive = false,
+ Label = _("Finish")
+ };
+
+ button.Clicked += delegate {
+ Close ();
+ };
+
+ AddButton (button);
+
+ layout_vertical.PackStart (header, false, false, 0);
+ layout_vertical.PackStart (information, false, false, 21);
+
+ this.progress_bar_pulse_timer.Elapsed += delegate {
+ Application.Invoke (delegate {
+ progress_bar.Pulse ();
+ });
+ };
+
+ layout_vertical.PackStart (this.progress_bar, false, false, 54);
+
+ Add (layout_vertical);
+ ShowAll ();
+ }
+
+
+ // The page shown when the setup has been completed
+ private void ShowCompletedPage ()
+ {
+ Reset ();
+
+ VBox layout_vertical = new VBox (false, 0);
+
+ Label header = new Label ("<span size='large'><b>" +
+ _("SparkleShare is ready to go!") +
+ "</b></span>") {
+ UseMarkup = true,
+ Xalign = 0
+ };
+
+ Label information = new Label (_("Now you can start accepting invitations from others. " + "\n" +
+ "Just click on invitations you get by email and " +
+ "we will take care of the rest.")) {
+ UseMarkup = true,
+ Wrap = true,
+ Xalign = 0
+ };
+
+
+ HBox link_wrapper = new HBox (false, 0);
+ LinkButton link = new LinkButton ("http://www.sparkleshare.org/",
+ _("Learn how to host your own SparkleServer"));
+
+ link_wrapper.PackStart (link, false, false, 0);
+
+ layout_vertical.PackStart (header, false, false, 0);
+ layout_vertical.PackStart (information, false, false, 21);
+ layout_vertical.PackStart (link_wrapper, false, false, 0);
+
+ Button finish_button = new Button (_("Finish"));
+
+ finish_button.Clicked += delegate (object o, EventArgs args) {
+ Close ();
+ };
+
+ AddButton (finish_button);
+
+ Add (layout_vertical);
+ ShowAll ();
+ }
+
+
+ // Enables or disables the 'Next' button depending on the
+ // entries filled in by the user
+ private void CheckAccountForm ()
+ {
+ if (NameEntry.Text.Length > 0 &&
+ IsValidEmail (EmailEntry.Text)) {
+
+ NextButton.Sensitive = true;
+ } else {
+ NextButton.Sensitive = false;
+ }
+ }
+
+
+ // Enables the Add button when the fields are
+ // filled in correctly
+ public void CheckServerForm (object o, EventArgs args)
+ {
+ CheckServerForm ();
+ }
+
+
+ // Enables the Add button when the fields are
+ // filled in correctly
+ public void CheckServerForm ()
+ {
+ SyncButton.Sensitive = false;
+
+ if (FolderEntry.ExampleTextActive ||
+ (ServerEntry.Sensitive && ServerEntry.ExampleTextActive))
+ return;
+
+ bool IsFolder = !FolderEntry.Text.Trim ().Equals ("");
+ bool IsServer = !ServerEntry.Text.Trim ().Equals ("");
+
+ if (ServerEntry.Sensitive == true) {
+ if (IsServer && IsFolder)
+ SyncButton.Sensitive = true;
+ } else if (IsFolder) {
+ SyncButton.Sensitive = true;
+ }
+ }
+
+
+ // Checks to see if an email address is valid
+ private bool IsValidEmail (string email)
+ {
+ Regex regex = new Regex (@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", RegexOptions.IgnoreCase);
+ return regex.IsMatch (email);
+ }
+ }
+}
diff --git a/SparkleShare/SparkleLinController.cs b/SparkleShare/SparkleLinController.cs
new file mode 100644
index 0000000..7ffb0fc
--- /dev/null
+++ b/SparkleShare/SparkleLinController.cs
@@ -0,0 +1,205 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading;
+
+using Mono.Unix;
+using SparkleLib;
+
+namespace SparkleShare {
+
+ public class SparkleLinController : SparkleController {
+
+ public SparkleLinController () : base ()
+ {
+
+ }
+
+
+ // Creates a .desktop entry in autostart folder to
+ // start SparkleShare automatically at login
+ public override void EnableSystemAutostart ()
+ {
+ string autostart_path = Path.Combine (Environment.GetFolderPath (
+ Environment.SpecialFolder.ApplicationData), "autostart");
+
+ string desktopfile_path = Path.Combine (autostart_path, "sparkleshare.desktop");
+
+ if (!Directory.Exists (autostart_path))
+ Directory.CreateDirectory (autostart_path);
+
+ if (!File.Exists (desktopfile_path)) {
+ TextWriter writer = new StreamWriter (desktopfile_path);
+ writer.WriteLine ("[Desktop Entry]\n" +
+ "Type=Application\n" +
+ "Name=SparkleShare\n" +
+ "Exec=sparkleshare start\n" +
+ "Icon=folder-sparkleshare\n" +
+ "Terminal=false\n" +
+ "X-GNOME-Autostart-enabled=true\n" +
+ "Categories=Network");
+ writer.Close ();
+
+ // Give the launcher the right permissions so it can be launched by the user
+ UnixFileInfo file_info = new UnixFileInfo (desktopfile_path);
+ file_info.Create (FileAccessPermissions.UserReadWriteExecute);
+
+ SparkleHelpers.DebugInfo ("Controller", "Enabled autostart on login");
+ }
+ }
+
+
+ // Installs a launcher so the user can launch SparkleShare
+ // from the Internet category if needed
+ public override void InstallLauncher ()
+ {
+ string apps_path = SparkleHelpers.CombineMore (SparklePaths.HomePath, ".local", "share", "applications");
+ string desktopfile_path = SparkleHelpers.CombineMore (apps_path, "sparkleshare.desktop");
+
+ if (!File.Exists (desktopfile_path)) {
+ if (!Directory.Exists (apps_path))
+ Directory.CreateDirectory (apps_path);
+
+ TextWriter writer = new StreamWriter (desktopfile_path);
+ writer.WriteLine ("[Desktop Entry]\n" +
+ "Type=Application\n" +
+ "Name=SparkleShare\n" +
+ "Comment=Share documents\n" +
+ "Exec=sparkleshare start\n" +
+ "Icon=folder-sparkleshare\n" +
+ "Terminal=false\n" +
+ "Categories=Network;");
+ writer.Close ();
+
+ // Give the launcher the right permissions so it can be launched by the user
+ UnixFileInfo file_info = new UnixFileInfo (desktopfile_path);
+ file_info.FileAccessPermissions = FileAccessPermissions.UserReadWriteExecute;
+
+ SparkleHelpers.DebugInfo ("Controller", "Created '" + desktopfile_path + "'");
+ }
+ }
+
+
+ // Adds the SparkleShare folder to the user's
+ // list of bookmarked places
+ public override void AddToBookmarks ()
+ {
+ string bookmarks_file_path = Path.Combine (SparklePaths.HomePath, ".gtk-bookmarks");
+ string sparkleshare_bookmark = "file://" + SparklePaths.SparklePath + " SparkleShare";
+
+ if (File.Exists (bookmarks_file_path)) {
+ StreamReader reader = new StreamReader (bookmarks_file_path);
+ string bookmarks = reader.ReadToEnd ();
+ reader.Close ();
+
+ if (!bookmarks.Contains (sparkleshare_bookmark)) {
+ TextWriter writer = File.AppendText (bookmarks_file_path);
+ writer.WriteLine ("file://" + SparklePaths.SparklePath + " SparkleShare");
+ writer.Close ();
+ }
+ } else {
+ StreamWriter writer = new StreamWriter (bookmarks_file_path);
+ writer.WriteLine ("file://" + SparklePaths.SparklePath + " SparkleShare");
+ writer.Close ();
+ }
+ }
+
+
+ // Creates the SparkleShare folder in the user's home folder
+ public override bool CreateSparkleShareFolder ()
+ {
+ if (!Directory.Exists (SparklePaths.SparklePath)) {
+
+ Directory.CreateDirectory (SparklePaths.SparklePath);
+ SparkleHelpers.DebugInfo ("Controller", "Created '" + SparklePaths.SparklePath + "'");
+
+ string gvfs_command_path = SparkleHelpers.CombineMore (Path.VolumeSeparatorChar.ToString (),
+ "usr", "bin", "gvfs-set-attribute");
+
+ // Add a special icon to the SparkleShare folder
+ if (File.Exists (gvfs_command_path)) {
+ Process process = new Process ();
+
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.FileName = "gvfs-set-attribute";
+
+ // Clear the custom (legacy) icon path
+ process.StartInfo.Arguments = "-t unset " + SparklePaths.SparklePath + " metadata::custom-icon";
+ process.Start ();
+ process.WaitForExit ();
+
+ // Give the SparkleShare folder an icon name, so that it scales
+ process.StartInfo.Arguments = SparklePaths.SparklePath + " metadata::custom-icon-name 'folder-sparkleshare'";
+ process.Start ();
+ process.WaitForExit ();
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+
+ public override string EventLogHTML {
+ get {
+ string path = SparkleHelpers.CombineMore (Defines.PREFIX,
+ "share", "sparkleshare", "html", "event-log.html");
+
+ return String.Join (Environment.NewLine, File.ReadAllLines (path));
+ }
+ }
+
+
+ public override string DayEntryHTML {
+ get {
+ string path = SparkleHelpers.CombineMore (Defines.PREFIX,
+ "share", "sparkleshare", "html", "day-entry.html");
+
+ return String.Join (Environment.NewLine, File.ReadAllLines (path));
+ }
+ }
+
+
+ public override string EventEntryHTML {
+ get {
+ string path = SparkleHelpers.CombineMore (Defines.PREFIX,
+ "share", "sparkleshare", "html", "event-entry.html");
+
+ return String.Join (Environment.NewLine, File.ReadAllLines (path));
+ }
+ }
+
+
+ public override void OpenSparkleShareFolder (string subfolder)
+ {
+ string folder = Path.Combine (SparklePaths.SparklePath, subfolder);
+
+ Process process = new Process ();
+ process.StartInfo.FileName = "xdg-open";
+ process.StartInfo.Arguments = "\"" + folder + "\"";
+ process.Start ();
+ }
+ }
+}
diff --git a/SparkleShare/SparkleLog.cs b/SparkleShare/SparkleLog.cs
new file mode 100644
index 0000000..e920571
--- /dev/null
+++ b/SparkleShare/SparkleLog.cs
@@ -0,0 +1,250 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text.RegularExpressions;
+using System.Threading;
+
+using Gtk;
+using Mono.Unix;
+using SparkleLib;
+using WebKit;
+
+namespace SparkleShare {
+
+ public class SparkleLog : Window {
+
+ public readonly string LocalPath;
+
+ private ScrolledWindow ScrolledWindow;
+ private MenuBar MenuBar;
+ private WebView WebView;
+ private string LinkStatus;
+ private SparkleSpinner Spinner;
+ private string HTML;
+ private EventBox LogContent;
+
+
+ // Short alias for the translations
+ public static string _ (string s)
+ {
+ return Catalog.GetString (s);
+ }
+
+
+ public SparkleLog (string path) : base ("")
+ {
+ LocalPath = path;
+
+ string name = System.IO.Path.GetFileName (LocalPath);
+ SetSizeRequest (480, 640);
+
+ Resizable = false;
+
+ BorderWidth = 0;
+ SetPosition (WindowPosition.Center);
+
+ // Open slightly off center for each consecutive window
+ if (SparkleUI.OpenLogs.Count > 0) {
+
+ int x, y;
+ GetPosition (out x, out y);
+ Move (x + SparkleUI.OpenLogs.Count * 20, y + SparkleUI.OpenLogs.Count * 20);
+
+ }
+
+ // TRANSLATORS: {0} is a folder name, and {1} is a server address
+ Title = String.Format(_("Events in ‘{0}’"), name);
+ IconName = "folder-sparkleshare";
+
+ DeleteEvent += Close;
+
+ CreateEventLog ();
+ UpdateEventLog ();
+ }
+
+
+ private void CreateEventLog ()
+ {
+ LogContent = new EventBox ();
+ VBox layout_vertical = new VBox (false, 0);
+
+ ScrolledWindow = new ScrolledWindow ();
+
+ WebView = new WebView () {
+ Editable = false
+ };
+
+ WebView.HoveringOverLink += delegate (object o, WebKit.HoveringOverLinkArgs args) {
+ LinkStatus = args.Link;
+ };
+
+ // FIXME: Use the right event, waiting for newer webkit bindings: NavigationPolicyDecisionRequested
+ WebView.NavigationRequested += delegate (object o, WebKit.NavigationRequestedArgs args) {
+ if (args.Request.Uri == LinkStatus) {
+ Process process = new Process ();
+ process.StartInfo.FileName = "xdg-open";
+ process.StartInfo.Arguments = args.Request.Uri.Replace (" ", "\\ "); // Escape space-characters
+ process.Start ();
+
+ UpdateEventLog ();
+ }
+ };
+
+ ScrolledWindow.Add (WebView);
+ LogContent.Add (ScrolledWindow);
+
+ layout_vertical.PackStart (LogContent, true, true, 0);
+
+ HButtonBox dialog_buttons = new HButtonBox {
+ Layout = ButtonBoxStyle.Edge,
+ BorderWidth = 12
+ };
+
+ Button open_folder_button = new Button (_("_Open Folder")) {
+ UseUnderline = true
+ };
+
+ open_folder_button.Clicked += delegate (object o, EventArgs args) {
+ SparkleShare.Controller.OpenSparkleShareFolder (LocalPath);
+ };
+
+ Button close_button = new Button (Stock.Close);
+
+ close_button.Clicked += delegate {
+ HideAll ();
+ };
+
+ dialog_buttons.Add (open_folder_button);
+ dialog_buttons.Add (close_button);
+
+ // We have to hide the menubar somewhere...
+ layout_vertical.PackStart (CreateShortcutsBar (), false, false, 0);
+ layout_vertical.PackStart (dialog_buttons, false, false, 0);
+
+ Add (layout_vertical);
+
+ ShowAll ();
+ }
+
+
+ public void UpdateEventLog ()
+ {
+ if (HTML == null) { // TODO: there may be a race condition here
+ LogContent.Remove (LogContent.Child);
+ Spinner = new SparkleSpinner (22);
+ LogContent.Add (Spinner);
+ LogContent.ShowAll ();
+ }
+
+ Thread thread = new Thread (new ThreadStart (delegate {
+ GenerateHTML ();
+ AddHTML ();
+ }));
+
+ thread.Start ();
+ }
+
+
+ private void GenerateHTML ()
+ {
+ HTML = SparkleShare.Controller.GetHTMLLog (System.IO.Path.GetFileName (LocalPath));
+
+ HTML = HTML.Replace ("<!-- $body-font-size -->", (double) (Style.FontDescription.Size / 1024 + 3) + "px");
+ HTML = HTML.Replace ("<!-- $day-entry-header-font-size -->", (Style.FontDescription.Size / 1024 + 3) + "px");
+ HTML = HTML.Replace ("<!-- $a-color -->", "#0085cf");
+ HTML = HTML.Replace ("<!-- $a-hover-color -->", "#009ff8");
+ HTML = HTML.Replace ("<!-- $body-font-family -->", "\"" + Style.FontDescription.Family + "\"");
+ HTML = HTML.Replace ("<!-- $body-color -->", SparkleUIHelpers.GdkColorToHex (Style.Foreground (StateType.Normal)));
+ HTML = HTML.Replace ("<!-- $body-background-color -->", SparkleUIHelpers.GdkColorToHex (new TreeView ().Style.Base (StateType.Normal)));
+ HTML = HTML.Replace ("<!-- $day-entry-header-background-color -->", SparkleUIHelpers.GdkColorToHex (Style.Background (StateType.Normal)));
+ HTML = HTML.Replace ("<!-- $secondary-font-color -->", SparkleUIHelpers.GdkColorToHex (Style.Foreground (StateType.Insensitive)));
+ HTML = HTML.Replace ("<!-- $small-color -->", SparkleUIHelpers.GdkColorToHex (Style.Foreground (StateType.Insensitive)));
+ HTML = HTML.Replace ("<!-- $no-buddy-icon-background-image -->", "file://" +
+ SparkleHelpers.CombineMore (Defines.PREFIX, "share", "sparkleshare", "icons",
+ "hicolor", "32x32", "status", "avatar-default.png"));
+ }
+
+
+ private void AddHTML ()
+ {
+ Application.Invoke (delegate {
+ Spinner.Stop ();
+ LogContent.Remove (LogContent.Child);
+
+ WebView.LoadString (HTML, null, null, "file://");
+
+ LogContent.Add (ScrolledWindow);
+ LogContent.ShowAll ();
+ });
+ }
+
+
+ public void Close (object o, DeleteEventArgs args)
+ {
+ HideAll ();
+ args.RetVal = true;
+ // TODO: window positions aren't saved
+ }
+
+
+ private MenuBar CreateShortcutsBar ()
+ {
+ // Adds a hidden menubar that contains to enable keyboard
+ // shortcuts to close the log
+ MenuBar = new MenuBar ();
+
+ MenuItem file_item = new MenuItem ("File");
+
+ Menu file_menu = new Menu ();
+
+ MenuItem close_1 = new MenuItem ("Close1");
+ MenuItem close_2 = new MenuItem ("Close2");
+
+ // adds specific Ctrl+W and Esc key accelerators to Log Window
+ AccelGroup accel_group = new AccelGroup ();
+ AddAccelGroup (accel_group);
+
+ // Close on Esc
+ close_1.AddAccelerator ("activate", accel_group, new AccelKey (Gdk.Key.W, Gdk.ModifierType.ControlMask,
+ AccelFlags.Visible));
+
+ close_1.Activated += delegate { HideAll (); };
+
+ // Close on Ctrl+W
+ close_2.AddAccelerator ("activate", accel_group, new AccelKey (Gdk.Key.Escape, Gdk.ModifierType.None,
+ AccelFlags.Visible));
+ close_2.Activated += delegate { HideAll (); };
+
+ file_menu.Append (close_1);
+ file_menu.Append (close_2);
+
+ file_item.Submenu = file_menu;
+
+ MenuBar.Append (file_item);
+
+ // Hacky way to hide the menubar, but the accellerators
+ // will simply be disabled when using Hide ()
+ MenuBar.HeightRequest = 1;
+ MenuBar.ModifyBg (StateType.Normal, Style.Background (StateType.Normal));
+
+ return MenuBar;
+ }
+ }
+}
diff --git a/SparkleShare/SparkleShare.cs b/SparkleShare/SparkleShare.cs
new file mode 100644
index 0000000..fed350a
--- /dev/null
+++ b/SparkleShare/SparkleShare.cs
@@ -0,0 +1,162 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text;
+
+using Mono.Unix;
+using Mono.Unix.Native;
+using SparkleLib;
+using SparkleLib.Options;
+
+namespace SparkleShare {
+
+ // This is SparkleShare!
+ public class SparkleShare {
+
+ public static SparkleController Controller;
+ public static SparkleUI UI;
+
+
+ // Short alias for the translations
+ public static string _ (string s)
+ {
+ return Catalog.GetString (s);
+ }
+
+
+ public static void Main (string [] args)
+ {
+ // Use translations
+ Catalog.Init (Defines.GETTEXT_PACKAGE, Defines.LOCALE_DIR);
+
+ // Don't allow running as root on Linux or Mac
+ if ((SparkleBackend.Platform == PlatformID.Unix ||
+ SparkleBackend.Platform == PlatformID.MacOSX) &&
+ new UnixUserInfo (UnixEnvironment.UserName).UserId == 0) {
+
+ Console.WriteLine (_("Sorry, you can't run SparkleShare with these permissions."));
+ Console.WriteLine (_("Things would go utterly wrong."));
+ Environment.Exit (-1);
+ }
+
+ // Parse the command line options
+ bool hide_ui = false;
+ bool show_help = false;
+
+ var p = new OptionSet () {
+ { "d|disable-gui", _("Don't show the notification icon"), v => hide_ui = v != null },
+ { "v|version", _("Print version information"), v => { PrintVersion (); } },
+ { "h|help", _("Show this help text"), v => show_help = v != null }
+ };
+
+ try {
+ p.Parse (args);
+
+ } catch (OptionException e) {
+ Console.Write ("SparkleShare: ");
+ Console.WriteLine (e.Message);
+ Console.WriteLine ("Try `sparkleshare --help' for more information.");
+ }
+
+ if (show_help)
+ ShowHelp (p);
+
+ // Load the right controller for the OS
+ string controller_name = "Lin";
+ switch (SparkleBackend.Platform) {
+ case PlatformID.Unix:
+ SetProcessName ("sparkleshare");
+ break;
+ case PlatformID.MacOSX:
+ controller_name = "Mac";
+ break;
+ case PlatformID.Win32NT:
+ controller_name = "Win";
+ break;
+ }
+
+ // Initialize the controller this way so that
+ // there aren't any exceptions in the OS specific UI's
+ Controller = (SparkleController) Activator.CreateInstance (
+ Type.GetType ("SparkleShare.Sparkle" + controller_name + "Controller"));
+
+ Controller.Initialize ();
+
+ if (Controller != null && !hide_ui) {
+ UI = new SparkleUI ();
+ UI.Run ();
+ }
+ }
+
+
+ // Prints the help output
+ public static void ShowHelp (OptionSet option_set)
+ {
+ Console.WriteLine (" ");
+ Console.WriteLine (_("SparkleShare, a collaboration and sharing tool."));
+ Console.WriteLine (_("Copyright (C) 2010 Hylke Bons"));
+ Console.WriteLine (" ");
+ Console.WriteLine (_("This program comes with ABSOLUTELY NO WARRANTY."));
+ Console.WriteLine (" ");
+ Console.WriteLine (_("This is free software, and you are welcome to redistribute it "));
+ Console.WriteLine (_("under certain conditions. Please read the GNU GPLv3 for details."));
+ Console.WriteLine (" ");
+ Console.WriteLine (_("SparkleShare automatically syncs Git repositories in "));
+ Console.WriteLine (_("the ~/SparkleShare folder with their remote origins."));
+ Console.WriteLine (" ");
+ Console.WriteLine (_("Usage: sparkleshare [start|stop|restart] [OPTION]..."));
+ Console.WriteLine (_("Sync SparkleShare folder with remote repositories."));
+ Console.WriteLine (" ");
+ Console.WriteLine (_("Arguments:"));
+
+ option_set.WriteOptionDescriptions (Console.Out);
+ Environment.Exit (0);
+ }
+
+
+ // Prints the version information
+ public static void PrintVersion ()
+ {
+ Console.WriteLine (_("SparkleShare " + Defines.VERSION));
+ Environment.Exit (0);
+ }
+
+
+ // Strange magic needed by SetProcessName ()
+ [DllImport ("libc")]
+ private static extern int prctl (int option, byte [] arg2, IntPtr arg3, IntPtr arg4, IntPtr arg5);
+
+
+ // Sets the Unix process name to 'sparkleshare' instead of 'mono'
+ private static void SetProcessName (string name)
+ {
+ try {
+ if (prctl (15, Encoding.ASCII.GetBytes (name + "\0"), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero) != 0)
+ throw new ApplicationException ("Error setting process name: " +
+ Mono.Unix.Native.Stdlib.GetLastError ());
+
+ } catch (EntryPointNotFoundException) {
+ Console.WriteLine ("SetProcessName: Entry point not found");
+ }
+ }
+ }
+}
diff --git a/SparkleShare/SparkleSpinner.cs b/SparkleShare/SparkleSpinner.cs
new file mode 100644
index 0000000..ef4c334
--- /dev/null
+++ b/SparkleShare/SparkleSpinner.cs
@@ -0,0 +1,111 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System.Timers;
+using Gtk;
+
+namespace SparkleShare {
+
+ // This is a close implementation of GtkSpinner
+ public class SparkleSpinner : Image {
+
+ public bool Active;
+
+ private Gdk.Pixbuf [] Images;
+ private Timer Timer;
+ private int CycleDuration;
+ private int CurrentStep;
+ private int NumSteps;
+ private int Size;
+
+
+ public SparkleSpinner (int size) : base ()
+ {
+ Size = size;
+
+ CycleDuration = 600;
+ CurrentStep = 0;
+
+ Gdk.Pixbuf spinner_gallery = SparkleUIHelpers.GetIcon ("process-working", Size);
+
+ int frames_in_width = spinner_gallery.Width / Size;
+ int frames_in_height = spinner_gallery.Height / Size;
+
+ NumSteps = frames_in_width * frames_in_height;
+ Images = new Gdk.Pixbuf [NumSteps - 1];
+
+ int i = 0;
+
+ for (int y = 0; y < frames_in_height; y++) {
+ for (int x = 0; x < frames_in_width; x++) {
+ if (!(y == 0 && x == 0)) {
+ Images [i] = new Gdk.Pixbuf (spinner_gallery, x * Size, y * Size, Size, Size);
+ i++;
+ }
+ }
+ }
+
+ Timer = new Timer () {
+ Interval = CycleDuration / NumSteps
+ };
+
+ Timer.Elapsed += delegate {
+ NextImage ();
+ };
+
+ Start ();
+ }
+
+
+ private void NextImage ()
+ {
+ if (CurrentStep < NumSteps - 2)
+ CurrentStep++;
+ else
+ CurrentStep = 0;
+
+ Application.Invoke (delegate { SetImage (); });
+ }
+
+
+ private void SetImage ()
+ {
+ Pixbuf = Images [CurrentStep];
+ }
+
+
+ public bool IsActive ()
+ {
+ return Active;
+ }
+
+
+ public void Start ()
+ {
+ CurrentStep = 0;
+ Active = true;
+ Timer.Start ();
+ }
+
+
+ public void Stop ()
+ {
+ Active = false;
+ Timer.Stop ();
+ }
+ }
+}
diff --git a/SparkleShare/SparkleStatusIcon.cs b/SparkleShare/SparkleStatusIcon.cs
new file mode 100644
index 0000000..5707bb7
--- /dev/null
+++ b/SparkleShare/SparkleStatusIcon.cs
@@ -0,0 +1,339 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.IO;
+using System.Timers;
+
+using Gtk;
+using Mono.Unix;
+
+namespace SparkleShare {
+
+ // The statusicon that stays in the
+ // user's notification area
+ public class SparkleStatusIcon : StatusIcon {
+
+ private Timer Animation;
+ private Gdk.Pixbuf [] AnimationFrames;
+ private int FrameNumber;
+ private string StateText;
+ private Menu Menu;
+
+ // Short alias for the translations
+ public static string _ (string s)
+ {
+ return Catalog.GetString (s);
+ }
+
+
+ public SparkleStatusIcon () : base ()
+ {
+ AnimationFrames = CreateAnimationFrames ();
+ Animation = CreateAnimation ();
+
+ Activate += ShowMenu; // Primary mouse button click
+ PopupMenu += ShowMenu; // Secondary mouse button click
+
+ SetNormalState ();
+ CreateMenu ();
+
+ SparkleShare.Controller.FolderSizeChanged += delegate {
+ Application.Invoke (delegate {
+ if (!Animation.Enabled)
+ SetNormalState ();
+
+ UpdateMenu ();
+ });
+ };
+
+ SparkleShare.Controller.FolderListChanged += delegate {
+ Application.Invoke (delegate {
+ SetNormalState ();
+ CreateMenu ();
+ });
+ };
+
+ SparkleShare.Controller.OnIdle += delegate {
+ Application.Invoke (delegate {
+ SetNormalState ();
+ UpdateMenu ();
+ });
+ };
+
+ SparkleShare.Controller.OnSyncing += delegate {
+ Application.Invoke (delegate {
+ SetAnimationState ();
+ UpdateMenu ();
+ });
+ };
+
+ SparkleShare.Controller.OnError += delegate {
+ Application.Invoke (delegate {
+ SetNormalState (true);
+ UpdateMenu ();
+ });
+ };
+ }
+
+
+ // Slices up the graphic that contains the
+ // animation frames.
+ private Gdk.Pixbuf [] CreateAnimationFrames ()
+ {
+ Gdk.Pixbuf [] animation_frames = new Gdk.Pixbuf [5];
+ Gdk.Pixbuf frames_pixbuf = SparkleUIHelpers.GetIcon ("process-syncing-sparkleshare", 24);
+
+ for (int i = 0; i < animation_frames.Length; i++)
+ animation_frames [i] = new Gdk.Pixbuf (frames_pixbuf, (i * 24), 0, 24, 24);
+
+ return animation_frames;
+ }
+
+
+ // Creates the Animation that handles the syncing animation
+ private Timer CreateAnimation ()
+ {
+ FrameNumber = 0;
+
+ Timer Animation = new Timer () {
+ Interval = 35
+ };
+
+ Animation.Elapsed += delegate {
+ if (FrameNumber < AnimationFrames.Length - 1)
+ FrameNumber++;
+ else
+ FrameNumber = 0;
+
+ Application.Invoke (delegate {
+ Pixbuf = AnimationFrames [FrameNumber];
+ });
+ };
+
+ return Animation;
+ }
+
+
+ // Creates the menu that is popped up when the
+ // user clicks the status icon
+ public void CreateMenu ()
+ {
+ Menu = new Menu ();
+
+ // The menu item showing the status and size of the SparkleShare folder
+ MenuItem status_menu_item = new MenuItem (StateText) {
+ Sensitive = false
+ };
+
+ Menu.Add (status_menu_item);
+ Menu.Add (new SeparatorMenuItem ());
+
+ ImageMenuItem folder_item = new SparkleMenuItem ("SparkleShare"){
+ Image = new Image (SparkleUIHelpers.GetIcon ("folder-sparkleshare", 16))
+ };
+
+ folder_item.Activated += delegate {
+ SparkleShare.Controller.OpenSparkleShareFolder ();
+ };
+
+ Menu.Add (folder_item);
+
+ if (SparkleShare.Controller.Folders.Count > 0) {
+
+ // Creates a menu item for each repository with a link to their logs
+ foreach (string path in SparkleShare.Controller.Folders) {
+
+ Gdk.Pixbuf folder_icon = IconTheme.Default.LoadIcon ("folder", 16,
+ IconLookupFlags.GenericFallback);
+
+ ImageMenuItem subfolder_item = new SparkleMenuItem (Path.GetFileName (path)) {
+ Image = new Image (folder_icon)
+ };
+
+// if (repo.HasUnsyncedChanges)
+// folder_action.IconName = "dialog-error";
+
+ subfolder_item.Activated += OpenEventLogDelegate (path);
+
+ Menu.Add (subfolder_item);
+ }
+
+ } else {
+ MenuItem no_folders_item = new MenuItem (_("No Remote Folders Yet")) {
+ Sensitive = false
+ };
+
+ Menu.Add (no_folders_item);
+ }
+
+ // Opens the wizard to add a new remote folder
+ MenuItem sync_item = new MenuItem (_("Add Remote Folder…"));
+
+ if (SparkleShare.Controller.FirstRun)
+ sync_item.Sensitive = false;
+
+ sync_item.Activated += delegate {
+ Application.Invoke (delegate {
+
+ if (SparkleUI.Intro == null) {
+ SparkleUI.Intro = new SparkleIntro ();
+ SparkleUI.Intro.ShowServerForm (true);
+ }
+
+ if (!SparkleUI.Intro.Visible)
+ SparkleUI.Intro.ShowServerForm (true);
+
+ SparkleUI.Intro.ShowAll ();
+ SparkleUI.Intro.Present ();
+ });
+ };
+
+ Menu.Add (sync_item);
+ Menu.Add (new SeparatorMenuItem ());
+
+ MenuItem notify_item;
+
+ if (SparkleShare.Controller.NotificationsEnabled)
+ notify_item = new MenuItem (_("Turn Notifications Off"));
+ else
+ notify_item = new MenuItem (_("Turn Notifications On"));
+
+ notify_item.Activated += delegate {
+ SparkleShare.Controller.ToggleNotifications ();
+ CreateMenu ();
+ };
+
+ Menu.Add (notify_item);
+ Menu.Add (new SeparatorMenuItem ());
+
+ // A menu item that takes the user to http://www.sparkleshare.org/
+ MenuItem about_item = new MenuItem (_("About SparkleShare"));
+
+ about_item.Activated += delegate {
+ SparkleAbout about = new SparkleAbout ();
+ about.ShowAll ();
+ };
+
+ Menu.Add (about_item);
+ Menu.Add (new SeparatorMenuItem ());
+
+ // A menu item that quits the application
+ MenuItem quit_item = new MenuItem (_("Quit"));
+
+ quit_item.Activated += delegate {
+ SparkleShare.Controller.Quit ();
+ };
+
+ Menu.Add (quit_item);
+ Menu.ShowAll ();
+ }
+
+
+ // A method reference that makes sure that opening the
+ // event log for each repository works correctly
+ private EventHandler OpenEventLogDelegate (string path)
+ {
+ return delegate {
+ SparkleShare.UI.AddEventLog (path);
+ };
+ }
+
+
+ public void UpdateMenu ()
+ {
+ Menu.Remove (Menu.Children [0]);
+
+ MenuItem status_menu_item = new MenuItem (StateText) {
+ Sensitive = false
+ };
+
+ Menu.Add (status_menu_item);
+ Menu.ReorderChild (status_menu_item, 0);
+
+ Menu.ShowAll ();
+ }
+
+
+ // Makes the menu visible
+ private void ShowMenu (object o, EventArgs args)
+ {
+ Menu.Popup (null, null, SetPosition, 0, Global.CurrentEventTime);
+ }
+
+
+ // Makes sure the menu pops up in the right position
+ private void SetPosition (Menu menu, out int x, out int y, out bool push_in)
+ {
+ PositionMenu (menu, out x, out y, out push_in, Handle);
+ }
+
+
+ // The state when there's nothing going on
+ private void SetNormalState ()
+ {
+ SetNormalState (false);
+ }
+
+
+ // The state when there's nothing going on
+ private void SetNormalState (bool error)
+ {
+ Animation.Stop ();
+
+ if (SparkleShare.Controller.Folders.Count == 0) {
+ StateText = _("Welcome to SparkleShare!");
+
+ Application.Invoke (delegate {
+ Pixbuf = AnimationFrames [0];
+ });
+ } else {
+ if (error) {
+ StateText = _("Not everything is synced");
+
+ Application.Invoke (delegate {
+ Pixbuf = SparkleUIHelpers.GetIcon ("sparkleshare-syncing-error", 24);
+ });
+ } else {
+ StateText = _("Up to date") + " (" + SparkleShare.Controller.FolderSize + ")";
+ Application.Invoke (delegate {
+ Pixbuf = AnimationFrames [0];
+ });
+ }
+ }
+ }
+
+
+ // The state when animating
+ private void SetAnimationState ()
+ {
+ StateText = _("Syncing…");
+
+ if (!Animation.Enabled)
+ Animation.Start ();
+ }
+ }
+
+
+ public class SparkleMenuItem : ImageMenuItem {
+
+ public SparkleMenuItem (string text) : base (text)
+ {
+ SetProperty ("always-show-image", new GLib.Value (true));
+ }
+ }
+}
diff --git a/SparkleShare/SparkleUI.cs b/SparkleShare/SparkleUI.cs
new file mode 100644
index 0000000..abc506f
--- /dev/null
+++ b/SparkleShare/SparkleUI.cs
@@ -0,0 +1,153 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading;
+
+using Gtk;
+using Mono.Unix;
+using Mono.Unix.Native;
+using SparkleLib;
+
+namespace SparkleShare {
+
+ public class SparkleUI {
+
+ public static SparkleStatusIcon StatusIcon;
+ public static List <SparkleLog> OpenLogs;
+ public static SparkleIntro Intro;
+
+
+ // Short alias for the translations
+ public static string _(string s)
+ {
+ return Catalog.GetString (s);
+ }
+
+
+ public SparkleUI ()
+ {
+ // Initialize the application
+ Application.Init ();
+
+ // Create the statusicon
+ StatusIcon = new SparkleStatusIcon ();
+
+ // Keep track of which event logs are open
+ OpenLogs = new List <SparkleLog> ();
+
+ if (SparkleShare.Controller.FirstRun) {
+ Intro = new SparkleIntro ();
+ Intro.ShowAccountForm ();
+ }
+
+ SparkleShare.Controller.OnQuitWhileSyncing += delegate {
+ // TODO: Pop up a warning when quitting whilst syncing
+ };
+
+ SparkleShare.Controller.OnInvitation += delegate (string server, string folder, string token) {
+ Application.Invoke (delegate {
+ SparkleIntro intro = new SparkleIntro ();
+ intro.ShowInvitationPage (server, folder, token);
+ });
+ };
+
+ // Show a bubble when there are new changes
+ SparkleShare.Controller.NotificationRaised += delegate (string user_name, string user_email,
+ string message, string repository_path) {
+ Application.Invoke (delegate {
+ foreach (SparkleLog log in OpenLogs) {
+ if (log.LocalPath.Equals (repository_path))
+ log.UpdateEventLog ();
+ }
+
+ if (!SparkleShare.Controller.NotificationsEnabled)
+ return;
+
+ SparkleBubble bubble = new SparkleBubble (user_name, message);
+ string avatar_file_path = SparkleShare.Controller.GetAvatar (user_email, 32);
+
+ if (avatar_file_path != null)
+ bubble.Icon = new Gdk.Pixbuf (avatar_file_path);
+ else
+ bubble.Icon = SparkleUIHelpers.GetIcon ("avatar-default", 32);
+
+ bubble.AddAction ("", "Show Events", delegate {
+ AddEventLog (repository_path);
+ });
+
+ bubble.Show ();
+ });
+ };
+
+ // Show a bubble when there was a conflict
+ SparkleShare.Controller.ConflictNotificationRaised += delegate {
+ Application.Invoke (delegate {
+ string title = _("Ouch! Mid-air collision!");
+ string subtext = _("Don't worry, SparkleShare made a copy of each conflicting file.");
+
+ new SparkleBubble (title, subtext).Show ();
+ });
+ };
+
+ SparkleShare.Controller.AvatarFetched += delegate {
+ Application.Invoke (delegate {
+ foreach (SparkleLog log in OpenLogs)
+ log.UpdateEventLog ();
+ });
+ };
+
+ SparkleShare.Controller.OnIdle += delegate {
+ Application.Invoke (delegate {
+ foreach (SparkleLog log in OpenLogs)
+ log.UpdateEventLog ();
+ });
+ };
+ }
+
+
+ public void AddEventLog (string path)
+ {
+ SparkleLog log = SparkleUI.OpenLogs.Find (delegate (SparkleLog l) {
+ return l.LocalPath.Equals (path);
+ });
+
+ // Check whether the log is already open, create a new one if
+ // that's not the case or present it to the user if it is
+ if (log == null) {
+ OpenLogs.Add (new SparkleLog (path));
+ OpenLogs [OpenLogs.Count - 1].ShowAll ();
+ OpenLogs [OpenLogs.Count - 1].Present ();
+ } else {
+ log.ShowAll ();
+ log.Present ();
+ }
+ }
+
+
+ // Runs the application
+ public void Run ()
+ {
+ Application.Run ();
+ }
+ }
+}
diff --git a/SparkleShare/SparkleUIHelpers.cs b/SparkleShare/SparkleUIHelpers.cs
new file mode 100644
index 0000000..4786be0
--- /dev/null
+++ b/SparkleShare/SparkleUIHelpers.cs
@@ -0,0 +1,68 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+using Gtk;
+using SparkleLib;
+using System;
+using System.IO;
+using System.Net;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace SparkleShare {
+
+ public static class SparkleUIHelpers {
+
+ // Creates an MD5 hash of input
+ public static string GetMD5 (string s)
+ {
+ MD5 md5 = new MD5CryptoServiceProvider ();
+ Byte[] bytes = ASCIIEncoding.Default.GetBytes (s);
+ Byte[] encodedBytes = md5.ComputeHash (bytes);
+ return BitConverter.ToString (encodedBytes).ToLower ().Replace ("-", "");
+ }
+
+
+ // Looks up an icon from the system's theme
+ public static Gdk.Pixbuf GetIcon (string name, int size)
+ {
+ IconTheme icon_theme = new IconTheme ();
+ icon_theme.AppendSearchPath (SparklePaths.SparkleIconPath);
+ icon_theme.AppendSearchPath (SparklePaths.SparkleLocalIconPath);
+
+ try {
+ return icon_theme.LoadIcon (name, size, IconLookupFlags.GenericFallback);
+ } catch {
+ try {
+ return icon_theme.LoadIcon ("gtk-missing-image", size, IconLookupFlags.GenericFallback);
+ } catch {
+ return null;
+ }
+ }
+ }
+
+
+ // Converts a Gdk RGB color to a hex value.
+ // Example: from "rgb:0,0,0" to "#000000"
+ public static string GdkColorToHex (Gdk.Color color)
+ {
+ return String.Format ("#{0:X2}{1:X2}{2:X2}",
+ (int) Math.Truncate (color.Red / 256.00),
+ (int) Math.Truncate (color.Green / 256.00),
+ (int) Math.Truncate (color.Blue / 256.00));
+ }
+ }
+}
diff --git a/SparkleShare/SparkleWindow.cs b/SparkleShare/SparkleWindow.cs
new file mode 100644
index 0000000..9f510a2
--- /dev/null
+++ b/SparkleShare/SparkleWindow.cs
@@ -0,0 +1,134 @@
+// SparkleShare, a collaboration and sharing tool.
+// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Timers;
+
+using Gtk;
+using Mono.Unix;
+using SparkleLib;
+
+namespace SparkleShare {
+
+ public class SparkleWindow : Window {
+
+ private HBox HBox;
+ private VBox VBox;
+ private VBox Wrapper;
+ private HButtonBox Buttons;
+
+
+ public SparkleWindow () : base ("")
+ {
+ Title = Catalog.GetString ("SparkleShare Setup");
+ BorderWidth = 0;
+ IconName = "folder-sparkleshare";
+ Resizable = false;
+ WindowPosition = WindowPosition.Center;
+
+ SetSizeRequest (680, 440);
+
+ DeleteEvent += delegate (object o, DeleteEventArgs args) {
+ args.RetVal = true;
+ Close ();
+ };
+
+ HBox = new HBox (false, 6);
+
+ VBox = new VBox (false, 0);
+
+ Wrapper = new VBox (false, 0) {
+ BorderWidth = 30
+ };
+
+ Buttons = CreateButtonBox ();
+
+ VBox.PackStart (Wrapper, true, true, 0);
+ VBox.PackStart (Buttons, false, false, 0);
+
+ EventBox box = new EventBox ();
+ Gdk.Color bg_color = new Gdk.Color ();
+ Gdk.Color.Parse ("#2e3336", ref bg_color);
+ box.ModifyBg (StateType.Normal, bg_color);
+
+ string image_path = SparkleHelpers.CombineMore (Defines.DATAROOTDIR, "sparkleshare",
+ "pixmaps", "side-splash.png");
+
+ Image side_splash = new Image (image_path) {
+ Yalign = 1
+ };
+
+ box.Add (side_splash);
+
+ HBox.PackStart (box, false, false, 0);
+ HBox.PackStart (VBox, true, true, 0);
+
+ base.Add (HBox);
+ }
+
+
+ private HButtonBox CreateButtonBox ()
+ {
+ return new HButtonBox () {
+ BorderWidth = 12,
+ Layout = ButtonBoxStyle.End,
+ Spacing = 6
+ };
+ }
+
+
+ public void AddButton (Button button)
+ {
+ Buttons.Add (button);
+ ShowAll ();
+ }
+
+
+ new public void Add (Widget widget)
+ {
+ Wrapper.PackStart (widget, true, true, 0);
+ ShowAll ();
+ }
+
+
+ public void Reset ()
+ {
+ if (Wrapper.Children.Length > 0)
+ Wrapper.Remove (Wrapper.Children [0]);
+
+ foreach (Button button in Buttons)
+ Buttons.Remove (button);
+
+ ShowAll ();
+ }
+
+ new public void ShowAll ()
+ {
+ Present ();
+ base.ShowAll ();
+ }
+
+ public void Close ()
+ {
+ HideAll ();
+ }
+ }
+}
diff --git a/SparkleShare/sparkleshare.desktop b/SparkleShare/sparkleshare.desktop
new file mode 100644
index 0000000..a83f45d
--- /dev/null
+++ b/SparkleShare/sparkleshare.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Name=SparkleShare
+Exec=sparkleshare start
+Icon=folder-sparkleshare
+Terminal=false
+X-GNOME-Autostart-enabled=true
+Categories=Network;
diff --git a/SparkleShare/sparkleshare.in b/SparkleShare/sparkleshare.in
new file mode 100644
index 0000000..6352c66
--- /dev/null
+++ b/SparkleShare/sparkleshare.in
@@ -0,0 +1,68 @@
+#!/bin/bash
+
+if [ "$XDG_RUNTIME_DIR" ]; then
+ pidfile=${XDG_RUNTIME_DIR}/sparkleshare.pid
+else
+ pidfile=/tmp/sparkleshare-${USER}.pid
+fi
+
+start() {
+ if [ -e "${pidfile}" ]; then
+ sparklepid=`cat ${pidfile}`
+ if [ -n "`ps -p ${sparklepid} | grep ${sparklepid}`" ]; then
+ echo "SparkleShare is already running."
+ exit 0
+ else
+ echo "SparkleShare stale pid file found, starting a new instance."
+ rm -f $pidfile
+ fi
+ fi
+
+ echo -n "Starting SparkleShare... "
+ ssh-agent mono "@expanded_libdir@/@PACKAGE@/SparkleShare.exe" $2 &
+ ( umask 066; echo $! > ${pidfile} )
+ echo "Done."
+}
+
+stop() {
+ if [ -e "${pidfile}" ]; then
+ sparklepid=`cat ${pidfile}`
+ if [ -n "`ps -p ${sparklepid} | grep ${sparklepid}`" ]; then
+ echo -n "Stopping SparkleShare... "
+ kill ${sparklepid}
+ rm -f ${pidfile}
+ echo "Done."
+ else
+ echo "SparkleShare is not running, removing stale pid file."
+ rm -f ${pidfile}
+ fi
+ else
+ echo "SparkleShare is not running."
+ fi
+}
+
+case $1 in
+ start|--start)
+ start
+ ;;
+ stop|--stop)
+ stop
+ ;;
+ restart|--restart)
+ stop
+ start
+ ;;
+ help|--help|-h)
+ mono "@expanded_libdir@/@PACKAGE@/SparkleShare.exe" --help
+ ;;
+ -d|--disable-gui)
+ mono "@expanded_libdir@/@PACKAGE@/SparkleShare.exe" --disable-gui
+ ;;
+ -v|--version)
+ mono "@expanded_libdir@/@PACKAGE@/SparkleShare.exe" --version
+ ;;
+ *)
+ echo "Usage: sparkleshare {start|stop|restart|help}"
+ ;;
+esac
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..c6a436f
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1404 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.66],,
+[m4_warning([this file was generated for autoconf 2.66.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+
+dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml])
+# serial 40 IT_PROG_INTLTOOL
+AC_DEFUN([IT_PROG_INTLTOOL], [
+AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_NLS])dnl
+
+case "$am__api_version" in
+ 1.[01234])
+ AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool])
+ ;;
+ *)
+ ;;
+esac
+
+if test -n "$1"; then
+ AC_MSG_CHECKING([for intltool >= $1])
+
+ INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+ INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+ [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+ ]
+ AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found])
+ test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+ AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.])
+fi
+
+AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update])
+AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge])
+AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract])
+if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
+ AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.])
+fi
+
+ INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@'
+ INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@'
+ INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+
+_IT_SUBST(INTLTOOL_DESKTOP_RULE)
+_IT_SUBST(INTLTOOL_DIRECTORY_RULE)
+_IT_SUBST(INTLTOOL_KEYS_RULE)
+_IT_SUBST(INTLTOOL_PROP_RULE)
+_IT_SUBST(INTLTOOL_OAF_RULE)
+_IT_SUBST(INTLTOOL_PONG_RULE)
+_IT_SUBST(INTLTOOL_SERVER_RULE)
+_IT_SUBST(INTLTOOL_SHEET_RULE)
+_IT_SUBST(INTLTOOL_SOUNDLIST_RULE)
+_IT_SUBST(INTLTOOL_UI_RULE)
+_IT_SUBST(INTLTOOL_XAM_RULE)
+_IT_SUBST(INTLTOOL_KBD_RULE)
+_IT_SUBST(INTLTOOL_XML_RULE)
+_IT_SUBST(INTLTOOL_XML_NOMERGE_RULE)
+_IT_SUBST(INTLTOOL_CAVES_RULE)
+_IT_SUBST(INTLTOOL_SCHEMAS_RULE)
+_IT_SUBST(INTLTOOL_THEME_RULE)
+_IT_SUBST(INTLTOOL_SERVICE_RULE)
+_IT_SUBST(INTLTOOL_POLICY_RULE)
+
+# Check the gettext tools to make sure they are GNU
+AC_PATH_PROG(XGETTEXT, xgettext)
+AC_PATH_PROG(MSGMERGE, msgmerge)
+AC_PATH_PROG(MSGFMT, msgfmt)
+AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
+ AC_MSG_ERROR([GNU gettext tools not found; required for intltool])
+fi
+xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
+mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
+mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
+if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
+ AC_MSG_ERROR([GNU gettext tools not found; required for intltool])
+fi
+
+AC_PATH_PROG(INTLTOOL_PERL, perl)
+if test -z "$INTLTOOL_PERL"; then
+ AC_MSG_ERROR([perl not found])
+fi
+AC_MSG_CHECKING([for perl >= 5.8.1])
+$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
+if test $? -ne 0; then
+ AC_MSG_ERROR([perl 5.8.1 is required for intltool])
+else
+ IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`"
+ AC_MSG_RESULT([$IT_PERL_VERSION])
+fi
+if test "x$2" != "xno-xml"; then
+ AC_MSG_CHECKING([for XML::Parser])
+ if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+ AC_MSG_RESULT([ok])
+ else
+ AC_MSG_ERROR([XML::Parser perl module is required for intltool])
+ fi
+fi
+
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+AC_SUBST(ALL_LINGUAS)
+
+# Set DATADIRNAME correctly if it is not set yet
+# (copied from glib-gettext.m4)
+if test -z "$DATADIRNAME"; then
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[]],
+ [[extern int _nl_msg_cat_cntr;
+ return _nl_msg_cat_cntr]])],
+ [DATADIRNAME=share],
+ [case $host in
+ *-*-solaris*)
+ dnl On Solaris, if bind_textdomain_codeset is in libc,
+ dnl GNU format message catalog is always supported,
+ dnl since both are added to the libc all together.
+ dnl Hence, we'd like to go with DATADIRNAME=share
+ dnl in this case.
+ AC_CHECK_FUNC(bind_textdomain_codeset,
+ [DATADIRNAME=share], [DATADIRNAME=lib])
+ ;;
+ *)
+ [DATADIRNAME=lib]
+ ;;
+ esac])
+fi
+AC_SUBST(DATADIRNAME)
+
+IT_PO_SUBDIR([po])
+
+])
+
+
+# IT_PO_SUBDIR(DIRNAME)
+# ---------------------
+# All po subdirs have to be declared with this macro; the subdir "po" is
+# declared by IT_PROG_INTLTOOL.
+#
+AC_DEFUN([IT_PO_SUBDIR],
+[AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS.
+dnl
+dnl The following CONFIG_COMMANDS should be executed at the very end
+dnl of config.status.
+AC_CONFIG_COMMANDS_PRE([
+ AC_CONFIG_COMMANDS([$1/stamp-it], [
+ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then
+ AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.])
+ fi
+ rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp"
+ >"$1/stamp-it.tmp"
+ [sed '/^#/d
+ s/^[[].*] *//
+ /^[ ]*$/d
+ '"s|^| $ac_top_srcdir/|" \
+ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES"
+ ]
+ [sed '/^POTFILES =/,/[^\\]$/ {
+ /^POTFILES =/!d
+ r $1/POTFILES
+ }
+ ' "$1/Makefile.in" >"$1/Makefile"]
+ rm -f "$1/Makefile.tmp"
+ mv "$1/stamp-it.tmp" "$1/stamp-it"
+ ])
+])dnl
+])
+
+# _IT_SUBST(VARIABLE)
+# -------------------
+# Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST
+#
+AC_DEFUN([_IT_SUBST],
+[
+AC_SUBST([$1])
+m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])])
+]
+)
+
+# deprecated macros
+AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL])
+# A hint is needed for aclocal from Automake <= 1.9.4:
+# AC_DEFUN([AC_PROG_INTLTOOL], ...)
+
+
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([build/m4/gnome-doc-utils.m4])
+m4_include([build/m4/shave/shave.m4])
+m4_include([build/m4/shamrock/expansions.m4])
+m4_include([build/m4/shamrock/gnome-doc.m4])
+m4_include([build/m4/shamrock/mono.m4])
+m4_include([build/m4/shamrock/nunit.m4])
+m4_include([build/m4/shamrock/programs.m4])
+m4_include([build/m4/sparkleshare/gtk-sharp.m4])
+m4_include([build/m4/sparkleshare/nautilus-python.m4])
+m4_include([build/m4/sparkleshare/notify-sharp.m4])
+m4_include([build/m4/sparkleshare/smartirc4net.m4])
diff --git a/build/Makefile.am b/build/Makefile.am
new file mode 100644
index 0000000..6f9c81d
--- /dev/null
+++ b/build/Makefile.am
@@ -0,0 +1,6 @@
+SUBDIRS = m4
+
+EXTRA_DIST = \
+ icon-theme-installer
+
+MAINTAINERCLEANFILES = Makefile.in
diff --git a/build/Makefile.in b/build/Makefile.in
new file mode 100644
index 0000000..d6e9e26
--- /dev/null
+++ b/build/Makefile.in
@@ -0,0 +1,594 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = build
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = m4
+EXTRA_DIST = \
+ icon-theme-installer
+
+MAINTAINERCLEANFILES = Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign build/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign build/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/build/build.environment.mk b/build/build.environment.mk
new file mode 100644
index 0000000..277a5c5
--- /dev/null
+++ b/build/build.environment.mk
@@ -0,0 +1,43 @@
+# Initializers
+MONO_BASE_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_MONO_POSIX = -r:Mono.Posix
+
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_SMARTIRC4NET = -r:$(top_builddir)/$(SMARTIRC4NET_ASSEMBLY)
+
+REF_NOTIFY_SHARP = $(LINK_SYSTEM) $(LINK_DBUS) $(GTKSHARP_LIBS) $(GLIBSHARP_LIBS)
+LINK_NOTIFY_SHARP = -r:$(DIR_BIN)/NotifySharp.dll
+LINK_NOTIFY_SHARP_DEPS = $(REF_NOTIFY_SHARP) $(LINK_NOTIFY_SHARP)
+
+REF_FRIENDFACE = $(LINK_SYSTEM) $(LINK_GTK) $(LINK_MONO_POSIX)
+LINK_FRIENDFACE = -r:$(DIR_BIN)/FriendFace.dll
+LINK_FRIENDFACE_DEPS = $(REF_FRIENDFACE) $(LINK_FRIENDFACE)
+
+REF_SPARKLELIB = $(LINK_SYSTEM) $(LINK_MONO_POSIX) $(LINK_SMARTIRC4NET)
+LINK_SPARKLELIB = -r:$(DIR_BIN)/SparkleLib.dll
+LINK_SPARKLELIB_DEPS = $(REF_SPARKLELIB) $(LINK_SPARKLELIB)
+
+REF_SPARKLESHARE = $(LINK_DBUS) $(LINK_GTK) $(LINK_SPARKLELIB_DEPS)
+
+REF_SPARKLEDIFF = $(LINK_FRIENDFACE_DEPS) $(LINK_GTK) $(LINK_SPARKLELIB_DEPS)
+
+# Cute hack to replace a space with something
+colon:= :
+empty:=
+space:= $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+
diff --git a/build/build.mk b/build/build.mk
new file mode 100644
index 0000000..78e0760
--- /dev/null
+++ b/build/build.mk
@@ -0,0 +1,3 @@
+include $(top_srcdir)/build/build.environment.mk
+include $(top_srcdir)/build/build.rules.mk
+
diff --git a/build/build.rules.mk b/build/build.rules.mk
new file mode 100644
index 0000000..a84f08a
--- /dev/null
+++ b/build/build.rules.mk
@@ -0,0 +1,89 @@
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/SparkleLib/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES))
+SOURCES_BUILD += $(ASSEMBLY_INFO_SOURCE_REAL)
+
+
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+
+if ENABLE_TESTS
+ LINK += " $(NUNIT_LIBS)"
+ ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+endif
+
+if ENABLE_ATK
+ ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+endif
+
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+
+all: $(ASSEMBLY_FILE)
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -codepage:utf8 \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED)
+
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+
diff --git a/build/icon-theme-installer b/build/icon-theme-installer
new file mode 100755
index 0000000..0260788
--- /dev/null
+++ b/build/icon-theme-installer
@@ -0,0 +1,177 @@
+#!/usr/bin/env bash
+
+# icon-theme-installer
+# Copyright (C) 2006 Novell, Inc.
+# Written by Aaron Bockover <abock@gnome.org>
+# Licensed under the MIT/X11 license
+#
+# This script is meant to be invoked from within a Makefile/Makefile.am
+# in the install-data-local and uninstall-data sections. It handles the
+# task of properly installing icons into the icon theme. It requires a
+# few arguments to set up its environment, and a list of files to be
+# installed. The format of the file list is critical:
+#
+# <category>,<local-src-file-name>
+#
+# apps,music-player-banshee.svg
+# apps,music-player-banshee-16.png
+# apps,music-player-banshee-22.png
+#
+# <category> is the icon theme category, for instance, apps, devices,
+# actions, emblems...
+#
+# <local-src-file-name> must have a basename in the form of:
+#
+# proper-theme-name[-<SIZE>].<EXTENSION>
+#
+# Where <SIZE> should be either nothing, which will default to scalable
+# or \-[0-9]{2}, which will expand to <SIZE>x<SIZE>. For example:
+#
+# music-player-banshee-16.png
+#
+# The <SIZE> here is -16 and will expand to 16x16 per the icon theme spec
+#
+# What follows is an example Makefile.am for icon theme installation:
+#
+# ---------------
+# theme=hicolor
+# themedir=$(datadir)/icons/$(theme)
+# theme_icons = \
+# apps,music-player-banshee.svg \
+# apps,music-player-banshee-16.png \
+# apps,music-player-banshee-22.png \
+# apps,music-player-banshee-24.png \
+# apps,music-player-banshee-32.png
+#
+# install_icon_exec = $(top_srcdir)/build/icon-theme-installer -t $(theme) -s $(srcdir) -d "x$(DESTDIR)" -b $(themedir) -m "$(mkinstalldirs)" -x "$(INSTALL_DATA)"
+# install-data-local:
+# $(install_icon_exec) -i $(theme_icons)
+#
+# uninstall-hook:
+# $(install_icon_exec) -u $(theme_icons)
+#
+# MAINTAINERCLEANFILES = Makefile.in
+# EXTRA_DIST = $(wildcard *.svg *.png)
+# ---------------
+#
+# Arguments to this program:
+#
+# -i : Install
+# -u : Uninstall
+# -t <theme> : Theme name (hicolor)
+# -d <dir> : Theme installation dest directory [x$(DESTDIR)] - Always prefix
+# this argument with x; it will be stripped but will act as a
+# placeholder for zero $DESTDIRs (only set by packagers)
+# -b <dir> : Theme installation directory [$(hicolordir)]
+# -s <dir> : Source directory [$(srcdir)]
+# -m <exec> : Command to exec for directory creation [$(mkinstalldirs)]
+# -x <exec> : Command to exec for single file installation [$(INSTALL_DATA)]
+# <remainging> : All remainging should be category,filename pairs
+
+while getopts "iut:b:d:s:m:x:" flag; do
+ case "$flag" in
+ i) INSTALL=yes ;;
+ u) UNINSTALL=yes ;;
+ t) THEME_NAME=$OPTARG ;;
+ d) INSTALL_DEST_DIR=${OPTARG##x} ;;
+ b) INSTALL_BASE_DIR=$OPTARG ;;
+ s) SRC_DIR=$OPTARG ;;
+ m) MKINSTALLDIRS_EXEC=$OPTARG ;;
+ x) INSTALL_DATA_EXEC=$OPTARG ;;
+ esac
+done
+
+shift $(($OPTIND - 1))
+
+if test "x$INSTALL" = "xyes" -a "x$UNINSTALL" = "xyes"; then
+ echo "Cannot pass both -i and -u"
+ exit 1
+elif test "x$INSTALL" = "x" -a "x$UNINSTALL" = "x"; then
+ echo "Must path either -i or -u"
+ exit 1
+fi
+
+if test -z "$THEME_NAME"; then
+ echo "Theme name required (-t hicolor)"
+ exit 1
+fi
+
+if test -z "$INSTALL_BASE_DIR"; then
+ echo "Base theme directory required [-b \$(hicolordir)]"
+ exit 1
+fi
+
+if test ! -x $(echo "$MKINSTALLDIRS_EXEC" | cut -f1 -d' '); then
+ echo "Cannot find '$MKINSTALLDIRS_EXEC'; You probably want to pass -m \$(mkinstalldirs)"
+ exit 1
+fi
+
+if test ! -x $(echo "$INSTALL_DATA_EXEC" | cut -f1 -d' '); then
+ echo "Cannot find '$INSTALL_DATA_EXEC'; You probably want to pass -x \$(INSTALL_DATA)"
+ exit 1
+fi
+
+if test -z "$SRC_DIR"; then
+ SRC_DIR=.
+fi
+
+for icon in $@; do
+ size=$(echo $icon | sed s/[^0-9]*//g)
+ category=$(echo $icon | cut -d, -f1)
+ build_name=$(echo $icon | cut -d, -f2)
+ install_name=$(echo $build_name | sed "s/[0-9]//g; s/-\././")
+ install_name=$(basename $install_name)
+
+ if test -z $size; then
+ size=scalable;
+ else
+ size=${size}x${size};
+ fi
+
+ install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$size/$category
+ install_path=$install_dir/$install_name
+
+ if test "x$INSTALL" = "xyes"; then
+ echo "Installing $size $install_name into $THEME_NAME icon theme"
+
+ $($MKINSTALLDIRS_EXEC $install_dir) || {
+ echo "Failed to create directory $install_dir"
+ exit 1
+ }
+
+ $($INSTALL_DATA_EXEC $SRC_DIR/$build_name $install_path) || {
+ echo "Failed to install $SRC_DIR/$build_name into $install_path"
+ exit 1
+ }
+
+ if test ! -e $install_path; then
+ echo "Failed to install $SRC_DIR/$build_name into $install_path"
+ exit 1
+ fi
+ else
+ if test -e $install_path; then
+ echo "Removing $size $install_name from $THEME_NAME icon theme"
+
+ rm $install_path || {
+ echo "Failed to remove $install_path"
+ exit 1
+ }
+ fi
+ fi
+done
+
+gtk_update_icon_cache_bin="$((which gtk-update-icon-cache || echo /opt/gnome/bin/gtk-update-icon-cache)2>/dev/null)"
+gtk_update_icon_cache="$gtk_update_icon_cache_bin -f -t $INSTALL_BASE_DIR"
+
+if test -z "$INSTALL_DEST_DIR"; then
+ if test -x $gtk_update_icon_cache_bin; then
+ echo "Updating GTK icon cache"
+ $gtk_update_icon_cache
+ else
+ echo "*** Icon cache not updated. Could not execute $gtk_update_icon_cache_bin"
+ fi
+else
+ echo "*** Icon cache not updated. After (un)install, run this:"
+ echo "*** $gtk_update_icon_cache"
+fi
+
diff --git a/build/m4/Makefile.am b/build/m4/Makefile.am
new file mode 100644
index 0000000..2492a2c
--- /dev/null
+++ b/build/m4/Makefile.am
@@ -0,0 +1,7 @@
+EXTRA_DIST = \
+ $(srcdir)/sparkleshare/*.m4 \
+ $(srcdir)/shamrock/*.m4 \
+ $(srcdir)/shave/*.m4
+
+MAINTAINERCLEANFILES = Makefile.in
+
diff --git a/build/m4/Makefile.in b/build/m4/Makefile.in
new file mode 100644
index 0000000..f459cbb
--- /dev/null
+++ b/build/m4/Makefile.in
@@ -0,0 +1,393 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = build/m4
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+ $(srcdir)/sparkleshare/*.m4 \
+ $(srcdir)/shamrock/*.m4 \
+ $(srcdir)/shave/*.m4
+
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign build/m4/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign build/m4/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/build/m4/gnome-doc-utils.m4 b/build/m4/gnome-doc-utils.m4
new file mode 100644
index 0000000..3fc25ec
--- /dev/null
+++ b/build/m4/gnome-doc-utils.m4
@@ -0,0 +1 @@
+AC_DEFUN([GNOME_DOC_INIT], [AC_MSG_NOTICE([])])
diff --git a/build/m4/shamrock/expansions.m4 b/build/m4/shamrock/expansions.m4
new file mode 100644
index 0000000..ba62356
--- /dev/null
+++ b/build/m4/shamrock/expansions.m4
@@ -0,0 +1,50 @@
+AC_DEFUN([SHAMROCK_EXPAND_LIBDIR],
+[
+ expanded_libdir=`(
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+ eval echo $libdir
+ )`
+ AC_SUBST(expanded_libdir)
+])
+
+AC_DEFUN([SHAMROCK_EXPAND_BINDIR],
+[
+ expanded_bindir=`(
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+ eval echo $bindir
+ )`
+ AC_SUBST(expanded_bindir)
+])
+
+AC_DEFUN([SHAMROCK_EXPAND_DATADIR],
+[
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+
+ expanded_datadir=`(eval echo $datadir)`
+ expanded_datadir=`(eval echo $expanded_datadir)`
+
+ AC_SUBST(expanded_datadir)
+])
+
diff --git a/build/m4/shamrock/gnome-doc.m4 b/build/m4/shamrock/gnome-doc.m4
new file mode 100644
index 0000000..a349a23
--- /dev/null
+++ b/build/m4/shamrock/gnome-doc.m4
@@ -0,0 +1,23 @@
+AC_DEFUN([SHAMROCK_CHECK_GNOME_DOC_UTILS],
+[
+ AC_ARG_ENABLE([user-help],
+ AC_HELP_STRING([--enable-user-help], [Enable building the user-help [[default=auto]]]),,
+ enable_user_help=auto)
+
+ if test "x$enable_user_help" = "xauto"; then
+ PKG_CHECK_MODULES(GNOME_DOC_UTILS,
+ gnome-doc-utils,
+ enable_user_help=yes, enable_user_help=no)
+ elif test "x$enable_user_help" = "xyes"; then
+ PKG_CHECK_MODULES(GNOME_DOC_UTILS, gnome-doc-utils)
+ fi
+
+ # GNOME_DOC_INIT sets ENABLE_SK, but if we have disabled
+ # user docs, then this needs to be defined manually.
+ AM_CONDITIONAL(ENABLE_SK, false)
+ if test "x$enable_user_help" = "xyes"; then
+ GNOME_DOC_INIT([$1], enable_user_help=yes, enable_user_help=no)
+ fi
+
+ AM_CONDITIONAL(HAVE_GNOME_DOC_UTILS, test "x$enable_user_help" = "xyes")
+])
diff --git a/build/m4/shamrock/i18n.m4 b/build/m4/shamrock/i18n.m4
new file mode 100644
index 0000000..e632647
--- /dev/null
+++ b/build/m4/shamrock/i18n.m4
@@ -0,0 +1,10 @@
+AC_DEFUN([SHAMROCK_CONFIGURE_I18N],
+[
+ ALL_LINGUAS=`grep -v '^#' $srcdir/po/LINGUAS | $SED ':a;N;$!ba;s/\n/ /g; s/[ ]+/ /g' | xargs`
+ GETTEXT_PACKAGE=$1
+ AC_SUBST(GETTEXT_PACKAGE)
+ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext Package])
+ AM_GLIB_GNU_GETTEXT
+ AC_SUBST([CONFIG_STATUS_DEPENDENCIES],['$(top_srcdir)/po/LINGUAS'])
+])
+
diff --git a/build/m4/shamrock/mono.m4 b/build/m4/shamrock/mono.m4
new file mode 100644
index 0000000..c40ecbf
--- /dev/null
+++ b/build/m4/shamrock/mono.m4
@@ -0,0 +1,94 @@
+AC_DEFUN([SHAMROCK_FIND_MONO_1_0_COMPILER],
+[
+ SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, mcs)
+])
+
+AC_DEFUN([SHAMROCK_FIND_MONO_2_0_COMPILER],
+[
+ SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, gmcs)
+])
+
+AC_DEFUN([SHAMROCK_FIND_MONO_4_0_COMPILER],
+[
+ SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, dmcs)
+])
+
+AC_DEFUN([SHAMROCK_FIND_MONO_RUNTIME],
+[
+ SHAMROCK_FIND_PROGRAM_OR_BAIL(MONO, mono)
+])
+
+AC_DEFUN([_SHAMROCK_CHECK_MONO_MODULE],
+[
+ PKG_CHECK_MODULES(MONO_MODULE, $1 >= $2)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_MODULE],
+[
+ _SHAMROCK_CHECK_MONO_MODULE(mono, $1)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO2_MODULE],
+[
+ _SHAMROCK_CHECK_MONO_MODULE(mono-2, $1)
+])
+
+AC_DEFUN([_SHAMROCK_CHECK_MONO_MODULE_NOBAIL],
+[
+ PKG_CHECK_MODULES(MONO_MODULE, $2 >= $1,
+ HAVE_MONO_MODULE=yes, HAVE_MONO_MODULE=no)
+ AC_SUBST(HAVE_MONO_MODULE)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_MODULE_NOBAIL],
+[
+ _SHAMROCK_CHECK_MONO_MODULE_NOBAIL(mono, $1)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO2_MODULE_NOBAIL],
+[
+ _SHAMROCK_CHECK_MONO_MODULE_NOBAIL(mono-2, $1)
+])
+
+AC_DEFUN([_SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES],
+[
+ for asm in $(echo "$*" | cut -d, -f3- | sed 's/\,/ /g')
+ do
+ AC_MSG_CHECKING([for Mono $2 GAC for $asm.dll])
+ if test \
+ -e "$($PKG_CONFIG --variable=libdir $1)/mono/$2/$asm.dll" -o \
+ -e "$($PKG_CONFIG --variable=prefix $1)/lib/mono/$2/$asm.dll"; \
+ then \
+ AC_MSG_RESULT([found])
+ else
+ AC_MSG_RESULT([not found])
+ AC_MSG_ERROR([missing required Mono $2 assembly: $asm.dll])
+ fi
+ done
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_1_0_GAC_ASSEMBLIES],
+[
+ _SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES(mono, 1.0, $*)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_2_0_GAC_ASSEMBLIES],
+[
+ _SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES(mono, 2.0, $*)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO2_2_0_GAC_ASSEMBLIES],
+[
+ _SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES(mono-2, 2.0, $*)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO_4_0_GAC_ASSEMBLIES],
+[
+ _SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES(mono, 4.0, $*)
+])
+
+AC_DEFUN([SHAMROCK_CHECK_MONO2_4_0_GAC_ASSEMBLIES],
+[
+ _SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES(mono-2, 4.0, $*)
+])
+
diff --git a/build/m4/shamrock/monodoc.m4 b/build/m4/shamrock/monodoc.m4
new file mode 100644
index 0000000..891ac74
--- /dev/null
+++ b/build/m4/shamrock/monodoc.m4
@@ -0,0 +1,25 @@
+AC_DEFUN([SHAMROCK_CHECK_MONODOC],
+[
+ AC_ARG_ENABLE(docs, AC_HELP_STRING([--disable-docs],
+ [Do not build documentation]), , enable_docs=yes)
+
+ if test "x$enable_docs" = "xyes"; then
+ AC_PATH_PROG(MONODOCER, monodocer, no)
+ if test "x$MONODOCER" = "xno"; then
+ AC_MSG_ERROR([You need to install monodoc, or pass --disable-docs to configure to skip documentation installation])
+ fi
+
+ AC_PATH_PROG(MDASSEMBLER, mdassembler, no)
+ if test "x$MDASSEMBLER" = "xno"; then
+ AC_MSG_ERROR([You need to install mdassembler, or pass --disable-docs to configure to skip documentation installation])
+ fi
+
+ DOCDIR=`$PKG_CONFIG monodoc --variable=sourcesdir`
+ AC_SUBST(DOCDIR)
+ AM_CONDITIONAL(BUILD_DOCS, true)
+ else
+ AC_MSG_NOTICE([not building ${PACKAGE} API documentation])
+ AM_CONDITIONAL(BUILD_DOCS, false)
+ fi
+])
+
diff --git a/build/m4/shamrock/nunit.m4 b/build/m4/shamrock/nunit.m4
new file mode 100644
index 0000000..4d57d00
--- /dev/null
+++ b/build/m4/shamrock/nunit.m4
@@ -0,0 +1,29 @@
+AC_DEFUN([SHAMROCK_CHECK_NUNIT],
+[
+ NUNIT_REQUIRED=2.4.7
+
+ AC_ARG_ENABLE(tests, AC_HELP_STRING([--enable-tests], [Enable NUnit tests]),
+ enable_tests=$enableval, enable_tests="no")
+
+ if test "x$enable_tests" = "xno"; then
+ do_tests=no
+ AM_CONDITIONAL(ENABLE_TESTS, false)
+ else
+ PKG_CHECK_MODULES(NUNIT, nunit >= $NUNIT_REQUIRED,
+ do_tests="yes", do_tests="no")
+
+ AC_SUBST(NUNIT_LIBS)
+ AM_CONDITIONAL(ENABLE_TESTS, test "x$do_tests" = "xyes")
+
+ if test "x$do_tests" = "xno"; then
+ PKG_CHECK_MODULES(NUNIT, mono-nunit >= 2.4,
+ do_tests="yes", do_tests="no")
+
+ AC_SUBST(NUNIT_LIBS)
+ AM_CONDITIONAL(ENABLE_TESTS, test "x$do_tests" = "xyes")
+
+ if test "x$do_tests" = "xno"; then
+ AC_MSG_WARN([Could not find nunit: tests will not be available]) fi
+ fi
+ fi
+])
diff --git a/build/m4/shamrock/programs.m4 b/build/m4/shamrock/programs.m4
new file mode 100644
index 0000000..2bdacfe
--- /dev/null
+++ b/build/m4/shamrock/programs.m4
@@ -0,0 +1,15 @@
+AC_DEFUN([SHAMROCK_FIND_PROGRAM],
+[
+ AC_PATH_PROG($1, $2, $3)
+ AC_SUBST($1)
+])
+
+AC_DEFUN([SHAMROCK_FIND_PROGRAM_OR_BAIL],
+[
+ SHAMROCK_FIND_PROGRAM($1, $2, no)
+ if test "x$$1" = "xno"; then
+ AC_MSG_ERROR([You need to install '$2'])
+ fi
+])
+
+
diff --git a/build/m4/shamrock/util.m4 b/build/m4/shamrock/util.m4
new file mode 100644
index 0000000..de85ba9
--- /dev/null
+++ b/build/m4/shamrock/util.m4
@@ -0,0 +1,11 @@
+AC_DEFUN([SHAMROCK_CONCAT],
+[
+ $1="$$1 $$2"
+])
+
+AC_DEFUN([SHAMROCK_CONCAT_MODULE],
+[
+ SHAMROCK_CONCAT($1_CFLAGS, $2_CFLAGS)
+ SHAMROCK_CONCAT($1_LIBS, $2_LIBS)
+])
+
diff --git a/build/m4/shave/shave-libtool.in b/build/m4/shave/shave-libtool.in
new file mode 100644
index 0000000..54ebd69
--- /dev/null
+++ b/build/m4/shave/shave-libtool.in
@@ -0,0 +1,109 @@
+#!/bin/sh
+#
+# Copyright (c) 2009, Damien Lespiau <damien.lespiau@gmail.com>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+# we need sed
+SED=@SED@
+if test -z "$SED" ; then
+SED=sed
+fi
+
+lt_unmangle ()
+{
+ last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
+}
+
+# the real libtool to use
+LIBTOOL="$1"
+shift
+
+# if 1, don't print anything, the underlaying wrapper will do it
+pass_though=0
+
+# scan the arguments, keep the right ones for libtool, and discover the mode
+preserved_args=
+
+# have we seen the --tag option of libtool in the command line ?
+tag_seen=0
+
+while test "$#" -gt 0; do
+ opt="$1"
+ shift
+
+ case $opt in
+ --mode=*)
+ mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
+ preserved_args="$preserved_args $opt"
+ ;;
+ -o)
+ lt_output="$1"
+ preserved_args="$preserved_args $opt"
+ ;;
+ --tag=*)
+ tag_seen=1
+ preserved_args="$preserved_args $opt"
+ ;;
+ *)
+ preserved_args="$preserved_args $opt"
+ ;;
+ esac
+done
+
+case "$mode" in
+compile)
+ # shave will be called and print the actual CC/CXX/LINK line
+ preserved_args="$preserved_args --shave-mode=$mode"
+ pass_though=1
+ ;;
+link)
+ preserved_args="$preserved_args --shave-mode=$mode"
+ Q=" LINK "
+ ;;
+*)
+ # let's u
+ # echo "*** libtool: Unimplemented mode: $mode, fill a bug report"
+ ;;
+esac
+
+lt_unmangle "$lt_output"
+output=$last_result
+
+# automake does not add a --tag switch to its libtool invocation when
+# assembling a .s file and rely on libtool to infer the right action based
+# on the compiler name. As shave is using CC to hook a wrapper, libtool gets
+# confused. Let's detect these cases and add a --tag=CC option.
+tag=""
+if test $tag_seen -eq 0 -a x"$mode" = xcompile; then
+ tag="--tag=CC"
+fi
+
+if test -z $V; then
+ if test $pass_though -eq 0; then
+ echo "$Q$output"
+ fi
+ $LIBTOOL --silent $tag $preserved_args
+else
+ echo $LIBTOOL $tag $preserved_args
+ $LIBTOOL $tag $preserved_args
+fi
diff --git a/build/m4/shave/shave.in b/build/m4/shave/shave.in
new file mode 100644
index 0000000..490d6c5
--- /dev/null
+++ b/build/m4/shave/shave.in
@@ -0,0 +1,109 @@
+#!/bin/sh
+#
+# Copyright (c) 2009, Damien Lespiau <damien.lespiau@gmail.com>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+# we need sed
+SED=@SED@
+if test -z "$SED" ; then
+SED=sed
+fi
+
+lt_unmangle ()
+{
+ last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
+}
+
+# the tool to wrap (cc, cxx, ar, ranlib, ..)
+tool="$1"
+shift
+
+# the reel tool (to call)
+REEL_TOOL="$1"
+shift
+
+pass_through=0
+preserved_args=
+while test "$#" -gt 0; do
+ opt="$1"
+ shift
+
+ case $opt in
+ --shave-mode=*)
+ mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
+ ;;
+ -o)
+ lt_output="$1"
+ preserved_args="$preserved_args $opt"
+ ;;
+ -out:*|/out:*)
+ lt_output="${opt#*:}"
+ preserved_args="$preserved_args $opt"
+ ;;
+ *)
+ preserved_args="$preserved_args $opt"
+ ;;
+ esac
+done
+
+# mode=link is handled in the libtool wrapper
+case "$mode,$tool" in
+link,*)
+ pass_through=1
+ ;;
+*,cxx)
+ Q=" CXX "
+ ;;
+*,cc)
+ Q=" CC "
+ ;;
+*,fc)
+ Q=" FC "
+ ;;
+*,f77)
+ Q=" F77 "
+ ;;
+*,objc)
+ Q=" OBJC "
+ ;;
+*,mcs)
+ Q=" MCS "
+ ;;
+*,*)
+ # should not happen
+ Q=" CC "
+ ;;
+esac
+
+lt_unmangle "$lt_output"
+output=$last_result
+
+if test -z $V; then
+ if test $pass_through -eq 0; then
+ echo "$Q$output"
+ fi
+ $REEL_TOOL $preserved_args
+else
+ echo $REEL_TOOL $preserved_args
+ $REEL_TOOL $preserved_args
+fi
diff --git a/build/m4/shave/shave.m4 b/build/m4/shave/shave.m4
new file mode 100644
index 0000000..40e47f4
--- /dev/null
+++ b/build/m4/shave/shave.m4
@@ -0,0 +1,102 @@
+dnl Make automake/libtool output more friendly to humans
+dnl
+dnl Copyright (c) 2009, Damien Lespiau <damien.lespiau@gmail.com>
+dnl
+dnl Permission is hereby granted, free of charge, to any person
+dnl obtaining a copy of this software and associated documentation
+dnl files (the "Software"), to deal in the Software without
+dnl restriction, including without limitation the rights to use,
+dnl copy, modify, merge, publish, distribute, sublicense, and/or sell
+dnl copies of the Software, and to permit persons to whom the
+dnl Software is furnished to do so, subject to the following
+dnl conditions:
+dnl
+dnl The above copyright notice and this permission notice shall be
+dnl included in all copies or substantial portions of the Software.
+dnl
+dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+dnl EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+dnl OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+dnl NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+dnl HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+dnl WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+dnl OTHER DEALINGS IN THE SOFTWARE.
+dnl
+dnl SHAVE_INIT([shavedir],[default_mode])
+dnl
+dnl shavedir: the directory where the shave scripts are, it defaults to
+dnl $(top_builddir)
+dnl default_mode: (enable|disable) default shave mode. This parameter
+dnl controls shave's behaviour when no option has been
+dnl given to configure. It defaults to disable.
+dnl
+dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just
+dnl before AC_CONFIG_FILE/AC_OUTPUT is perfect. This macro rewrites CC and
+dnl LIBTOOL, you don't want the configure tests to have these variables
+dnl re-defined.
+dnl * This macro requires GNU make's -s option.
+
+AC_DEFUN([_SHAVE_ARG_ENABLE],
+[
+ AC_ARG_ENABLE([shave],
+ AS_HELP_STRING(
+ [--enable-shave],
+ [use shave to make the build pretty [[default=$1]]]),,
+ [enable_shave=$1]
+ )
+])
+
+AC_DEFUN([SHAVE_INIT],
+[
+ dnl you can tweak the default value of enable_shave
+ m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
+
+ if test x"$enable_shave" = xyes; then
+ dnl where can we find the shave scripts?
+ m4_if([$1],,
+ [shavedir="$ac_pwd"],
+ [shavedir="$ac_pwd/$1"])
+ AC_SUBST(shavedir)
+
+ dnl make is now quiet
+ AC_SUBST([MAKEFLAGS], [-s])
+ AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`'])
+
+ dnl we need sed
+ AC_CHECK_PROG(SED,sed,sed,false)
+
+ dnl substitute libtool
+ SHAVE_SAVED_LIBTOOL=$LIBTOOL
+ LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
+ AC_SUBST(LIBTOOL)
+
+ dnl substitute cc/cxx
+ SHAVE_SAVED_CC=$CC
+ SHAVE_SAVED_CXX=$CXX
+ SHAVE_SAVED_FC=$FC
+ SHAVE_SAVED_F77=$F77
+ SHAVE_SAVED_OBJC=$OBJC
+ SHAVE_SAVED_MCS=$MCS
+ CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
+ CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
+ FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
+ F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
+ OBJC="${SHELL} ${shavedir}/shave objc ${SHAVE_SAVED_OBJC}"
+ MCS="${SHELL} ${shavedir}/shave mcs ${SHAVE_SAVED_MCS}"
+ AC_SUBST(CC)
+ AC_SUBST(CXX)
+ AC_SUBST(FC)
+ AC_SUBST(F77)
+ AC_SUBST(OBJC)
+ AC_SUBST(MCS)
+
+ V=@
+ else
+ V=1
+ fi
+ Q='$(V:1=)'
+ AC_SUBST(V)
+ AC_SUBST(Q)
+])
+
diff --git a/build/m4/sparkleshare/gtk-sharp.m4 b/build/m4/sparkleshare/gtk-sharp.m4
new file mode 100644
index 0000000..76077ed
--- /dev/null
+++ b/build/m4/sparkleshare/gtk-sharp.m4
@@ -0,0 +1,23 @@
+AC_DEFUN([SPARKLESHARE_CHECK_GTK_SHARP],
+[
+ GTKSHARP_REQUIRED=2.12.2
+
+ PKG_CHECK_MODULES(GTKSHARP,
+ gtk-sharp-2.0 >= $GTKSHARP_REQUIRED)
+ AC_SUBST(GTKSHARP_LIBS)
+
+ PKG_CHECK_MODULES(GLIBSHARP,
+ glib-sharp-2.0 >= $GTKSHARP_REQUIRED)
+ AC_SUBST(GLIBSHARP_LIBS)
+
+ PKG_CHECK_MODULES(GLIBSHARP_2_12_7,
+ glib-sharp-2.0 >= 2.12.7,
+ HAVE_GLIBSHARP_2_12_7=yes,
+ HAVE_GLIBSHARP_2_12_7=no)
+ AM_CONDITIONAL(HAVE_GLIBSHARP_2_12_7, [test "$HAVE_GLIBSHARP_2_12_7" = "yes"])
+
+ PKG_CHECK_MODULES(GTKSHARP_A11Y, gtk-sharp-2.0 >= 2.12.10, gtksharp_with_a11y=yes, gtksharp_with_a11y=no)
+ AM_CONDITIONAL(ENABLE_ATK, test "x$gtksharp_with_a11y" = "xyes")
+
+])
+
diff --git a/build/m4/sparkleshare/nautilus-python.m4 b/build/m4/sparkleshare/nautilus-python.m4
new file mode 100644
index 0000000..1256f36
--- /dev/null
+++ b/build/m4/sparkleshare/nautilus-python.m4
@@ -0,0 +1,14 @@
+AC_DEFUN([SPARKLESHARE_NAUTILUS_PYTHON],
+[
+ PKG_CHECK_MODULES(NAUTILUS_PYTHON, nautilus-python, have_nautilus_python=yes, have_nautilus_python=no)
+ if test "x$have_nautilus_python" = "xyes"; then
+ NAUTILUS_PREFIX="`$PKG_CONFIG --variable=prefix nautilus-python`"
+ AC_SUBST(NAUTILUS_PREFIX)
+ NAUTILUS_PYTHON_DIR="`$PKG_CONFIG --variable=pythondir nautilus-python`"
+ AC_SUBST(NAUTILUS_PYTHON_DIR)
+ AM_CONDITIONAL(NAUTILUS_EXTENSION_ENABLED, true)
+ else
+ AM_CONDITIONAL(NAUTILUS_EXTENSION_ENABLED, false)
+ fi
+])
+
diff --git a/build/m4/sparkleshare/notify-sharp.m4 b/build/m4/sparkleshare/notify-sharp.m4
new file mode 100644
index 0000000..8b8d4df
--- /dev/null
+++ b/build/m4/sparkleshare/notify-sharp.m4
@@ -0,0 +1,12 @@
+AC_DEFUN([SPARKLESHARE_CHECK_NOTIFY_SHARP],
+[
+ PKG_CHECK_MODULES(NOTIFY_SHARP, notify-sharp, have_notify_sharp=yes, have_notify_sharp=no)
+ if test "x$have_notify_sharp" = "xyes"; then
+ AC_SUBST(NOTIFY_SHARP_LIBS)
+ AM_CONDITIONAL(EXTERNAL_NOTIFY_SHARP, true)
+ else
+ AM_CONDITIONAL(EXTERNAL_NOTIFY_SHARP, false)
+ AC_MSG_RESULT([no])
+ fi
+])
+
diff --git a/build/m4/sparkleshare/smartirc4net.m4 b/build/m4/sparkleshare/smartirc4net.m4
new file mode 100644
index 0000000..9cb1099
--- /dev/null
+++ b/build/m4/sparkleshare/smartirc4net.m4
@@ -0,0 +1,16 @@
+AC_DEFUN([SPARKLESHARE_SMARTIRC4NET],
+[
+ if test ! -d "$srcdir/SmartIrc4net"; then
+ AC_MSG_ERROR([SmartIrc4net folder not found])
+ fi
+ ac_configure_args="$ac_configure_args --disable-pkg-config --disable-pkg-lib --disable-pkg-gac"
+ AC_CONFIG_SUBDIRS([SmartIrc4net])
+ asm="SmartIrc4net/bin/Meebey.SmartIrc4net.dll"
+ SMARTIRC4NET_ASSEMBLY="$asm"
+ SMARTIRC4NET_FILES="$asm"
+ [[ -r "$asm.mdb" ]] && SMARTIRC4NET_FILES="$SMARTIRC4NET_FILES $asm.mdb"
+
+ AC_SUBST([SMARTIRC4NET_ASSEMBLY])
+ AC_SUBST([SMARTIRC4NET_FILES])
+])
+
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..dc84c68
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1501 @@
+#! /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, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# 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. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a 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.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+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 <config-patches@gnu.org>."
+
+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, 2006, 2007, 2008 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.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-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 -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # 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*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ 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 ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ 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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-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:*:[456])
+ 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 -q __LP64__
+ 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 ;;
+ *: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 ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-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 ;;
+ 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 -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
+ 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 ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ 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:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ 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 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-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 ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 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.[02]*:*)
+ 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 i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-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; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ 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.[02]*:*)
+ 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 <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ 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 ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ 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 ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-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
+ i386)
+ eval $set_cc_for_build
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ 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 ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ 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://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+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 <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..2a55a50
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1705 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# 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 <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU 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.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# 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 <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 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* | \
+ kopensolaris*-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 | -microblaze)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -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 \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | 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 \
+ | ubicom32 \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+ # 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-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | 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-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | 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-* | tile-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # 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
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ 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
+ ;;
+ cr16)
+ basic_machine=cr16-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
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ 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
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ 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
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ 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
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ 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
+ ;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
+ 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
+ ;;
+ z80-*-coff)
+ basic_machine=z80-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[24]aeb | 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.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -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* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -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* | -cegcc* \
+ | -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* | -drops* | -es*)
+ # 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
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -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
+ score-*)
+ os=-elf
+ ;;
+ 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
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ 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
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -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:
diff --git a/configure b/configure
new file mode 100755
index 0000000..92fa3d3
--- /dev/null
+++ b/configure
@@ -0,0 +1,7343 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.66 for SparkleShare 0.2.1.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='SparkleShare'
+PACKAGE_TARNAME='sparkleshare'
+PACKAGE_VERSION='0.2.1'
+PACKAGE_STRING='SparkleShare 0.2.1'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+enable_option_checking=no
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+Q
+V
+OBJC
+F77
+FC
+CXX
+LIBTOOL
+SED
+AM_MAKEFLAGS
+MAKEFLAGS
+shavedir
+NAUTILUS_EXTENSION_ENABLED_FALSE
+NAUTILUS_EXTENSION_ENABLED_TRUE
+NAUTILUS_PYTHON_DIR
+NAUTILUS_PREFIX
+NAUTILUS_PYTHON_LIBS
+NAUTILUS_PYTHON_CFLAGS
+NUNIT_LIBS
+NUNIT_CFLAGS
+ENABLE_TESTS_FALSE
+ENABLE_TESTS_TRUE
+WEBKIT_SHARP_LIBS
+WEBKIT_SHARP_CFLAGS
+SMARTIRC4NET_FILES
+SMARTIRC4NET_ASSEMBLY
+subdirs
+ENABLE_ATK_FALSE
+ENABLE_ATK_TRUE
+GTKSHARP_A11Y_LIBS
+GTKSHARP_A11Y_CFLAGS
+HAVE_GLIBSHARP_2_12_7_FALSE
+HAVE_GLIBSHARP_2_12_7_TRUE
+GLIBSHARP_2_12_7_LIBS
+GLIBSHARP_2_12_7_CFLAGS
+GLIBSHARP_LIBS
+GLIBSHARP_CFLAGS
+GTKSHARP_LIBS
+GTKSHARP_CFLAGS
+ENABLE_RELEASE_FALSE
+ENABLE_RELEASE_TRUE
+ENABLE_DEBUG_FALSE
+ENABLE_DEBUG_TRUE
+EXTERNAL_NOTIFY_SHARP_FALSE
+EXTERNAL_NOTIFY_SHARP_TRUE
+NOTIFY_SHARP_LIBS
+NOTIFY_SHARP_CFLAGS
+MONO
+MCS
+MONO_MODULE_LIBS
+MONO_MODULE_CFLAGS
+HAVE_GNOME_DOC_UTILS_FALSE
+HAVE_GNOME_DOC_UTILS_TRUE
+ENABLE_SK_FALSE
+ENABLE_SK_TRUE
+GNOME_DOC_UTILS_LIBS
+GNOME_DOC_UTILS_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+expanded_datadir
+expanded_bindir
+expanded_libdir
+GETTEXT_PACKAGE
+DATADIRNAME
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+ALL_LINGUAS
+INTLTOOL_PERL
+GMSGFMT
+MSGFMT
+MSGMERGE
+XGETTEXT
+INTLTOOL_POLICY_RULE
+INTLTOOL_SERVICE_RULE
+INTLTOOL_THEME_RULE
+INTLTOOL_SCHEMAS_RULE
+INTLTOOL_CAVES_RULE
+INTLTOOL_XML_NOMERGE_RULE
+INTLTOOL_XML_RULE
+INTLTOOL_KBD_RULE
+INTLTOOL_XAM_RULE
+INTLTOOL_UI_RULE
+INTLTOOL_SOUNDLIST_RULE
+INTLTOOL_SHEET_RULE
+INTLTOOL_SERVER_RULE
+INTLTOOL_PONG_RULE
+INTLTOOL_OAF_RULE
+INTLTOOL_PROP_RULE
+INTLTOOL_KEYS_RULE
+INTLTOOL_DIRECTORY_RULE
+INTLTOOL_DESKTOP_RULE
+INTLTOOL_EXTRACT
+INTLTOOL_MERGE
+INTLTOOL_UPDATE
+USE_NLS
+ACLOCAL_AMFLAGS
+PKG_CONFIG
+ASM_VERSION
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_nls
+enable_dependency_tracking
+enable_user_help
+enable_debug
+enable_release
+enable_tests
+enable_shave
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+GNOME_DOC_UTILS_CFLAGS
+GNOME_DOC_UTILS_LIBS
+MONO_MODULE_CFLAGS
+MONO_MODULE_LIBS
+NOTIFY_SHARP_CFLAGS
+NOTIFY_SHARP_LIBS
+GTKSHARP_CFLAGS
+GTKSHARP_LIBS
+GLIBSHARP_CFLAGS
+GLIBSHARP_LIBS
+GLIBSHARP_2_12_7_CFLAGS
+GLIBSHARP_2_12_7_LIBS
+GTKSHARP_A11Y_CFLAGS
+GTKSHARP_A11Y_LIBS
+WEBKIT_SHARP_CFLAGS
+WEBKIT_SHARP_LIBS
+NUNIT_CFLAGS
+NUNIT_LIBS
+NAUTILUS_PYTHON_CFLAGS
+NAUTILUS_PYTHON_LIBS'
+ac_subdirs_all='SmartIrc4net'
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures SparkleShare 0.2.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/sparkleshare]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of SparkleShare 0.2.1:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --disable-nls do not use Native Language Support
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-user-help Enable building the user-help [[default=auto]]
+ --enable-debug Use 'DEBUG' Configuration [default=YES]
+ --enable-release Use 'RELEASE' Configuration [default=NO]
+ --enable-tests Enable NUnit tests
+ --enable-shave use shave to make the build pretty [[default=yes]]
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ PKG_CONFIG path to pkg-config utility
+ PKG_CONFIG_PATH
+ directories to add to pkg-config's search path
+ PKG_CONFIG_LIBDIR
+ path overriding pkg-config's built-in search path
+ GNOME_DOC_UTILS_CFLAGS
+ C compiler flags for GNOME_DOC_UTILS, overriding pkg-config
+ GNOME_DOC_UTILS_LIBS
+ linker flags for GNOME_DOC_UTILS, overriding pkg-config
+ MONO_MODULE_CFLAGS
+ C compiler flags for MONO_MODULE, overriding pkg-config
+ MONO_MODULE_LIBS
+ linker flags for MONO_MODULE, overriding pkg-config
+ NOTIFY_SHARP_CFLAGS
+ C compiler flags for NOTIFY_SHARP, overriding pkg-config
+ NOTIFY_SHARP_LIBS
+ linker flags for NOTIFY_SHARP, overriding pkg-config
+ GTKSHARP_CFLAGS
+ C compiler flags for GTKSHARP, overriding pkg-config
+ GTKSHARP_LIBS
+ linker flags for GTKSHARP, overriding pkg-config
+ GLIBSHARP_CFLAGS
+ C compiler flags for GLIBSHARP, overriding pkg-config
+ GLIBSHARP_LIBS
+ linker flags for GLIBSHARP, overriding pkg-config
+ GLIBSHARP_2_12_7_CFLAGS
+ C compiler flags for GLIBSHARP_2_12_7, overriding pkg-config
+ GLIBSHARP_2_12_7_LIBS
+ linker flags for GLIBSHARP_2_12_7, overriding pkg-config
+ GTKSHARP_A11Y_CFLAGS
+ C compiler flags for GTKSHARP_A11Y, overriding pkg-config
+ GTKSHARP_A11Y_LIBS
+ linker flags for GTKSHARP_A11Y, overriding pkg-config
+ WEBKIT_SHARP_CFLAGS
+ C compiler flags for WEBKIT_SHARP, overriding pkg-config
+ WEBKIT_SHARP_LIBS
+ linker flags for WEBKIT_SHARP, overriding pkg-config
+ NUNIT_CFLAGS
+ C compiler flags for NUNIT, overriding pkg-config
+ NUNIT_LIBS linker flags for NUNIT, overriding pkg-config
+ NAUTILUS_PYTHON_CFLAGS
+ C compiler flags for NAUTILUS_PYTHON, overriding pkg-config
+ NAUTILUS_PYTHON_LIBS
+ linker flags for NAUTILUS_PYTHON, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+SparkleShare configure 0.2.1
+generated by GNU Autoconf 2.66
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by SparkleShare $as_me 0.2.1, which was
+generated by GNU Autoconf 2.66. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test "${ac_cv_path_mkdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='sparkleshare'
+ VERSION='0.2.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
+$as_echo_n "checking how to create a ustar tar archive... " >&6; }
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar plaintar pax cpio none'
+_am_tools=${am_cv_prog_tar_ustar-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ { echo "$as_me:$LINENO: $_am_tar --version" >&5
+ ($_am_tar --version) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && break
+ done
+ am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x ustar -w "$$tardir"'
+ am__tar_='pax -L -x ustar -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H ustar -L'
+ am__tar_='find "$tardir" -print | cpio -o -H ustar -L'
+ am__untar='cpio -i -H ustar -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_ustar}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
+ (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
+ ($am__untar <conftest.tar) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+if test "${am_cv_prog_tar_ustar+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ am_cv_prog_tar_ustar=$_am_tool
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5
+$as_echo "$am_cv_prog_tar_ustar" >&6; }
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+ASM_VERSION=0.2.1
+
+
+# Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test "x$PKG_CONFIG" = "xno"; then
+ as_fn_error $? "You need to install pkg-config" "$LINENO" 5
+fi
+
+ACLOCAL_AMFLAGS="-I build/m4/sparkleshare -I build/m4/shamrock -I build/m4/shave \${ACLOCAL_FLAGS}"
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+ # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+ enableval=$enable_nls; USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+
+
+case "$am__api_version" in
+ 1.01234)
+ as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5
+ ;;
+ *)
+ ;;
+esac
+
+if test -n "0.40.6"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.40.6" >&5
+$as_echo_n "checking for intltool >= 0.40.6... " >&6; }
+
+ INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.40.6 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+ INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+ INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5
+$as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; }
+ test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+ as_fn_error $? "Your intltool is too old. You need intltool 0.40.6 or later." "$LINENO" 5
+fi
+
+# Extract the first word of "intltool-update", so it can be a program name with args.
+set dummy intltool-update; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_INTLTOOL_UPDATE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $INTLTOOL_UPDATE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE
+if test -n "$INTLTOOL_UPDATE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5
+$as_echo "$INTLTOOL_UPDATE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "intltool-merge", so it can be a program name with args.
+set dummy intltool-merge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_INTLTOOL_MERGE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $INTLTOOL_MERGE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE
+if test -n "$INTLTOOL_MERGE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5
+$as_echo "$INTLTOOL_MERGE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "intltool-extract", so it can be a program name with args.
+set dummy intltool-extract; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_INTLTOOL_EXTRACT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $INTLTOOL_EXTRACT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT
+if test -n "$INTLTOOL_EXTRACT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5
+$as_echo "$INTLTOOL_EXTRACT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
+ as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5
+fi
+
+ INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@'
+ INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@'
+ INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+ INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check the gettext tools to make sure they are GNU
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $XGETTEXT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+XGETTEXT=$ac_cv_path_XGETTEXT
+if test -n "$XGETTEXT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MSGMERGE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MSGMERGE=$ac_cv_path_MSGMERGE
+if test -n "$MSGMERGE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MSGFMT=$ac_cv_path_MSGFMT
+if test -n "$MSGFMT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
+ as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
+fi
+xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
+mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
+mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
+if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
+ as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
+fi
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_INTLTOOL_PERL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $INTLTOOL_PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL
+if test -n "$INTLTOOL_PERL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5
+$as_echo "$INTLTOOL_PERL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$INTLTOOL_PERL"; then
+ as_fn_error $? "perl not found" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5
+$as_echo_n "checking for perl >= 5.8.1... " >&6; }
+$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
+if test $? -ne 0; then
+ as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5
+else
+ IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5
+$as_echo "$IT_PERL_VERSION" >&6; }
+fi
+if test "x" != "xno-xml"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5
+$as_echo_n "checking for XML::Parser... " >&6; }
+ if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+ else
+ as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5
+ fi
+fi
+
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+
+
+# Set DATADIRNAME correctly if it is not set yet
+# (copied from glib-gettext.m4)
+if test -z "$DATADIRNAME"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+extern int _nl_msg_cat_cntr;
+ return _nl_msg_cat_cntr
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ DATADIRNAME=share
+else
+ case $host in
+ *-*-solaris*)
+ ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset"
+if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then :
+ DATADIRNAME=share
+else
+ DATADIRNAME=lib
+fi
+
+ ;;
+ *)
+ DATADIRNAME=lib
+ ;;
+ esac
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+
+
+
+GETTEXT_PACKAGE=sparkleshare
+
+
+cat >>confdefs.h <<_ACEOF
+#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE"
+_ACEOF
+
+
+
+ expanded_libdir=`(
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+ eval echo $libdir
+ )`
+
+
+
+ expanded_bindir=`(
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+ eval echo $bindir
+ )`
+
+
+
+ case $prefix in
+ NONE) prefix=$ac_default_prefix ;;
+ *) ;;
+ esac
+
+ case $exec_prefix in
+ NONE) exec_prefix=$prefix ;;
+ *) ;;
+ esac
+
+ expanded_datadir=`(eval echo $datadir)`
+ expanded_datadir=`(eval echo $expanded_datadir)`
+
+
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+
+ # Check whether --enable-user-help was given.
+if test "${enable_user_help+set}" = set; then :
+ enableval=$enable_user_help;
+else
+ enable_user_help=auto
+fi
+
+
+ if test "x$enable_user_help" = "xauto"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNOME_DOC_UTILS" >&5
+$as_echo_n "checking for GNOME_DOC_UTILS... " >&6; }
+
+if test -n "$GNOME_DOC_UTILS_CFLAGS"; then
+ pkg_cv_GNOME_DOC_UTILS_CFLAGS="$GNOME_DOC_UTILS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnome-doc-utils") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GNOME_DOC_UTILS_CFLAGS=`$PKG_CONFIG --cflags "gnome-doc-utils" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GNOME_DOC_UTILS_LIBS"; then
+ pkg_cv_GNOME_DOC_UTILS_LIBS="$GNOME_DOC_UTILS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnome-doc-utils") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GNOME_DOC_UTILS_LIBS=`$PKG_CONFIG --libs "gnome-doc-utils" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GNOME_DOC_UTILS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gnome-doc-utils" 2>&1`
+ else
+ GNOME_DOC_UTILS_PKG_ERRORS=`$PKG_CONFIG --print-errors "gnome-doc-utils" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GNOME_DOC_UTILS_PKG_ERRORS" >&5
+
+ enable_user_help=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ enable_user_help=no
+else
+ GNOME_DOC_UTILS_CFLAGS=$pkg_cv_GNOME_DOC_UTILS_CFLAGS
+ GNOME_DOC_UTILS_LIBS=$pkg_cv_GNOME_DOC_UTILS_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ enable_user_help=yes
+fi
+ elif test "x$enable_user_help" = "xyes"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNOME_DOC_UTILS" >&5
+$as_echo_n "checking for GNOME_DOC_UTILS... " >&6; }
+
+if test -n "$GNOME_DOC_UTILS_CFLAGS"; then
+ pkg_cv_GNOME_DOC_UTILS_CFLAGS="$GNOME_DOC_UTILS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnome-doc-utils") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GNOME_DOC_UTILS_CFLAGS=`$PKG_CONFIG --cflags "gnome-doc-utils" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GNOME_DOC_UTILS_LIBS"; then
+ pkg_cv_GNOME_DOC_UTILS_LIBS="$GNOME_DOC_UTILS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnome-doc-utils") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GNOME_DOC_UTILS_LIBS=`$PKG_CONFIG --libs "gnome-doc-utils" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GNOME_DOC_UTILS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gnome-doc-utils" 2>&1`
+ else
+ GNOME_DOC_UTILS_PKG_ERRORS=`$PKG_CONFIG --print-errors "gnome-doc-utils" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GNOME_DOC_UTILS_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (gnome-doc-utils) were not met:
+
+$GNOME_DOC_UTILS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GNOME_DOC_UTILS_CFLAGS
+and GNOME_DOC_UTILS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GNOME_DOC_UTILS_CFLAGS
+and GNOME_DOC_UTILS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+
+else
+ GNOME_DOC_UTILS_CFLAGS=$pkg_cv_GNOME_DOC_UTILS_CFLAGS
+ GNOME_DOC_UTILS_LIBS=$pkg_cv_GNOME_DOC_UTILS_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+ fi
+
+ # GNOME_DOC_INIT sets ENABLE_SK, but if we have disabled
+ # user docs, then this needs to be defined manually.
+ if false; then
+ ENABLE_SK_TRUE=
+ ENABLE_SK_FALSE='#'
+else
+ ENABLE_SK_TRUE='#'
+ ENABLE_SK_FALSE=
+fi
+
+ if test "x$enable_user_help" = "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5
+$as_echo "$as_me: " >&6;}
+ fi
+
+ if test "x$enable_user_help" = "xyes"; then
+ HAVE_GNOME_DOC_UTILS_TRUE=
+ HAVE_GNOME_DOC_UTILS_FALSE='#'
+else
+ HAVE_GNOME_DOC_UTILS_TRUE='#'
+ HAVE_GNOME_DOC_UTILS_FALSE=
+fi
+
+
+
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MONO_MODULE" >&5
+$as_echo_n "checking for MONO_MODULE... " >&6; }
+
+if test -n "$MONO_MODULE_CFLAGS"; then
+ pkg_cv_MONO_MODULE_CFLAGS="$MONO_MODULE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono >= 2.2\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono >= 2.2") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MONO_MODULE_CFLAGS=`$PKG_CONFIG --cflags "mono >= 2.2" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$MONO_MODULE_LIBS"; then
+ pkg_cv_MONO_MODULE_LIBS="$MONO_MODULE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono >= 2.2\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono >= 2.2") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MONO_MODULE_LIBS=`$PKG_CONFIG --libs "mono >= 2.2" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ MONO_MODULE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono >= 2.2" 2>&1`
+ else
+ MONO_MODULE_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono >= 2.2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$MONO_MODULE_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (mono >= 2.2) were not met:
+
+$MONO_MODULE_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_MODULE_CFLAGS
+and MONO_MODULE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_MODULE_CFLAGS
+and MONO_MODULE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+
+else
+ MONO_MODULE_CFLAGS=$pkg_cv_MONO_MODULE_CFLAGS
+ MONO_MODULE_LIBS=$pkg_cv_MONO_MODULE_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+
+
+ # Extract the first word of "gmcs", so it can be a program name with args.
+set dummy gmcs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MCS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MCS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MCS="$MCS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_MCS" && ac_cv_path_MCS="no"
+ ;;
+esac
+fi
+MCS=$ac_cv_path_MCS
+if test -n "$MCS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5
+$as_echo "$MCS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+ if test "x$MCS" = "xno"; then
+ as_fn_error $? "You need to install 'gmcs'" "$LINENO" 5
+ fi
+
+
+
+
+
+ # Extract the first word of "mono", so it can be a program name with args.
+set dummy mono; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MONO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MONO in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MONO="$MONO" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MONO="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_MONO" && ac_cv_path_MONO="no"
+ ;;
+esac
+fi
+MONO=$ac_cv_path_MONO
+if test -n "$MONO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MONO" >&5
+$as_echo "$MONO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+ if test "x$MONO" = "xno"; then
+ as_fn_error $? "You need to install 'mono'" "$LINENO" 5
+ fi
+
+
+
+
+ for asm in $(echo "mono,2.0,System
+ System.Security
+ Mono.Posix
+" | cut -d, -f3- | sed 's/\,/ /g')
+ do
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mono 2.0 GAC for $asm.dll" >&5
+$as_echo_n "checking for Mono 2.0 GAC for $asm.dll... " >&6; }
+ if test \
+ -e "$($PKG_CONFIG --variable=libdir mono)/mono/2.0/$asm.dll" -o \
+ -e "$($PKG_CONFIG --variable=prefix mono)/lib/mono/2.0/$asm.dll"; \
+ then \
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+ as_fn_error $? "missing required Mono 2.0 assembly: $asm.dll" "$LINENO" 5
+ fi
+ done
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NOTIFY_SHARP" >&5
+$as_echo_n "checking for NOTIFY_SHARP... " >&6; }
+
+if test -n "$NOTIFY_SHARP_CFLAGS"; then
+ pkg_cv_NOTIFY_SHARP_CFLAGS="$NOTIFY_SHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"notify-sharp\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "notify-sharp") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NOTIFY_SHARP_CFLAGS=`$PKG_CONFIG --cflags "notify-sharp" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NOTIFY_SHARP_LIBS"; then
+ pkg_cv_NOTIFY_SHARP_LIBS="$NOTIFY_SHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"notify-sharp\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "notify-sharp") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NOTIFY_SHARP_LIBS=`$PKG_CONFIG --libs "notify-sharp" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NOTIFY_SHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "notify-sharp" 2>&1`
+ else
+ NOTIFY_SHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "notify-sharp" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$NOTIFY_SHARP_PKG_ERRORS" >&5
+
+ have_notify_sharp=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_notify_sharp=no
+else
+ NOTIFY_SHARP_CFLAGS=$pkg_cv_NOTIFY_SHARP_CFLAGS
+ NOTIFY_SHARP_LIBS=$pkg_cv_NOTIFY_SHARP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_notify_sharp=yes
+fi
+ if test "x$have_notify_sharp" = "xyes"; then
+
+ if true; then
+ EXTERNAL_NOTIFY_SHARP_TRUE=
+ EXTERNAL_NOTIFY_SHARP_FALSE='#'
+else
+ EXTERNAL_NOTIFY_SHARP_TRUE='#'
+ EXTERNAL_NOTIFY_SHARP_FALSE=
+fi
+
+ else
+ if false; then
+ EXTERNAL_NOTIFY_SHARP_TRUE=
+ EXTERNAL_NOTIFY_SHARP_FALSE='#'
+else
+ EXTERNAL_NOTIFY_SHARP_TRUE='#'
+ EXTERNAL_NOTIFY_SHARP_FALSE=
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+ enableval=$enable_debug; enable_debug=yes
+else
+ enable_debug=no
+fi
+
+ if test x$enable_debug = xyes; then
+ ENABLE_DEBUG_TRUE=
+ ENABLE_DEBUG_FALSE='#'
+else
+ ENABLE_DEBUG_TRUE='#'
+ ENABLE_DEBUG_FALSE=
+fi
+
+if test "x$enable_debug" = "xyes" ; then
+ CONFIG_REQUESTED="yes"
+fi
+# Check whether --enable-release was given.
+if test "${enable_release+set}" = set; then :
+ enableval=$enable_release; enable_release=yes
+else
+ enable_release=no
+fi
+
+ if test x$enable_release = xyes; then
+ ENABLE_RELEASE_TRUE=
+ ENABLE_RELEASE_FALSE='#'
+else
+ ENABLE_RELEASE_TRUE='#'
+ ENABLE_RELEASE_FALSE=
+fi
+
+if test "x$enable_release" = "xyes" ; then
+ CONFIG_REQUESTED="yes"
+fi
+if test -z "$CONFIG_REQUESTED" ; then
+ if true; then
+ ENABLE_DEBUG_TRUE=
+ ENABLE_DEBUG_FALSE='#'
+else
+ ENABLE_DEBUG_TRUE='#'
+ ENABLE_DEBUG_FALSE=
+fi
+
+ enable_debug=yes
+fi
+
+
+#PKG_CHECK_MODULES([NDESK_DBUS], [ndesk-dbus-1.0])
+#AC_SUBST(NDESK_DBUS_LIBS)
+#PKG_CHECK_MODULES([NDESK_DBUS_GLIB], [ndesk-dbus-glib-1.0])
+#AC_SUBST(NDESK_DBUS_GLIB_LIBS)
+
+
+
+ GTKSHARP_REQUIRED=2.12.2
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSHARP" >&5
+$as_echo_n "checking for GTKSHARP... " >&6; }
+
+if test -n "$GTKSHARP_CFLAGS"; then
+ pkg_cv_GTKSHARP_CFLAGS="$GTKSHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTKSHARP_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GTKSHARP_LIBS"; then
+ pkg_cv_GTKSHARP_LIBS="$GTKSHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTKSHARP_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GTKSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+ else
+ GTKSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GTKSHARP_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (gtk-sharp-2.0 >= $GTKSHARP_REQUIRED) were not met:
+
+$GTKSHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GTKSHARP_CFLAGS
+and GTKSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GTKSHARP_CFLAGS
+and GTKSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+
+else
+ GTKSHARP_CFLAGS=$pkg_cv_GTKSHARP_CFLAGS
+ GTKSHARP_LIBS=$pkg_cv_GTKSHARP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP" >&5
+$as_echo_n "checking for GLIBSHARP... " >&6; }
+
+if test -n "$GLIBSHARP_CFLAGS"; then
+ pkg_cv_GLIBSHARP_CFLAGS="$GLIBSHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIBSHARP_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIBSHARP_LIBS"; then
+ pkg_cv_GLIBSHARP_LIBS="$GLIBSHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIBSHARP_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+ else
+ GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIBSHARP_PKG_ERRORS" >&5
+
+ as_fn_error $? "Package requirements (glib-sharp-2.0 >= $GTKSHARP_REQUIRED) were not met:
+
+$GLIBSHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLIBSHARP_CFLAGS
+and GLIBSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLIBSHARP_CFLAGS
+and GLIBSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+
+else
+ GLIBSHARP_CFLAGS=$pkg_cv_GLIBSHARP_CFLAGS
+ GLIBSHARP_LIBS=$pkg_cv_GLIBSHARP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP_2_12_7" >&5
+$as_echo_n "checking for GLIBSHARP_2_12_7... " >&6; }
+
+if test -n "$GLIBSHARP_2_12_7_CFLAGS"; then
+ pkg_cv_GLIBSHARP_2_12_7_CFLAGS="$GLIBSHARP_2_12_7_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= 2.12.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= 2.12.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIBSHARP_2_12_7_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= 2.12.7" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIBSHARP_2_12_7_LIBS"; then
+ pkg_cv_GLIBSHARP_2_12_7_LIBS="$GLIBSHARP_2_12_7_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= 2.12.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= 2.12.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIBSHARP_2_12_7_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= 2.12.7" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIBSHARP_2_12_7_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= 2.12.7" 2>&1`
+ else
+ GLIBSHARP_2_12_7_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= 2.12.7" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIBSHARP_2_12_7_PKG_ERRORS" >&5
+
+ HAVE_GLIBSHARP_2_12_7=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ HAVE_GLIBSHARP_2_12_7=no
+else
+ GLIBSHARP_2_12_7_CFLAGS=$pkg_cv_GLIBSHARP_2_12_7_CFLAGS
+ GLIBSHARP_2_12_7_LIBS=$pkg_cv_GLIBSHARP_2_12_7_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_GLIBSHARP_2_12_7=yes
+fi
+ if test "$HAVE_GLIBSHARP_2_12_7" = "yes"; then
+ HAVE_GLIBSHARP_2_12_7_TRUE=
+ HAVE_GLIBSHARP_2_12_7_FALSE='#'
+else
+ HAVE_GLIBSHARP_2_12_7_TRUE='#'
+ HAVE_GLIBSHARP_2_12_7_FALSE=
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSHARP_A11Y" >&5
+$as_echo_n "checking for GTKSHARP_A11Y... " >&6; }
+
+if test -n "$GTKSHARP_A11Y_CFLAGS"; then
+ pkg_cv_GTKSHARP_A11Y_CFLAGS="$GTKSHARP_A11Y_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= 2.12.10\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= 2.12.10") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTKSHARP_A11Y_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= 2.12.10" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GTKSHARP_A11Y_LIBS"; then
+ pkg_cv_GTKSHARP_A11Y_LIBS="$GTKSHARP_A11Y_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= 2.12.10\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= 2.12.10") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTKSHARP_A11Y_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= 2.12.10" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GTKSHARP_A11Y_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= 2.12.10" 2>&1`
+ else
+ GTKSHARP_A11Y_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= 2.12.10" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GTKSHARP_A11Y_PKG_ERRORS" >&5
+
+ gtksharp_with_a11y=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ gtksharp_with_a11y=no
+else
+ GTKSHARP_A11Y_CFLAGS=$pkg_cv_GTKSHARP_A11Y_CFLAGS
+ GTKSHARP_A11Y_LIBS=$pkg_cv_GTKSHARP_A11Y_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ gtksharp_with_a11y=yes
+fi
+ if test "x$gtksharp_with_a11y" = "xyes"; then
+ ENABLE_ATK_TRUE=
+ ENABLE_ATK_FALSE='#'
+else
+ ENABLE_ATK_TRUE='#'
+ ENABLE_ATK_FALSE=
+fi
+
+
+
+
+
+
+ if test ! -d "$srcdir/SmartIrc4net"; then
+ as_fn_error $? "SmartIrc4net folder not found" "$LINENO" 5
+ fi
+ ac_configure_args="$ac_configure_args --disable-pkg-config --disable-pkg-lib --disable-pkg-gac"
+ subdirs="$subdirs SmartIrc4net"
+
+ asm="SmartIrc4net/bin/Meebey.SmartIrc4net.dll"
+ SMARTIRC4NET_ASSEMBLY="$asm"
+ SMARTIRC4NET_FILES="$asm"
+ [ -r "$asm.mdb" ] && SMARTIRC4NET_FILES="$SMARTIRC4NET_FILES $asm.mdb"
+
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WEBKIT_SHARP" >&5
+$as_echo_n "checking for WEBKIT_SHARP... " >&6; }
+
+if test -n "$WEBKIT_SHARP_CFLAGS"; then
+ pkg_cv_WEBKIT_SHARP_CFLAGS="$WEBKIT_SHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"webkit-sharp-1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "webkit-sharp-1.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_WEBKIT_SHARP_CFLAGS=`$PKG_CONFIG --cflags "webkit-sharp-1.0" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$WEBKIT_SHARP_LIBS"; then
+ pkg_cv_WEBKIT_SHARP_LIBS="$WEBKIT_SHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"webkit-sharp-1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "webkit-sharp-1.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_WEBKIT_SHARP_LIBS=`$PKG_CONFIG --libs "webkit-sharp-1.0" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ WEBKIT_SHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "webkit-sharp-1.0" 2>&1`
+ else
+ WEBKIT_SHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "webkit-sharp-1.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$WEBKIT_SHARP_PKG_ERRORS" >&5
+
+ have_webkit_sharp=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_webkit_sharp=no
+else
+ WEBKIT_SHARP_CFLAGS=$pkg_cv_WEBKIT_SHARP_CFLAGS
+ WEBKIT_SHARP_LIBS=$pkg_cv_WEBKIT_SHARP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_webkit_sharp=yes
+fi
+
+
+
+ NUNIT_REQUIRED=2.4.7
+
+ # Check whether --enable-tests was given.
+if test "${enable_tests+set}" = set; then :
+ enableval=$enable_tests; enable_tests=$enableval
+else
+ enable_tests="no"
+fi
+
+
+ if test "x$enable_tests" = "xno"; then
+ do_tests=no
+ if false; then
+ ENABLE_TESTS_TRUE=
+ ENABLE_TESTS_FALSE='#'
+else
+ ENABLE_TESTS_TRUE='#'
+ ENABLE_TESTS_FALSE=
+fi
+
+ else
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
+$as_echo_n "checking for NUNIT... " >&6; }
+
+if test -n "$NUNIT_CFLAGS"; then
+ pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NUNIT_LIBS"; then
+ pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
+ else
+ NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$NUNIT_PKG_ERRORS" >&5
+
+ do_tests="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ do_tests="no"
+else
+ NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
+ NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ do_tests="yes"
+fi
+
+
+ if test "x$do_tests" = "xyes"; then
+ ENABLE_TESTS_TRUE=
+ ENABLE_TESTS_FALSE='#'
+else
+ ENABLE_TESTS_TRUE='#'
+ ENABLE_TESTS_FALSE=
+fi
+
+
+ if test "x$do_tests" = "xno"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
+$as_echo_n "checking for NUNIT... " >&6; }
+
+if test -n "$NUNIT_CFLAGS"; then
+ pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "mono-nunit >= 2.4" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NUNIT_LIBS"; then
+ pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "mono-nunit >= 2.4" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-nunit >= 2.4" 2>&1`
+ else
+ NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-nunit >= 2.4" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$NUNIT_PKG_ERRORS" >&5
+
+ do_tests="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ do_tests="no"
+else
+ NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
+ NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ do_tests="yes"
+fi
+
+
+ if test "x$do_tests" = "xyes"; then
+ ENABLE_TESTS_TRUE=
+ ENABLE_TESTS_FALSE='#'
+else
+ ENABLE_TESTS_TRUE='#'
+ ENABLE_TESTS_FALSE=
+fi
+
+
+ if test "x$do_tests" = "xno"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find nunit: tests will not be available" >&5
+$as_echo "$as_me: WARNING: Could not find nunit: tests will not be available" >&2;} fi
+ fi
+ fi
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NAUTILUS_PYTHON" >&5
+$as_echo_n "checking for NAUTILUS_PYTHON... " >&6; }
+
+if test -n "$NAUTILUS_PYTHON_CFLAGS"; then
+ pkg_cv_NAUTILUS_PYTHON_CFLAGS="$NAUTILUS_PYTHON_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nautilus-python\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "nautilus-python") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NAUTILUS_PYTHON_CFLAGS=`$PKG_CONFIG --cflags "nautilus-python" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NAUTILUS_PYTHON_LIBS"; then
+ pkg_cv_NAUTILUS_PYTHON_LIBS="$NAUTILUS_PYTHON_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nautilus-python\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "nautilus-python") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NAUTILUS_PYTHON_LIBS=`$PKG_CONFIG --libs "nautilus-python" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NAUTILUS_PYTHON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "nautilus-python" 2>&1`
+ else
+ NAUTILUS_PYTHON_PKG_ERRORS=`$PKG_CONFIG --print-errors "nautilus-python" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$NAUTILUS_PYTHON_PKG_ERRORS" >&5
+
+ have_nautilus_python=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_nautilus_python=no
+else
+ NAUTILUS_PYTHON_CFLAGS=$pkg_cv_NAUTILUS_PYTHON_CFLAGS
+ NAUTILUS_PYTHON_LIBS=$pkg_cv_NAUTILUS_PYTHON_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_nautilus_python=yes
+fi
+ if test "x$have_nautilus_python" = "xyes"; then
+ NAUTILUS_PREFIX="`$PKG_CONFIG --variable=prefix nautilus-python`"
+
+ NAUTILUS_PYTHON_DIR="`$PKG_CONFIG --variable=pythondir nautilus-python`"
+
+ if true; then
+ NAUTILUS_EXTENSION_ENABLED_TRUE=
+ NAUTILUS_EXTENSION_ENABLED_FALSE='#'
+else
+ NAUTILUS_EXTENSION_ENABLED_TRUE='#'
+ NAUTILUS_EXTENSION_ENABLED_FALSE=
+fi
+
+ else
+ if false; then
+ NAUTILUS_EXTENSION_ENABLED_TRUE=
+ NAUTILUS_EXTENSION_ENABLED_FALSE='#'
+else
+ NAUTILUS_EXTENSION_ENABLED_TRUE='#'
+ NAUTILUS_EXTENSION_ENABLED_FALSE=
+fi
+
+ fi
+
+
+
+
+ # Check whether --enable-shave was given.
+if test "${enable_shave+set}" = set; then :
+ enableval=$enable_shave;
+else
+ enable_shave=yes
+
+fi
+
+
+
+ if test x"$enable_shave" = xyes; then
+ shavedir="$ac_pwd/build/m4/shave"
+
+
+ MAKEFLAGS=-s
+
+ AM_MAKEFLAGS='`test -z $V && echo -s`'
+
+
+ # Extract the first word of "sed", so it can be a program name with args.
+set dummy sed; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_SED+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$SED"; then
+ ac_cv_prog_SED="$SED" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_SED="sed"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_SED" && ac_cv_prog_SED="false"
+fi
+fi
+SED=$ac_cv_prog_SED
+if test -n "$SED"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5
+$as_echo "$SED" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ SHAVE_SAVED_LIBTOOL=$LIBTOOL
+ LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
+
+
+ SHAVE_SAVED_CC=$CC
+ SHAVE_SAVED_CXX=$CXX
+ SHAVE_SAVED_FC=$FC
+ SHAVE_SAVED_F77=$F77
+ SHAVE_SAVED_OBJC=$OBJC
+ SHAVE_SAVED_MCS=$MCS
+ CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
+ CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
+ FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
+ F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
+ OBJC="${SHELL} ${shavedir}/shave objc ${SHAVE_SAVED_OBJC}"
+ MCS="${SHELL} ${shavedir}/shave mcs ${SHAVE_SAVED_MCS}"
+
+
+
+
+
+
+
+ V=@
+ else
+ V=1
+ fi
+ Q='$(V:1=)'
+
+
+
+
+
+ac_config_files="$ac_config_files build/Makefile build/m4/Makefile build/m4/shave/shave build/m4/shave/shave-libtool data/Makefile data/icons/Makefile data/html/Makefile help/Makefile SparkleLib/AssemblyInfo.cs SparkleLib/Defines.cs SparkleLib/Makefile SparkleShare/sparkleshare SparkleShare/Makefile SparkleShare/Mac/Makefile SparkleShare/Nautilus/Makefile SparkleShare/Nautilus/sparkleshare-nautilus-extension.py po/Makefile.in Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+ ac_config_commands="$ac_config_commands po/stamp-it"
+
+
+if test -z "${ENABLE_SK_TRUE}" && test -z "${ENABLE_SK_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_SK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_GNOME_DOC_UTILS_TRUE}" && test -z "${HAVE_GNOME_DOC_UTILS_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_GNOME_DOC_UTILS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${EXTERNAL_NOTIFY_SHARP_TRUE}" && test -z "${EXTERNAL_NOTIFY_SHARP_FALSE}"; then
+ as_fn_error $? "conditional \"EXTERNAL_NOTIFY_SHARP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${EXTERNAL_NOTIFY_SHARP_TRUE}" && test -z "${EXTERNAL_NOTIFY_SHARP_FALSE}"; then
+ as_fn_error $? "conditional \"EXTERNAL_NOTIFY_SHARP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_DEBUG_TRUE}" && test -z "${ENABLE_DEBUG_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_DEBUG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_RELEASE_TRUE}" && test -z "${ENABLE_RELEASE_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_RELEASE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_DEBUG_TRUE}" && test -z "${ENABLE_DEBUG_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_DEBUG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_GLIBSHARP_2_12_7_TRUE}" && test -z "${HAVE_GLIBSHARP_2_12_7_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_GLIBSHARP_2_12_7\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_ATK_TRUE}" && test -z "${ENABLE_ATK_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_ATK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_TESTS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_TESTS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_TESTS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${NAUTILUS_EXTENSION_ENABLED_TRUE}" && test -z "${NAUTILUS_EXTENSION_ENABLED_FALSE}"; then
+ as_fn_error $? "conditional \"NAUTILUS_EXTENSION_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${NAUTILUS_EXTENSION_ENABLED_TRUE}" && test -z "${NAUTILUS_EXTENSION_ENABLED_FALSE}"; then
+ as_fn_error $? "conditional \"NAUTILUS_EXTENSION_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by SparkleShare $as_me 0.2.1, which was
+generated by GNU Autoconf 2.66. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+SparkleShare config.status 0.2.1
+configured by $0, generated by GNU Autoconf 2.66,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "build/Makefile") CONFIG_FILES="$CONFIG_FILES build/Makefile" ;;
+ "build/m4/Makefile") CONFIG_FILES="$CONFIG_FILES build/m4/Makefile" ;;
+ "build/m4/shave/shave") CONFIG_FILES="$CONFIG_FILES build/m4/shave/shave" ;;
+ "build/m4/shave/shave-libtool") CONFIG_FILES="$CONFIG_FILES build/m4/shave/shave-libtool" ;;
+ "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+ "data/icons/Makefile") CONFIG_FILES="$CONFIG_FILES data/icons/Makefile" ;;
+ "data/html/Makefile") CONFIG_FILES="$CONFIG_FILES data/html/Makefile" ;;
+ "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;;
+ "SparkleLib/AssemblyInfo.cs") CONFIG_FILES="$CONFIG_FILES SparkleLib/AssemblyInfo.cs" ;;
+ "SparkleLib/Defines.cs") CONFIG_FILES="$CONFIG_FILES SparkleLib/Defines.cs" ;;
+ "SparkleLib/Makefile") CONFIG_FILES="$CONFIG_FILES SparkleLib/Makefile" ;;
+ "SparkleShare/sparkleshare") CONFIG_FILES="$CONFIG_FILES SparkleShare/sparkleshare" ;;
+ "SparkleShare/Makefile") CONFIG_FILES="$CONFIG_FILES SparkleShare/Makefile" ;;
+ "SparkleShare/Mac/Makefile") CONFIG_FILES="$CONFIG_FILES SparkleShare/Mac/Makefile" ;;
+ "SparkleShare/Nautilus/Makefile") CONFIG_FILES="$CONFIG_FILES SparkleShare/Nautilus/Makefile" ;;
+ "SparkleShare/Nautilus/sparkleshare-nautilus-extension.py") CONFIG_FILES="$CONFIG_FILES SparkleShare/Nautilus/sparkleshare-nautilus-extension.py" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "po/stamp-it":C)
+ if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then
+ as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5
+ fi
+ rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp"
+ >"po/stamp-it.tmp"
+ sed '/^#/d
+ s/^[[].*] *//
+ /^[ ]*$/d
+ '"s|^| $ac_top_srcdir/|" \
+ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES"
+
+ sed '/^POTFILES =/,/[^\\]$/ {
+ /^POTFILES =/!d
+ r po/POTFILES
+ }
+ ' "po/Makefile.in" >"po/Makefile"
+ rm -f "po/Makefile.tmp"
+ mv "po/stamp-it.tmp" "po/stamp-it"
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+
+#
+# CONFIG_SUBDIRS section.
+#
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for ac_arg
+ do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case $ac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ case $ac_arg in
+ *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
+ esac
+ done
+
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ ac_arg="--prefix=$prefix"
+ case $ac_arg in
+ *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+ # Pass --silent
+ if test "$silent" = yes; then
+ ac_sub_configure_args="--silent $ac_sub_configure_args"
+ fi
+
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+ ac_popdir=`pwd`
+ for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$ac_dir" || continue
+
+ ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+ $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
+ $as_echo "$ac_msg" >&6
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ cd "$ac_dir"
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ ac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ ac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.in"; then
+ # This should be Cygnus configure.
+ ac_sub_configure=$ac_aux_dir/configure
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+ # Make the cache file name correct relative to the subdirectory.
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+ *) # Relative name.
+ ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+ # The eval makes quoting arguments work.
+ eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+ as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
+ fi
+
+ cd "$ac_popdir"
+ done
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+echo "
+SparkleShare ${VERSION}
+
+Configuration:
+ Prefix : ${prefix}
+ Nautilus plugin : ${have_nautilus_python}
+ User Help : ${enable_user_help} (requires gnome-doc-utils >= 0.17.3)
+
+"
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..f4ad55b
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,125 @@
+dnl Process this file with autoconf to produce a configure script.
+m4_define([sparkleshare_version],
+ [0.2.1])
+
+m4_define([sparkleshare_asm_version],
+ [0.2.1])
+
+AC_PREREQ([2.54])
+AC_INIT([SparkleShare], sparkleshare_version)
+AM_INIT_AUTOMAKE([1.11 dist-bzip2 dist-zip foreign tar-ustar])
+AM_MAINTAINER_MODE
+
+dnl Export Version Info
+AC_SUBST([ASM_VERSION], [sparkleshare_asm_version])
+
+dnl pkg-config
+AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+if test "x$PKG_CONFIG" = "xno"; then
+ AC_MSG_ERROR([You need to install pkg-config])
+fi
+
+AC_SUBST([ACLOCAL_AMFLAGS], ["-I build/m4/sparkleshare -I build/m4/shamrock -I build/m4/shave \${ACLOCAL_FLAGS}"])
+
+dnl i18n
+IT_PROG_INTLTOOL([0.40.6])
+GETTEXT_PACKAGE=sparkleshare
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package])
+
+SHAMROCK_EXPAND_LIBDIR
+SHAMROCK_EXPAND_BINDIR
+SHAMROCK_EXPAND_DATADIR
+
+dnl Help files
+SHAMROCK_CHECK_GNOME_DOC_UTILS(0.17.3)
+
+AC_PROG_INSTALL
+
+dnl Mono and gmcs
+SHAMROCK_CHECK_MONO_MODULE(2.2)
+SHAMROCK_FIND_MONO_2_0_COMPILER
+SHAMROCK_FIND_MONO_RUNTIME
+SHAMROCK_CHECK_MONO_2_0_GAC_ASSEMBLIES([
+ System
+ System.Security
+ Mono.Posix
+])
+
+SPARKLESHARE_CHECK_NOTIFY_SHARP
+
+AC_ARG_ENABLE(debug,
+ AC_HELP_STRING([--enable-debug],
+ [Use 'DEBUG' Configuration [default=YES]]),
+ enable_debug=yes, enable_debug=no)
+AM_CONDITIONAL(ENABLE_DEBUG, test x$enable_debug = xyes)
+if test "x$enable_debug" = "xyes" ; then
+ CONFIG_REQUESTED="yes"
+fi
+AC_ARG_ENABLE(release,
+ AC_HELP_STRING([--enable-release],
+ [Use 'RELEASE' Configuration [default=NO]]),
+ enable_release=yes, enable_release=no)
+AM_CONDITIONAL(ENABLE_RELEASE, test x$enable_release = xyes)
+if test "x$enable_release" = "xyes" ; then
+ CONFIG_REQUESTED="yes"
+fi
+if test -z "$CONFIG_REQUESTED" ; then
+ AM_CONDITIONAL(ENABLE_DEBUG, true)
+ enable_debug=yes
+fi
+
+
+dnl package checks, common for all configs
+#PKG_CHECK_MODULES([NDESK_DBUS], [ndesk-dbus-1.0])
+#AC_SUBST(NDESK_DBUS_LIBS)
+#PKG_CHECK_MODULES([NDESK_DBUS_GLIB], [ndesk-dbus-glib-1.0])
+#AC_SUBST(NDESK_DBUS_GLIB_LIBS)
+
+
+SPARKLESHARE_CHECK_GTK_SHARP
+SPARKLESHARE_SMARTIRC4NET
+
+dnl check for webkit-sharp
+PKG_CHECK_MODULES(WEBKIT_SHARP, webkit-sharp-1.0, have_webkit_sharp=yes, have_webkit_sharp=no)
+AC_SUBST(WEBKIT_SHARP_LIBS)
+
+SHAMROCK_CHECK_NUNIT
+
+dnl Get nautilus extensions directory
+SPARKLESHARE_NAUTILUS_PYTHON
+
+SHAVE_INIT([build/m4/shave], [enable])
+
+
+AC_OUTPUT([
+build/Makefile
+build/m4/Makefile
+build/m4/shave/shave
+build/m4/shave/shave-libtool
+data/Makefile
+data/icons/Makefile
+data/html/Makefile
+help/Makefile
+SparkleLib/AssemblyInfo.cs
+SparkleLib/Defines.cs
+SparkleLib/Makefile
+SparkleShare/sparkleshare
+SparkleShare/Makefile
+SparkleShare/Mac/Makefile
+SparkleShare/Nautilus/Makefile
+SparkleShare/Nautilus/sparkleshare-nautilus-extension.py
+po/Makefile.in
+Makefile
+])
+
+echo "
+SparkleShare ${VERSION}
+
+Configuration:
+ Prefix : ${prefix}
+ Nautilus plugin : ${have_nautilus_python}
+ User Help : ${enable_user_help} (requires gnome-doc-utils >= 0.17.3)
+
+"
+
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644
index 0000000..24edd82
--- /dev/null
+++ b/data/Makefile.am
@@ -0,0 +1,13 @@
+SUBDIRS = \
+ icons \
+ html
+
+dist_pixmaps_DATA = \
+ sparkleshare-gnome.svg \
+ sparkleshare-mist.svg \
+ side-splash.png
+
+pixmapsdir = $(pkgdatadir)/pixmaps/
+
+MAINTAINERCLEANFILES = \
+ Makefile.in
diff --git a/data/Makefile.in b/data/Makefile.in
new file mode 100644
index 0000000..157d4b5
--- /dev/null
+++ b/data/Makefile.in
@@ -0,0 +1,651 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = data
+DIST_COMMON = $(dist_pixmaps_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pixmapsdir)"
+DATA = $(dist_pixmaps_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = \
+ icons \
+ html
+
+dist_pixmaps_DATA = \
+ sparkleshare-gnome.svg \
+ sparkleshare-mist.svg \
+ side-splash.png
+
+pixmapsdir = $(pkgdatadir)/pixmaps/
+MAINTAINERCLEANFILES = \
+ Makefile.in
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign data/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-dist_pixmapsDATA: $(dist_pixmaps_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pixmapsdir)" || $(MKDIR_P) "$(DESTDIR)$(pixmapsdir)"
+ @list='$(dist_pixmaps_DATA)'; test -n "$(pixmapsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pixmapsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pixmapsdir)" || exit $$?; \
+ done
+
+uninstall-dist_pixmapsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_pixmaps_DATA)'; test -n "$(pixmapsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pixmapsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pixmapsdir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(pixmapsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-dist_pixmapsDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-dist_pixmapsDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dist_pixmapsDATA install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-dist_pixmapsDATA
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/html/Makefile.am b/data/html/Makefile.am
new file mode 100644
index 0000000..a12e3bf
--- /dev/null
+++ b/data/html/Makefile.am
@@ -0,0 +1,9 @@
+dist_html_DATA = \
+ day-entry.html \
+ event-entry.html \
+ event-log.html
+
+htmldir = $(pkgdatadir)/html/
+
+MAINTAINERCLEANFILES = \
+ Makefile.in
diff --git a/data/html/Makefile.in b/data/html/Makefile.in
new file mode 100644
index 0000000..60c7375
--- /dev/null
+++ b/data/html/Makefile.in
@@ -0,0 +1,444 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = data/html
+DIST_COMMON = $(dist_html_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(htmldir)"
+DATA = $(dist_html_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = $(pkgdatadir)/html/
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+dist_html_DATA = \
+ day-entry.html \
+ event-entry.html \
+ event-log.html
+
+MAINTAINERCLEANFILES = \
+ Makefile.in
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/html/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign data/html/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-dist_htmlDATA: $(dist_html_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+ @list='$(dist_html_DATA)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done
+
+uninstall-dist_htmlDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_html_DATA)'; test -n "$(htmldir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(htmldir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(htmldir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(htmldir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_htmlDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_htmlDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dist_htmlDATA install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-dist_htmlDATA
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/html/day-entry.html b/data/html/day-entry.html
new file mode 100644
index 0000000..9b02332
--- /dev/null
+++ b/data/html/day-entry.html
@@ -0,0 +1,8 @@
+<div class='day-entry'>
+ <div class='day-entry-header'>
+ <!-- $day-entry-header -->
+ </div>
+ <div class='day-entry-content'>
+ <!-- $day-entry-content -->
+ </div>
+</div>
diff --git a/data/html/event-entry.html b/data/html/event-entry.html
new file mode 100644
index 0000000..fbeed41
--- /dev/null
+++ b/data/html/event-entry.html
@@ -0,0 +1,20 @@
+<div class='event-entry'>
+
+ <div class='event-entry-content'>
+
+ <div class='no-buddy-icon'>
+ <div class='buddy-icon' style='background-image: url("<!-- $event-avatar-url -->");'></div>
+ </div>
+
+ <div class='event-info'>
+ <b><!-- $event-user-name --></b>
+ <!-- $event-entry-content -->
+ </div>
+
+ <div class='event-time'><!-- $event-time --></div>
+
+ <div style='clear: both'></div>
+
+ </div>
+
+</div>
diff --git a/data/html/event-log.html b/data/html/event-log.html
new file mode 100644
index 0000000..a595ea8
--- /dev/null
+++ b/data/html/event-log.html
@@ -0,0 +1,113 @@
+<!doctype html>
+<html>
+ <head>
+ <title>SparkleShare Event Log</title>
+ <style>
+ body {
+ background-color: #f0f0f0;
+ color: <!-- $body-color -->;
+ font-size: <!-- $body-font-size -->;
+ font-family: <!-- $body-font-family -->;
+ margin: 0;
+ padding: 0;
+ margin-top: 20px;
+ -webkit-user-select: none;
+ }
+
+ small {
+ font-size: <!-- $small-font-size -->;
+ color: <!-- $small-color -->;
+ }
+
+ .moved-arrow {
+ color: <!-- $secondary-font-color -->;
+ }
+
+ .day-entry-header {
+ font-size: <!-- $day-entry-header-font-size -->;
+ color: #babdb6;
+ text-align: center;
+ width: 90%;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 1.0);
+ margin-bottom: 9px;
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ .day-entry-content {
+ padding: 9px;
+ }
+
+ a {
+ color: <!-- $a-color -->;
+ text-decoration: none;
+ }
+
+ a:hover {
+ color: <!-- $a-hover-color -->;
+ }
+
+ .event-time {
+ font-size: 80%;
+ color: <!-- $secondary-font-color -->;
+ float: right;
+ }
+
+ .event-entry-content {
+ display: block;
+ width: 400px;
+ background-color: #fff;
+ margin-left: auto;
+ margin-right: auto;
+ margin-bottom: 9px;
+ padding: 18px;
+ -webkit-border-radius: 6px;
+ border: #ddd 1px solid;
+ }
+
+ dl {
+ padding: 0;
+ margin: 0;
+ padding-bottom: 15px;
+ }
+
+ dt {
+ padding-bottom: 12px;
+ padding-top: 12px;
+ font-size: 80%;
+ color: <!-- $secondary-font-color -->;
+ }
+
+ dd {
+ width: 300px;
+ overflow: hidden;
+ padding-left: 0;
+ margin-left: 12px;
+ text-overflow: ellipsis;
+ padding-bottom: 9px;
+ }
+
+ .no-buddy-icon {
+ float: left;
+ margin-right: 12px;
+ width: 36px;
+ background-image: url('<!-- $no-buddy-icon-background-image -->');
+ background-repeat: no-repeat;
+ background-position: top center;
+ }
+
+ .buddy-icon {
+ width: 36px;
+ height: 36px;
+ background-color: #fff;
+ }
+
+ .event-info {
+ float: left;
+ }
+ </style>
+ </head>
+ <body>
+ <!-- $event-log-content -->
+ </body>
+</html>
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
new file mode 100644
index 0000000..fd62183
--- /dev/null
+++ b/data/icons/Makefile.am
@@ -0,0 +1,51 @@
+theme = hicolor
+system_themedir = $(datadir)/icons/$(theme)
+app_themedir = $(pkgdatadir)/icons/$(theme)
+
+system_theme_icons = \
+ apps,folder-sparkleshare-16.png \
+ apps,folder-sparkleshare-22.png \
+ apps,folder-sparkleshare-24.png \
+ apps,folder-sparkleshare-256.png \
+ apps,folder-sparkleshare-32.png \
+ apps,folder-sparkleshare-48.png
+
+app_theme_icons = \
+ animations,process-syncing-sparkleshare-24.png \
+ animations,process-working-22.png \
+ places,folder-sparkleshare-16.png \
+ places,folder-sparkleshare-22.png \
+ places,folder-sparkleshare-24.png \
+ places,folder-sparkleshare-256.png \
+ places,folder-sparkleshare-32.png \
+ places,folder-sparkleshare-48.png \
+ status,sparkleshare-syncing-error-24.png \
+ status,avatar-default-16.png \
+ status,avatar-default-22.png \
+ status,avatar-default-24.png \
+ status,avatar-default-32.png \
+ status,avatar-default-48.png \
+ status,document-added-16.png \
+ status,document-edited-16.png \
+ status,document-moved-16.png \
+ status,document-removed-16.png \
+ status,dialog-error-16.png \
+ status,dialog-error-24.png
+
+install_icon_exec = $(top_srcdir)/build/icon-theme-installer \
+ -t "$(theme)" \
+ -s "$(srcdir)" \
+ -d "x$(DESTDIR)" \
+ -m "$(mkinstalldirs)" \
+ -x "$(INSTALL_DATA)"
+
+install-data-local:
+ @-$(install_icon_exec) -i -b "$(system_themedir)" $(system_theme_icons)
+ @-$(install_icon_exec) -i -b "$(app_themedir)" $(app_theme_icons)
+
+uninstall-hook:
+ @-$(install_icon_exec) -u -b "$(system_themedir)" $(system_theme_icons)
+ @-$(install_icon_exec) -u -b "$(app_themedir)" $(app_theme_icons)
+
+MAINTAINERCLEANFILES = Makefile.in
+EXTRA_DIST = $(wildcard *.png *.svg)
diff --git a/data/icons/Makefile.in b/data/icons/Makefile.in
new file mode 100644
index 0000000..19050a2
--- /dev/null
+++ b/data/icons/Makefile.in
@@ -0,0 +1,439 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = data/icons
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+theme = hicolor
+system_themedir = $(datadir)/icons/$(theme)
+app_themedir = $(pkgdatadir)/icons/$(theme)
+system_theme_icons = \
+ apps,folder-sparkleshare-16.png \
+ apps,folder-sparkleshare-22.png \
+ apps,folder-sparkleshare-24.png \
+ apps,folder-sparkleshare-256.png \
+ apps,folder-sparkleshare-32.png \
+ apps,folder-sparkleshare-48.png
+
+app_theme_icons = \
+ animations,process-syncing-sparkleshare-24.png \
+ animations,process-working-22.png \
+ places,folder-sparkleshare-16.png \
+ places,folder-sparkleshare-22.png \
+ places,folder-sparkleshare-24.png \
+ places,folder-sparkleshare-256.png \
+ places,folder-sparkleshare-32.png \
+ places,folder-sparkleshare-48.png \
+ status,sparkleshare-syncing-error-24.png \
+ status,avatar-default-16.png \
+ status,avatar-default-22.png \
+ status,avatar-default-24.png \
+ status,avatar-default-32.png \
+ status,avatar-default-48.png \
+ status,document-added-16.png \
+ status,document-edited-16.png \
+ status,document-moved-16.png \
+ status,document-removed-16.png \
+ status,dialog-error-16.png \
+ status,dialog-error-24.png
+
+install_icon_exec = $(top_srcdir)/build/icon-theme-installer \
+ -t "$(theme)" \
+ -s "$(srcdir)" \
+ -d "x$(DESTDIR)" \
+ -m "$(mkinstalldirs)" \
+ -x "$(INSTALL_DATA)"
+
+MAINTAINERCLEANFILES = Makefile.in
+EXTRA_DIST = $(wildcard *.png *.svg)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/icons/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign data/icons/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: install-am install-strip uninstall-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-hook
+
+
+install-data-local:
+ @-$(install_icon_exec) -i -b "$(system_themedir)" $(system_theme_icons)
+ @-$(install_icon_exec) -i -b "$(app_themedir)" $(app_theme_icons)
+
+uninstall-hook:
+ @-$(install_icon_exec) -u -b "$(system_themedir)" $(system_theme_icons)
+ @-$(install_icon_exec) -u -b "$(app_themedir)" $(app_theme_icons)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/icons/avatar-default-16.png b/data/icons/avatar-default-16.png
new file mode 100644
index 0000000..0d231ee
--- /dev/null
+++ b/data/icons/avatar-default-16.png
Binary files differ
diff --git a/data/icons/avatar-default-22.png b/data/icons/avatar-default-22.png
new file mode 100644
index 0000000..089024e
--- /dev/null
+++ b/data/icons/avatar-default-22.png
Binary files differ
diff --git a/data/icons/avatar-default-24.png b/data/icons/avatar-default-24.png
new file mode 100644
index 0000000..6cc87fc
--- /dev/null
+++ b/data/icons/avatar-default-24.png
Binary files differ
diff --git a/data/icons/avatar-default-32.png b/data/icons/avatar-default-32.png
new file mode 100644
index 0000000..1422648
--- /dev/null
+++ b/data/icons/avatar-default-32.png
Binary files differ
diff --git a/data/icons/avatar-default-48.png b/data/icons/avatar-default-48.png
new file mode 100644
index 0000000..47d4a85
--- /dev/null
+++ b/data/icons/avatar-default-48.png
Binary files differ
diff --git a/data/icons/dialog-error-16.png b/data/icons/dialog-error-16.png
new file mode 100644
index 0000000..0b0d8be
--- /dev/null
+++ b/data/icons/dialog-error-16.png
Binary files differ
diff --git a/data/icons/dialog-error-24.png b/data/icons/dialog-error-24.png
new file mode 100644
index 0000000..9821d78
--- /dev/null
+++ b/data/icons/dialog-error-24.png
Binary files differ
diff --git a/data/icons/document-added-16.png b/data/icons/document-added-16.png
new file mode 100644
index 0000000..14fa8a3
--- /dev/null
+++ b/data/icons/document-added-16.png
Binary files differ
diff --git a/data/icons/document-edited-16.png b/data/icons/document-edited-16.png
new file mode 100644
index 0000000..e0a9f97
--- /dev/null
+++ b/data/icons/document-edited-16.png
Binary files differ
diff --git a/data/icons/document-moved-16.png b/data/icons/document-moved-16.png
new file mode 100644
index 0000000..834f6a7
--- /dev/null
+++ b/data/icons/document-moved-16.png
Binary files differ
diff --git a/data/icons/document-removed-16.png b/data/icons/document-removed-16.png
new file mode 100644
index 0000000..4695e87
--- /dev/null
+++ b/data/icons/document-removed-16.png
Binary files differ
diff --git a/data/icons/error-active.png b/data/icons/error-active.png
new file mode 100644
index 0000000..c751896
--- /dev/null
+++ b/data/icons/error-active.png
Binary files differ
diff --git a/data/icons/error.png b/data/icons/error.png
new file mode 100644
index 0000000..f9e56b9
--- /dev/null
+++ b/data/icons/error.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-16-mist.png b/data/icons/folder-sparkleshare-16-mist.png
new file mode 100644
index 0000000..2deaee4
--- /dev/null
+++ b/data/icons/folder-sparkleshare-16-mist.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-16.png b/data/icons/folder-sparkleshare-16.png
new file mode 100644
index 0000000..0d4905c
--- /dev/null
+++ b/data/icons/folder-sparkleshare-16.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-22-mist.png b/data/icons/folder-sparkleshare-22-mist.png
new file mode 100644
index 0000000..d6f920f
--- /dev/null
+++ b/data/icons/folder-sparkleshare-22-mist.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-22.png b/data/icons/folder-sparkleshare-22.png
new file mode 100644
index 0000000..89f6ad2
--- /dev/null
+++ b/data/icons/folder-sparkleshare-22.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-24-mist.png b/data/icons/folder-sparkleshare-24-mist.png
new file mode 100644
index 0000000..12727a3
--- /dev/null
+++ b/data/icons/folder-sparkleshare-24-mist.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-24.png b/data/icons/folder-sparkleshare-24.png
new file mode 100644
index 0000000..a98e206
--- /dev/null
+++ b/data/icons/folder-sparkleshare-24.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-256-mist.png b/data/icons/folder-sparkleshare-256-mist.png
new file mode 100644
index 0000000..b102727
--- /dev/null
+++ b/data/icons/folder-sparkleshare-256-mist.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-256.png b/data/icons/folder-sparkleshare-256.png
new file mode 100644
index 0000000..6041b5b
--- /dev/null
+++ b/data/icons/folder-sparkleshare-256.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-32-mist.png b/data/icons/folder-sparkleshare-32-mist.png
new file mode 100644
index 0000000..795f665
--- /dev/null
+++ b/data/icons/folder-sparkleshare-32-mist.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-32.png b/data/icons/folder-sparkleshare-32.png
new file mode 100644
index 0000000..8a28c73
--- /dev/null
+++ b/data/icons/folder-sparkleshare-32.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-48-mist.png b/data/icons/folder-sparkleshare-48-mist.png
new file mode 100644
index 0000000..2a9d6e5
--- /dev/null
+++ b/data/icons/folder-sparkleshare-48-mist.png
Binary files differ
diff --git a/data/icons/folder-sparkleshare-48.png b/data/icons/folder-sparkleshare-48.png
new file mode 100644
index 0000000..b1976dd
--- /dev/null
+++ b/data/icons/folder-sparkleshare-48.png
Binary files differ
diff --git a/data/icons/idle0-active.png b/data/icons/idle0-active.png
new file mode 100644
index 0000000..be43fe8
--- /dev/null
+++ b/data/icons/idle0-active.png
Binary files differ
diff --git a/data/icons/idle0.png b/data/icons/idle0.png
new file mode 100644
index 0000000..6ce3193
--- /dev/null
+++ b/data/icons/idle0.png
Binary files differ
diff --git a/data/icons/idle1-active.png b/data/icons/idle1-active.png
new file mode 100644
index 0000000..ea414c0
--- /dev/null
+++ b/data/icons/idle1-active.png
Binary files differ
diff --git a/data/icons/idle1.png b/data/icons/idle1.png
new file mode 100644
index 0000000..ae01c63
--- /dev/null
+++ b/data/icons/idle1.png
Binary files differ
diff --git a/data/icons/idle2-active.png b/data/icons/idle2-active.png
new file mode 100644
index 0000000..6016bce
--- /dev/null
+++ b/data/icons/idle2-active.png
Binary files differ
diff --git a/data/icons/idle2.png b/data/icons/idle2.png
new file mode 100644
index 0000000..84ee584
--- /dev/null
+++ b/data/icons/idle2.png
Binary files differ
diff --git a/data/icons/idle3-active.png b/data/icons/idle3-active.png
new file mode 100644
index 0000000..8b2f18a
--- /dev/null
+++ b/data/icons/idle3-active.png
Binary files differ
diff --git a/data/icons/idle3.png b/data/icons/idle3.png
new file mode 100644
index 0000000..20190c2
--- /dev/null
+++ b/data/icons/idle3.png
Binary files differ
diff --git a/data/icons/idle4-active.png b/data/icons/idle4-active.png
new file mode 100644
index 0000000..e6a933d
--- /dev/null
+++ b/data/icons/idle4-active.png
Binary files differ
diff --git a/data/icons/idle4.png b/data/icons/idle4.png
new file mode 100644
index 0000000..6324bfd
--- /dev/null
+++ b/data/icons/idle4.png
Binary files differ
diff --git a/data/icons/process-syncing-sparkleshare-24-mist.png b/data/icons/process-syncing-sparkleshare-24-mist.png
new file mode 100644
index 0000000..2d68cd4
--- /dev/null
+++ b/data/icons/process-syncing-sparkleshare-24-mist.png
Binary files differ
diff --git a/data/icons/process-syncing-sparkleshare-24.png b/data/icons/process-syncing-sparkleshare-24.png
new file mode 100644
index 0000000..632a3e2
--- /dev/null
+++ b/data/icons/process-syncing-sparkleshare-24.png
Binary files differ
diff --git a/data/icons/process-working-22.png b/data/icons/process-working-22.png
new file mode 100644
index 0000000..9005de7
--- /dev/null
+++ b/data/icons/process-working-22.png
Binary files differ
diff --git a/data/icons/sparkleshare-syncing-error-24.png b/data/icons/sparkleshare-syncing-error-24.png
new file mode 100644
index 0000000..f306498
--- /dev/null
+++ b/data/icons/sparkleshare-syncing-error-24.png
Binary files differ
diff --git a/data/side-splash.png b/data/side-splash.png
new file mode 100644
index 0000000..bbc815e
--- /dev/null
+++ b/data/side-splash.png
Binary files differ
diff --git a/data/sparkleshare-gnome.svg b/data/sparkleshare-gnome.svg
new file mode 100644
index 0000000..7750404
--- /dev/null
+++ b/data/sparkleshare-gnome.svg
@@ -0,0 +1,4020 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="400"
+ id="svg11300"
+ inkscape:export-filename="/home/jimmac/Desktop/git-folders.png"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-ydpi="90.000000"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:version="0.48.0 r9654"
+ sodipodi:docname="sparkleshare-gnome.svg"
+ sodipodi:version="0.32"
+ style="display:inline;enable-background:new"
+ version="1.0"
+ width="500">
+ <sodipodi:namedview
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ fill="#f57900"
+ gridtolerance="10000"
+ guidetolerance="10000"
+ height="300px"
+ id="base"
+ inkscape:current-layer="layer20"
+ inkscape:cx="464.56664"
+ inkscape:cy="123.20561"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:showpageshadow="false"
+ inkscape:snap-bbox="true"
+ inkscape:snap-nodes="false"
+ inkscape:window-height="756"
+ inkscape:window-width="1280"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:zoom="8"
+ objecttolerance="10000"
+ pagecolor="#ffffff"
+ showgrid="true"
+ stroke="#ef2929"
+ width="400px"
+ showguides="false"
+ inkscape:guide-bbox="true"
+ inkscape:snap-global="true"
+ inkscape:window-maximized="0"
+ inkscape:bbox-paths="false"
+ inkscape:bbox-nodes="false">
+ <inkscape:grid
+ snapvisiblegridlinesonly="true"
+ enabled="true"
+ id="grid5883"
+ spacingx="1px"
+ spacingy="1px"
+ type="xygrid"
+ visible="true"
+ empspacing="4" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="642.75,472.25"
+ id="guide3715" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="660,462.5"
+ id="guide3717" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="435.75,446.25"
+ id="guide3719" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="587.5,364"
+ id="guide3721" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="647.5,328"
+ id="guide3734" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="448,311"
+ id="guide3736" />
+ <sodipodi:guide
+ id="guide2995"
+ position="1004.7987,432.04224"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide5127"
+ position="314,177"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide5129"
+ position="321,93"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide3538"
+ position="692,250"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide8344"
+ position="316.69545,807.95789"
+ orientation="0,1" />
+ <inkscape:grid
+ snapvisiblegridlinesonly="true"
+ spacingy="0.5px"
+ spacingx="0.5px"
+ empspacing="2"
+ enabled="false"
+ visible="true"
+ id="grid8407"
+ type="xygrid" />
+ <sodipodi:guide
+ id="guide8504"
+ position="631.44636,847.46748"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide9483"
+ position="735.5,745"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide9523"
+ position="624,1021.5"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide9525"
+ position="544.5,1037.5"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide10342"
+ position="1590.9903,663.97327"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide11568"
+ position="396.5,539.5"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide11570"
+ position="440,508"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide6085"
+ position="1590.9903,663.97327"
+ orientation="0,1" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata85">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Hylke Bons, Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:title>sparkleshare</dc:title>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>folder</rdf:li>
+ <rdf:li>directory</rdf:li>
+ <rdf:li>share</rdf:li>
+ <rdf:li>dir</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:description>Derived from Jakub Steiner's design</dc:description>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>Hylke Bons, Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ id="perspective432"
+ inkscape:persp3d-origin="250 : 133.33333 : 1"
+ inkscape:vp_z="500 : 200 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 200 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ id="linearGradient11481">
+ <stop
+ id="stop11483"
+ offset="0"
+ style="stop-color:#a04600;stop-opacity:1" />
+ <stop
+ id="stop11485"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4775"
+ inkscape:collect="always">
+ <stop
+ id="stop4777"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4779"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11579">
+ <stop
+ id="stop11581"
+ offset="0"
+ style="stop-color:#a1a184;stop-opacity:1;" />
+ <stop
+ style="stop-color:#4a4a3e;stop-opacity:1;"
+ offset="0.85273892"
+ id="stop11583" />
+ <stop
+ id="stop11585"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5400">
+ <stop
+ id="stop5402"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.49803922;"
+ offset="0.5"
+ id="stop4610" />
+ <stop
+ id="stop5404"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4733"
+ inkscape:collect="always">
+ <stop
+ id="stop4735"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4737"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4989">
+ <stop
+ id="stop4991"
+ offset="0"
+ style="stop-color:#f57900;stop-opacity:1" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0.06043659"
+ id="stop4993" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0.17753538"
+ id="stop4995" />
+ <stop
+ id="stop4997"
+ offset="0.89421868"
+ style="stop-color:#f57900;stop-opacity:1" />
+ <stop
+ style="stop-color:#ce5c00;stop-opacity:1"
+ offset="1"
+ id="stop4999" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4908">
+ <stop
+ style="stop-color:#ce5c00;stop-opacity:1"
+ offset="0"
+ id="stop4910" />
+ <stop
+ style="stop-color:#f57900;stop-opacity:1"
+ offset="1"
+ id="stop4912" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3423">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3425" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3427" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4629">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4631" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4633" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4613">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4615" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4617" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4347">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4349" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4351" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4324">
+ <stop
+ id="stop4326"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.65294117;"
+ offset="0.71109551"
+ id="stop4328" />
+ <stop
+ id="stop4330"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4314">
+ <stop
+ id="stop4316"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.44705883;"
+ offset="0.59644723"
+ id="stop4318" />
+ <stop
+ id="stop4320"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4172">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4174" />
+ <stop
+ style="stop-color:#90937c;stop-opacity:1;"
+ offset="1"
+ id="stop4176" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4156">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4158" />
+ <stop
+ id="stop4180"
+ offset="0.73067844"
+ style="stop-color:#ffffff;stop-opacity:0.78823531;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4160" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4101">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4103" />
+ <stop
+ id="stop4109"
+ offset="0.60000002"
+ style="stop-color:#ffffff;stop-opacity:0.80588233;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4105" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4061">
+ <path
+ sodipodi:nodetypes="cccccccccsscc"
+ id="path4063"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ d="M 52.09435,312 C 49.75874,312 48,313.27843 48,315.94967 l 0,167.46562 C 48,487.36726 50.44676,490 53.77179,490 l 189.55521,0 c 3.34438,0 4.673,-2.46074 4.673,-5.90535 l 0,-147.52177 c 0,-2.95096 -2.01067,-4.54661 -4.51602,-4.54661 l -93.98741,0 c -1.69284,0 -4.43377,-0.2055 -6.49302,-2.5614 l -13.0712,-14.95423 c -1.75748,-2.01066 -4.22518,-2.51056 -6.08975,-2.51056 L 52.09435,312 z" />
+ </clipPath>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter4065">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.91"
+ id="feGaussianBlur4067" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter4123"
+ x="-0.071666434"
+ width="1.143333"
+ y="-0.36857754"
+ height="1.7371551">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="6.4501067"
+ id="feGaussianBlur4125" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter4375"
+ x="-0.012418499"
+ width="1.024837"
+ y="-0.35608697"
+ height="1.7121739">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0664062"
+ id="feGaussianBlur4377" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter4379">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.90031864"
+ id="feGaussianBlur4381" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter4454"
+ x="-0.16149577"
+ width="1.3229916"
+ y="-1.8572015"
+ height="4.7144032">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="15.476679"
+ id="feGaussianBlur4456" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter4458"
+ x="-0.053831927"
+ width="1.1076639"
+ y="-0.61906713"
+ height="2.2381344">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="5.158893"
+ id="feGaussianBlur4460" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter4496"
+ x="-0.034788974"
+ width="1.0695779"
+ y="-0.40007317"
+ height="1.8001463">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="3.3339431"
+ id="feGaussianBlur4498" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter4508"
+ x="-0.06957794"
+ width="1.1391559"
+ y="-0.80014634"
+ height="2.6002927">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="6.6678862"
+ id="feGaussianBlur4510" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:collect="always"
+ id="filter3458"
+ x="-1.4187527"
+ width="3.8375056"
+ y="-0.047067627"
+ height="1.0941353">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0345072"
+ id="feGaussianBlur3460" />
+ </filter>
+ <pattern
+ patternUnits="userSpaceOnUse"
+ width="256"
+ height="256"
+ patternTransform="translate(-523,-333)"
+ id="pattern2719">
+ <image
+ xlink:href="data:image/png;base64,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 3NySOBxOkZub25pQKFyvq6tzsbW1nRoaGvIFAIAgFovXOjo6qvX09EAikQjAYDBq09PT9V+/fsXa 2dlJ/e9//+s+evSo0okTJ2YBAHD78ePH72PHjmUCAABMT0+nDQ0Nfe/p6ZHmcDjEHTvIwWjxAAAg AElEQVR2CDEYzLqvr6+GhobGOp1O92QwGJYsFuvu1taWjpSUlDufzwfNz8+v/vjxY+TixYsuKBRK BQKByAsEgjWJREIZGRkZxuPxgp07d6KysrLGvby8/jc7O1tAoVDgcDh8UVZWFnf06NH5ixcvStXW 1oqDgoKgtra2e9bX10cYDAYNh8PpUKlU2OPHj2vOnDkju3v37t0bGxsyqampT+fm5tZPnjwZQKfT +xsbGxWam5vF6enpBDwerzU5Odmvqqo6XlNTQzx37hylpKREWUdHhxwVFTV27do1opycnNjT09Mg Nze3mUKhED58+DAQEhJi0djYOHXr1i3Mly9f6jEYjJqNjY2zp6dn4/fv36WRSKSqhobGtpKSEnF1 dfUtDAY7OT8/T+fxeHo7duyAXb9+fTo3N1fGwcGhTEZGRhYGg/HOnz9vi0KhaN7e3rM5OTkK+vr6 HtevX/9+//79K+/evbvK4/H4ioqKKG9vb/+YmJjfly5dstm3bx/K19e36/nz508/fPjwLjc3t/L3 799vuFzuy+Hh4T/Xr193fvr0qYKBgQGuvr5+/NChQ8vnzp1T0NLSWhGJRNz19XVcbW2tho6Ozpfk 5OS/q6qq0m1sbKwXFxc/6ejo7LO2tqa+fPlSfXt7e+bKlSvmfD4fUVVVxadSqX8eP35M/fTpUxEA AEBVVVVEeHi4Vm9vrwIMBoNMT0/3ysvLb0KhUHcUCiWWk5Pby+Px7sFgsOOBgYEVGhoaW//8888h KBSqOzw8HD01NaVmbm5uqKys7BEcHOxrbGzs4unpCUxNTa2MjIwIXVxcjJqamqCNjY3Kjx496rK1 tb0UFRX1LDU1VZnD4bB4PN4ij8dTHx0dnQ4ODr4lFouB9vb2Aj09PXkZGZlgsVi8WF9ff3lkZAR/ 6tSpZyKRqO/Nmzdvb9++7bdnz56ypKQkaxqNhoDD4WJZWVkiAACAjIyMcHl5mamlpRX6H+W4+Ndf f73w8vLSPXjwoBGDwVg7fPjwgq2t7aS8vPyEtrb27r///hvQ1dUdxuPx2o8ePbIBS0tLS/P5/E4u l9tHp9NzV1dXKWg0Wt3Y2Dh5dnYWg8FgpBgMhiyXy4WMj49/v3Tp0oXW1tbys2fPxsHhcL2MjIzG 2NhYMYvFYqqqqkJu3LhRWF1dPWBpadlJIpGeKSkp4V1dXZ8fP348CIfDeQmFQoXKysqnbm5uSRUV FY9+/PhxIzg4eOHcuXNrdDp93sTERMjlcsfKy8svzM3NZZuamgLt7e3TFy9eZEChUEBLS0t9z549 daqqqpyGhgbHW7du7d3e3va4ePHiV5FIpLK4uHifw+H0LSwsbG9vb+8YHR3lXr58eby9vX0+MzNz 8+LFi0OnT58GGxkZfUhLS8ttbW1tAQCA7Orq+jw0NLRCVlaWeePGjUQejwficDiLQqFwFQwGS+Bw +M6bN29WQaFQiY+PT5G2tjZmfHw8U1FRkX/o0KESLBYrPTU1JRsYGKjU1tbGq66ulhIIBIL5+fks BAIxBwKBkOvr6zl9fX3LHh4ehn5+fr4RERG/QCCQBIfD8dPT0xNoNFq/SCQa1NTU/CEQCGiampqu FAplUCKRgGpqaojr6+uzFArFS0VFBRETE1O9vLwMtbGx0a6vr1+dmJhAuLq63ltdXf1TXFyMFYvF vL6+PlUwGMwgEAh8Ozs7pV27drEpFMqx6upq1Y2NDTgAAICzs/NKZmbmruHhYdb58+d5tra2wcPD w/z/Hp+kLywsWDIYDM6TJ0/8iUQiqrKycrympsbX1NT0JhgMRqSnp9s9f/68QEFBQZfNZsPs7e0D Y2JiqhISEgzk5eXlkpKStp8/f/70woULiRKJpP3QoUP4uLg4/7KyMgafz3eLjo6W2traghIIhPd/ /vxpt7e33x4dHUUVFRVpmpmZ6fb399Pk5eVZeXl5Hl5eXj+Ki4tJKysr9bKysvt1dXVZ29vb0lJS UlQikagWHh4+m5KS0iUUCgUEAgEbFRWlc+HChf3/obA7lZSUsFwud0VOTi7a2to6WSQSeSgpKekg EAg9AAAAMBi818jIqPrjx4+OKSkpPlwud+s/JkLKz88v5tOnTxMAAIj5fH60rq4u6+rVq9q3bt3y GBkZIcbGxkrl5ORUenl5FTOZTBiJROrq6OiwCAsLw8nLyyspKyur8ng81N69e09xuVyav79/NovF gpJIpI7Z2dnMjY2Nn25ubp/8/PwcPn36FKKurj45MDCw5uPj8+b69es6bW1toK2trbbq6mq6mpqa WVlZWcHevXsp3d3dpRsbGzcBABCDQCAgNDRU48iRIx7379+v2bVr1zAajV7+66+/6MePH7+yf/9+ 5d+/f8s1NDSIk5KSNgoLC3+BhEJhHwgEIrLZ7IGrV6/+4PP5sJSUFL2mpqZNR0dH4pMnTyacnJw2 NzY2QIcOHfqLy+VuyMnJGX369Omjo6MjncViQeXk5BSHhoYo6+vrOCwWO2htbR0jJyfn1t/f/8DY 2DhYKBRSUlNTkyIiIpJycnLG1tbWGLdv3zZ5/vz5uLm5Oc7V1fX0vn37dj948CBaW1vboK+vr0FR URFGIBBM+Hw+DYlEWlhbWz+5dOmSfGdn52ZOTo6al5fX/MOHDy2VlJT2j4yM3Ll165bK27dvNUdH R6t///49b2dnp/9fqWajrq6u+927d5Lfv38XUiiUJ//88w9ITU2tIjg4OEVPTw83OjrKKigoyLx4 8WL+f/3vytXV1bmkpCTQ27dv3YeHhxtMTEwihELhZzAYrPPixYuvERERxvLy8oYzMzOVa2trm1gs djM7O1vz2rVrJKFQOPn48eOayspKBwwGw7l7965TR0fHYlhYGLqsrIwLBoM5w8PDAI1GQ/X19U00 NTXtv3//foq7u7t+f3//nwMHDnD6+/ulHRwcpBYWFtxCQkJWMzIysMrKylAWi0UvKioaUFRUhEVE RGSKRKIFAACAgoKCd8+ePUMQicQ1Nzc3SxaLJX7w4IEpGAwWvXnz5qFQKPTCYDCiiYkJztmzZ+MO Hz78XFFRUeTu7i6iUqnwmzdvAkQicainpycXAACxn59fsoqKyqi1tfVmVVWVan5+ftba2trvxsbG qsXFRWJsbGyMi4uLT319fd3KysqDjY0NkYaGhh6HwwH+/PkzgMVikQgEArq1tcV0c3M7NjU1VbW1 tQVVVFSUJRAIMggEwjkuLi7jyZMn+4hEYnVnZ+cKEolcVlRUTBYKhdNTU1PtioqKOJFIBJqZmSkw MjLas7S0BMvPz2+fn5/HXLp0SSIUClnKysr+Z8+e/WxpaakQFRUV5OzsnHjv3j27xcVFpRcvXgw/ e/aMu3v37r3Xr19fuHfvnpJEIgEtLy97X7t27e6pU6eQcnJyaAaDsZmQkMCVl5cH8/l8eVtbW1pC QgJpbm7OZXNzs7Crq4vHYDB4fD4fAQAAYG1trbeyssJ++fIlNTEx0VxJSYlPp9MzS0pKlH78+KHO 4/FGmExm8L59+5itra3Q9PR0vqKiIh+FQuFWV1epAoEA3tLSsjIwMED49esXvK+vL5ZCoTxRU1M7 v729/YFOp1OkpaXV6uvru/Pz8w0OHz487O/vH9Hc3DxJJpOhZ8+e/fb69Wu/yMjICiMjI9zPnz+V dXV1RU+fPiXv3bv3J4vFCoyMjKQ0NjZusVgszPT09PTg4KBPXV3dm56eHpmzZ8/GRUREfC4pKXEC bW9vV6BQKC+xWLzs7+//PDk5WTA1NSW1traGdHFxGUhNTWUSiUS+i4sLob6+fu3Jkycv6XR6c1FR 0VcbGxttAwOD+93d3a9ramo2QkJCtDIyMgr19PTgtra23mZmZsLt7W17EAgkc//+/UQbGxstHA7X ikAgDsBgMKScnJxwdHR02dXV9bSZmdkJJpPpSaVS8UeOHLn46NGjJ9HR0dNXr14V0Gi0GSUlJezz 58/HpKSkSObm5jQQCLTt7+//F4fDGVVSUkr4LytNxcXFPRkaGhLu2rWLHx8fj4RAILJbW1sqcnJy h3p7ewvPnj07QSAQENnZ2TY/f/5stLKycjUzM8MGBgZefPfuXXZzc3ONqqoqp7GxkRkdHR3K5/MV wWAwDgAAMAAAwNOnT6+am5sLdXV1iQoKCh5///13JgAAwPv37xc7OzstWlpaZHfs2KEqKysrrKio GJubmyuRlZX1cXR0NIqNjS18//69z6NHj6rv379/XSKRAEwmcwMMBgNtbW3tOjo6g11dXTwcDjeq paWlTCAQ0ENDQ4q6urq78vPzs+FwODgiIuLg4ODg0sePH397e3vvcXV1tXjx4kVLe3v72K1btzCa mpohBw8eTASBQNorKyvmN2/erKiurlbX0NAYPHbsWDGTyazatWvXgImJybhQKNSOi4vrBoFAxK6u rmkVFRVZe3t7r6CgoKHS0lJDCAQiAYPBWvfu3bvx8+dPdwaDoVpVVSV/9erV7r6+voHV1VX+yMjI ru3t7XVzc3NqRUUFjkgkehQWFo4ikUhReHi4gUQi4WdkZDweHx+XuXbtmicAAICcnJwhGAyWwGAw fYFAsLy9vZ2DxWL9AABYg8PhvmKxeLqysrLD2dnZhk6nj9+8eXM5ISGh7+jRo6Tr16+3dXZ2Ijw8 PHSlpKR0u7u7lzgcznRISIgVBoPxKSwstPPy8nqJx+N3U6nU8n///Xfg5cuX0h8/foTp6Oiwnz59 ClpcXJTk5OSoh4eHrwcHBw84OjqS1NXVnbq6utIfPnxoU1BQEGNnZ3dVRUWFKJFItmg0mjg9PV2l vLz8B41G4169ejW8q6urwc/P7xyDwRi5dOlS2/LysqahoSHlxo0b+9BoNAmNRi/V19dP/vz5k3Hq 1ClpGAw2AIVCdeBwOP73798NVlZWhlAoFKGgoLD727dv57W0tGxYLBYUAoHwNjY22n19fe///Pnz k5yc3KS5ufleMpk8HxcXtxYZGam+urqKdnNzg9fU1Azu379fzsTEpDcwMFADBoPVmpmZBSKRyAk0 Gi1ubW2dio2NtbCxsaEdOHBgXFdXdz8SiczGYDBOO3fudGxra8OAv3379jksLCxgaWnp5+LiIlJf X38JDofTNDU1Uenp6Wa+vr4UHo8n9vT0/N/jx49L5ubm3nl6epZHRER8pVAoqMzMzEwNDY3txMRE fwUFBYX/evR6c3NzFYuLixI2mz34zz//vGxpaZmQkpISbm1t7VxbW1uAQqFDbDZ7e2hoaMbd3T04 MjJyHYFAsBYXFysvXbrkHxcXN4JCoXgAAEzy+XwxGo2mqaqqwh0cHKgcDkeeTCbjeTxenZycnM7A wMDF/zLQ9Pz8vGxsbCw1MDBQm8lkSkpKSgAmkwlNS0t7ZWZmFhwTE6OSl5fn5ejo2KelpYVpbW1t qKys7CYSiScgEAi0vb2dgUKhQMPDw3JCoVCfxWLl/99phsfjdZ89e/Y8mUy2/PnzJ2J9ff1ZQUEB 7/Tp0355eXkmy8vLCuXl5bylpSX+/Px8p4eHhyYEAgm7ePGiFg6HU0hNTbXIz89vUlNTs25tbc0D gUBAb2/vz+np6Z9isRgEBoPJTCZzOjo6eoVMJstBIBAAi8VKHThwoDgqKuqYiYmJ2fT0dMPHjx9/ JycnO6DR6Mn6+vqXHR0dwKFDh/g+Pj4zMBhM4ufnh/3169f+L1++4BwdHePPnTundOzYsTwHB4dU KSkpj2/fvhkePXpUbnl5GUyhUOhv377lAACgSiAQeBsbG82JiYn87OzsKQAAAH9//x+BgYEnc3Jy 1p8+fTqMRCJ/7du3jycrKzs1ODjoQKPREIuLi8S7d+9a7Nix4/j8/Pzv4OBg/Xv37qFqa2vHRCIR vK+vz3zXrl20tLS0TjqdLiwoKHgDAoEAZ2fnUiQSaQKFQr0gEAhvfX39/6Qxqt7e3hEjIyOVDAYD Mj4+ThsfH9/569cv1KlTp/aTSCRTY2NjEplM1tna2uKIRKJ1LpcLnpqaStu3b18yCoWSAQAAwOFw 0ltbWxRfX9/Z8vLyrqmpKXRSUpLW58+fnbe3t8GKioodFAqFwefzt2dnZ6ufPn1q9vnzZyMej1ej oKCwIS8vP6+qqgo+ePDgVnp6eouUlNTyixcv3iorK5vv2bPn7N27dz9SKJQmc3NzSH5+PuL27ds2 SUlJJTweb47NZhNevXo1/+jRI/2rV6+u43A49Y2NDQKfzx/S19dX7uvry33w4MGD2traq1AoVC07 O5ve2Ng419TURNXW1iYFBASEi8ViYGpqCn/9+vWv79696w0MDAQUFRXD8/Pzq/r7+8ekpaWFX79+ pd+5c8dg37591pmZmV7a2tp+MjIygrCwMK3R0VHPtLQ0bGZm5u7u7m6GkZGRHZvN3s9msxnt7e0d NBqtFqylpUXKz8+/bm9vD9/e3tb68OHDMo1Gm7x8+TK0ra2NuLm5acPn88EFBQXDfX19T3k8HhiB QCwPDw8/aWhoGPXw8IBev359+s+fP78ZDMYSgUDARkZGjjo4OLiCwWBpJBKp6ObmZvDnz5/9gYGB UE1NTZXp6WkCBAIRv3v37uWJEyfCampqCo8cOSL377//Dru5uU1PTEwwjh8/PvD69WtvAACAnTt3 qi8uLjp2dHRoqqiomIeEhEijUCgDeXn543A4fJ+cnJzr5ubmIx6PN52cnCyOj49Xn5mZkbx//359 7969Hpubm4ulpaUCsVi8Ym5uroZEIh3OnDmzZWlpefXu3bu42traeR0dnfF9+/bVa2pqAmg0WtTc 3IxAoVDFVlZWXf/pz1/b2toWTU1N/VBSUtL19/enysnJXfjw4cMaBoMRHzt2bN3JyWnA0NAQAgAA IBAIzCYnJ4etrKzWkUjkend3dyOdTucfPHjQW0NDg1dfX49PSEh4JxaLhSAQCPkfUHP17t27+4RC 4fmQkBCrw4cPO6uqqqpXV1e/mp+fH7WwsJCw2eyGv/76y3tkZGTT3t7e5ffv35KNjY3fLi4uuMrK Sm1NTc1iS0tL9+Tk5EJFRUU3GAxmQSAQYikUSkpzc/MFFApV5+HhseLu7u7c398/t3fv3rd2dnYA k8mE6enp7ftPTXbhzZs3yq2trcNKSkrr6enpm/fu3dOrqqoSJScnE9BoNM3MzCxwfHwcY21tvT49 PU1pamoSX758udrGxuY4kUgUAgAAGhkZ6aioqBgOCQlp9Pb2du/q6sI2NDRwDh06dFUkEoFqa2sd CwsLr+NwOHcIBOKRlpZmOT09/RAMBmMBAAD09fUJlZWVDz58+IApKSkpvHjxIru/v5936NCh40Kh EA0CgeCZmZmdhw4digkPD59RV1d3GRoamnJ0dPzJ5/NbUSiUCgAAwMGDB0eJRCJpcHCwsa6ubujW rVtx7e3tNDgcDnr9+nXAp0+fqGw2G/v69Wvx6upqr0AggPX391vDYDDs5OSknLa29sDff/+NEwqF 9mfPnn2fk5PT/OTJk3f79u3jJicnS8Ri8QgajXaanJzcTkpKskUgEOKNjY3SV69eqfj4+IxcuXKF WFtbOwsGgx/39/dPj4yMcPl8vntSUtL1V69e9RkZGfFgMJiwtLSUMDo6yvHw8OAVFRWl+/v779m/ f38kGAw2mJ2dxRkYGCQGBwenUKlUvLKy8l/S0tIwgUAgbG1thQwODnb9+vUrhEgkVmOx2EtMJrPv 9evXfSgUivHkyZPk06dPH+BwOPMWFhbHoVCoA5vNhojFYhCIQCAc+PLli//KykqXtrY2y8DAwC0o KKitrKwsbnFxseDBgwfgM2fOyMrJyREsLCx4/f39zJGREZ6BgYG+WCzeXFpaasvIyJjY2toy9fDw mHv79u32vXv3aFgs1g0AAKCxsZHi5+fnWVFRQdXR0RGTSCQjPB5P8/X1nW5vbw8CgUDS5eXljwUC AdrExES9sLCw9PXr19qjo6PHl5aWnqemphq/efNG38TE5FNSUpJjbm7u1KNHj+aHh4d5MjIy8qam prHd3d15i4uLi5aWllaOjo4IEonEyM3N3ZCRkdmlq6ubODw8fPzTp08/3d3d99y8eZMRHh7eGxcX F/TmzZuSW7duWZaWlrbNzMwoyMjIENvb21ufPHni2dLScuLr169HQkNDP6BQqNaxsbFpOp0+YGxs fE0sFi9cv3692dvbG5+YmDhUXV0dCoVCAQAAgM3NzQ5bW1tWR0eH2vT09OTevXu1hoaGBENDQxxz c/Otnp4eoZmZmVNISEjtw4cPZ6Kjo/X19fVFly5d4uzdu1dqYmLiwvr6ev6TJ09+xcfH96Snp9vc uHEjk8Ph1CYmJv7y9fVFt7a2rr99+1a9qalJMz09vfLgwYNqXC5X0tbWpqynp4eora0dd3JyWvT2 9vabnJwcNDAw2A2FQi3Kysp8nZycgtPS0gTFxcU9IBBIHBwcDKurq9vOzc31/fz588zExER9REQE MT4+Xunff/+18fPzuwAGg41v3Ljh6OzsvNrS0iIHg8Gm+Xy+cXBwsA8AAMDq6mrOxsYG6evXrzW3 bt1K5fP5W1NTU6VisVhiYmJyemlpqQgEApUzmUyinp7eOTU1tZ6RkREFGAwmAQBA/PDhw8KAgADr paUlAAKBjHZ3d5OzsrIw8fHxnK9fv9ZdvHhRd2FhodbCwsJeX19/PwQCQQEAIHfr1q0jfn5+9j09 Pd3y8vIgMzMzbRUVlb/AYDBKIpFwZ2ZmyjAYDF5OTs6+uLi4/cWLF6CysjIZaWlpmYWFhdH8/Pyy 3t5eBQsLC3ZwcHBQX1/f+uTkZO379++NwsLCNsvLy1W+ffsmjI6OprDZbMDGxgYUHx9vcuPGjV8r KytaysrK1Wg0WsPHx0fF0tLyydDQUKampianr6+vycbG5haPx5uGw+Gqo6Ojqe/fv3eKjY2lfPz4 sUJKSspFIBBICgoKxslksuPU1NT2+/fvxd7e3moyMjKolpYWbGRkZGtBQcFfu3btau7r61N+8+ZN T0FBAfz8+fPA8vIyKzc3d6OhocEhMDBwRUVFBcTn8yGJiYnqWCz2PQKBmOTxeITY2FjLu3fvgkgk ErWtrU17c3NzY25uTrmxsZF56tQpxMOHD8fA/f39Hu/fvx83MzMz7+3tlQkJCem2t7cf0dDQaJOX l99x5MgRBQKBwCcQCA6lpaWVSCQSqaysLA+FQiV4PF6EQCC0JyYmzCAQCKi2tpbs4uIyNTc3t29o aEiaTCbvyszM9NbQ0DgUHBy8EBsbq6SgoICUkpISMxgM1Tdv3ny+efPm32w2G8rn8/kqKipIQ0ND ZlNT066urq5ONpvNUFNTm66rq1sfGBgIh0AgEm1t7S0oFBq4a9euEg6HAwYAYH1sbGxmYmICikKh MPb29qM8Hg9VWlqqoquru11XVxc4NTW1pqWlJf3ly5exc+fOgXk8nkBPT68vLy9PY8eOHXMYDCbR zMwskclkIpSVlT3T0tKY0dHRsb6+vlbKysoPxWIxxs7ObkpFRcWDxWIVXbx4sfHq1atdzs7OVh4e HnJwOJzEYrE6qFRq0cLCAtLR0bHh8uXLuREREVyBQDBpZ2e3RiQS4QAA7NTR0SH09vY2Xr9+vYpE IjlhsVhmZ2dnHQAAwI8fPwTb29sDVCoVQSaT0Xg8/uuJEydsampqInJycj7Hx8fLy8vLy1CpVOTL ly8ZJSUlNf+xEOK2tjb5CxcuRI2NjfFSU1Nv7N27983q6urY8vLyNhgMRnK53PzOzs7ApaUlxLVr 17xu3LihlJKSoqKgoIBfXFy0zMjIaJCRkaHExsYeunHjBunly5ei0dHRP5mZmYGvXr3ysre3B4yN jRX5fP6SrKwswGQyhY2NjVXNzc0VPB4PKxKJOu7cuZMKBoOB9fX1zpWVFSGTyYTOzs6WNjc3b1pa WtpFR0cvp6en56+trSmEhYWNZmVlFTMYjDYtLa0ZEonEuHTp0oapqamckpJSR1NTk5DL5fY8ePAA vLm5yTAxMdEjkUiaEomEIRaLOWKxGECj0UJ7e3v7/fv3x5qamjqoqKgE29jY3CEQCNW2trYp6urq AVVVVV82Njbmg4ODrefn5+fGxsbauFwu2sjIaEhRUdHjxYsXsseOHQsSiUTCR48eSdzc3OycnZ2F hoaGmwcPHhT9/PmTB4PBtHA4HOvbt2/SfX19v4OCgjRTU1P1L1y4kKiiooKTlpaea2lpcZmenu53 dXWtlpWVNQcAgNHf31+TnJxc//HjR3VfX9+53bt3YxcXF4MJBAILAADAyMjI6cqVK8Ti4mKVjx8/ 1vP5fJnGxka0g4NDUX19PXn//v0lZ8+eXY2IiJjNzs6WDQsLQ6LR6AUikYj9+vWr6crKyp/u7m6E kZHRupqaGjI7O7s5JCRks7e31/zEiRPb/f39VRKJhNPU1OQvKyuricVi5aampv48fPjQz8/PTzMy MtIHTKFQkDo6OvxTp07R7ezsVIuLi09VV1cbUKlUCykpKXUAADZ0dHRm+/v7s0xNTa9IJBIQiUSS R6FQEKFQCJKRkcF9//7dEIVCzfb19en9/Pnzop+fn85/i7Ha169fLwMAII6Pj+9vaWkZ43K53dXV 1f0tLS1zaWlpkr6+vqXh4WGerq7uWklJycDo6ChOSkpKZGBgoJaSkrJzdHSUAIfD5y0sLLpv3brF VFNTs5dIJAAAAEBxcTHZwsJi6c+fPzobGxsEAoEQbv7/aDr3f6b/94+/drTNNrY5jDmb8ymnnA85 5VA5RCKVJB30dihKfHSidKJSIh2UilRICjmFHBOS83kOM+eNzcaO31/6/gfP2/OH5/O6Xdf9cb+M jVWio6Nn9u/fr9HZ2YlRVFS0U1BQwJuYmOw8duwYikajya6srMDn5ua0wsPDO2g02sLg4OBBgUCw 3tfX193f3w8TExMTPXv2LDMvL++FjIwMT0dHp05aWlpST0+v++vXrxVpaWmLaNRigS8AACAASURB VDT6v8rKyvNUKpX68ePHdBsbG7SSktJNGo3283//+58clUodJBAI9Ddv3ogfPHiwRygUbo2MjFRT qdTZr1+/jmloaBwjk8mrhYWFdi9evFB48uSJwurqKqeysrINCoWOHz169NTbt28z19fXN5hMpiWT ydT8+PEjWEJCYurixYu827dvYzw9PcnGxsayenp6/zMyMqI/f/48618VkvcP1iEaGhoqCYVCAIFA uDKZTLi5ublKZ2fn5/LycmZERITJvn37DOfm5sirq6vEkpIS2StXrvQXFRVZKikpeXt4eOxTU1Mj Wltbm/79+5c3ODgor6OjQ//w4QMxIyODd/r0aVZOTk5zdnZ2W11dnRwAAHI8Hm9ze3sb1NnZOaut rQ3U1dU1iYuLz168eLEKCoUKJycnBQMDAxWXLl2imZmZEfPy8ubhcLgoMzNzOTEx8efNmzfpHR0d 8mJiYpqNjY06NTU1FnJychgqlSpZWlra8fPnzxcAAEiAwWB0XFzcl5WVFQ6TyeRWVlYOFhQUPKiq qnJTVFTsaG9vvwgAQL2vr2+AjIyMNovFmh4eHjbR19cPaG9vL1NQUJil0+nf2Gy2EgAAWzAYbNTB wWFYV1c3DIfDdW9vb6u9f/9+5eHDh3xPT8/NO3fu7NXV1VXa3NzcXlpaQoDBYCoWi/2LwWDgubm5 O0gkks/29rbxgQMHPNXV1b1evnz5XF5e3u3GjRuHg4ODFRAIBKqjo4MeHx+/JicnpyAlJaWQlZVl qK2tTeTz+fi4uLhINBrNDgwMrCMQCAQUCjUbHh7ea21tvXb+/PkNS0vLVTQaPT48PIz99OkTeGho CDs3N7czPj4eyMnJYXO53K1Lly7t+P79+/mBgQF4Xl4e8PTp05OBgYF/dXR0Apqamiizs7Myp06d ivX19S3Lycnhp6amNoNlZGRofn5+iEOHDk1YWVlpAgDQl5ubq7G9vb0wMzPTERwcTHV3d2/T19d3 FwqFABKJdFNRUalsbm6uXVxcHGKz2Rh9ff2N3bt3s5OSkl7euHFj1cbGJiMqKmokODjYHACAkcLC wrxdu3btw2KxgTt37gQPDg7qk8nkPZ6engNzc3M+SUlJ5/T19S/29/eLm5mZmUChUDyXywXl5eXp REREMDY2NqDR0dGr+vr6yGPHjmFCQkIm9+7dG3316lWFrq4u7fz8fH0lJSWDnz9/5mIwGPyuXbsk pKWldwiFwiZnZ+dnTk5OQx4eHjVXrlxpzsnJET548MCvqamJTiKRrEJCQiySk5P3MRiMYR8fnwPl 5eWlGAzGpKurK+/Tp08xw8PDiMzMTJSysvK6t7f3yu7du8NPnDhB6unpGVdVVaUHBQWNXb161cDc 3Jz95MmTl319fdvXr1/vGhkZOctgMAj37t1jh4WF+eTk5LQqKiqqKSgoaKJQKIGYmJjc7OwsoKmp OW9tbX0Ij8ezzc3Nj/j4+DgpKirOQCAQuLq6uqScnFzbnz9/puvq6mqUlJSYSCRSUVJSkvTkyZNR NBotam1tRf5ThO3+/Pnzr5SUFMXU1NTZ1tbWDwwGY7Cjo2Oay+UuDg4Oxvv6+lLpdLpRbW1td25u bsafP38k0tLSRvr7+ye+ffs2amFhQTlx4gTIy8srKz09/S6Xy2XJysraNzU1de3bt8+fRCLpGBgY OEOhULSkpCRNS0urPzExUf7KlSuh6urqskKhcJRCoXQikUjQjh07lG7evNl36NAh58nJyQljY2Mv W1vbHTdv3rT6/PnzRn19/err16/7JSQkuO7u7nQtLS2knp4eMzQ0VAkEAq1CoVARm80GIRAISk9P zyYAAICTkxNURUWFNTExUenj4/OARqM9trKyGn716tWDpaUlBIVCwV27dm0gOTl5R3x8/AsQCKTz 8eNH0IcPHx5VVFTUAQCgMDw8/EpVVVXx1q1b5q9evQL6+vowDx8+XOVwOPTg4GBmUFBQkaKioo+N jc3a48ePKUZGRlNBQUEnJCQkJL28vMZUVFTC6HQ698uXL6yzZ89Wx8fHm588eXIEi8XyyWRyPgwG EzAYjILw8PC7ioqKOxcWFgp0dXWJenp6Bnv37p2XkpLiDg4ObgUEBKhkZ2f/7e7ubuzs7KzOzMzs +dfv0mIymXQAAAiRkZFUNpsN3djYYOno6MzR6XSlzc1N6YKCAnEdHR2J/Pz8GTwev/bmzRsHWVlZ iJ6e3oqRkdGQvr6+C4PBuDwwMNBVXl6et76+3rZnzx4PLS0t1j+XgQgCgaykpaVpgTIzM5NlZWU5 Li4ukLW1NSKZTI6Znp4+LC4uvo/NZm9MTU2hh4eHS1dXV80SEhLcAQAgDgwM5GIwGP7Pnz+l0Gj0 vKOjoxUAAOz8/Pzvk5OTGpcuXTL4/PnzQEhIiD6Xy+XBYDC4vr5+w/j4+GEYDKZlZGSUMT8/rx0U FDShoaGx8u+CmFJSUm5Hjx5NMzc3lzYwMFB4+PAhZ8eOHVJLS0tCEonU/fv3b87a2prUwMAAeG1t 7bilpeXz58+fQ4aHh7EcDkfcyMhIRlJSkk+n05eIRCI5Ojq6vru7m9DY2KhqZWWl+O3bN35KSsrS mTNnnmVkZHh//vw5zs7OLkEoFALh4eFLe/futcXj8R5cLnfp58+fg66urscHBwdfw+HwzdXVVYGO jo6Subk5OywsbKG+vn6+oqLihJ+f35XR0VGv3t5ei9DQ0E8rKyu8nJyczqioKJtv375JRURELJuY mNA6Ojqm1NXVia9fv54nk8mit2/fxiCRSCGLxQJTKJTV0tLSPHd3dzNDQ0OkpKRkMgAA7MnJySdr a2swJpPZU1dXB+3s7NyKiIggd3d3S4PB4HYTExOCtbX1/r6+vkIsFovKysqaPHDgwH4+n9+oqqpq RaFQxhITE/sKCwtNUSiUdEdHx1ZDQ4NQSUmpoqury7a0tDSFTqd/53K5I7dv3/587tw5/+rq6i13 d/fvDAYjfMeOHZIfP35c8PT03CkSiVZKS0t/29jYLMTHx2MAAOjNy8s7+/bt26HQ0FAdLBbLsbKy elBcXHwoLCyMl5+fTxYTE0OBQCA0CAQCXr58WdXQ0IDR0tISZWZmMv81PqFsNhsiLy+/DQAAUFBQ kNPe3u715MkTfSQSiaPRaNnq6uoP79+//8DCwkLV2NgYGB8fr5+envaCQqFCBwcHWF9f3+uMjIwd hoaGYAAAAAgEohkeHo729PR8YmpqGnz//n0HJyen9wAAAJaWltNXrlzxtLOzq7h06ZI0iUSSaGtr o0VFRZ1AIBCw5ubmD1ZWVm5iYmI7AQAAAgMDP8TFxdFramoWwsPDjeBwuOj169ddP3780Ozr66Mu LS3tbG9v/7t371753t5eBRQKJdzc3OwNDAzciImJ2XJ1dY3c3NwsqaqqmrWxsRnu6OgQlZeXy8jL y2v6+PhM9/b2kmEw2Py/c0M/fvyoGRQU9GdoaIj3+fNnpT9//lxcW1tLDg0NpVIoFPWWlhaeQCDw RKPRyt++fWs6derUfEVFBUxfX98VBoOJioqKejkcTv3GxoZhZGSk67/J2Po/EvJ9V1eXclJS0uGJ iYmqCxcujB8/frwbLCcnt6aiorIiEon0VlZW5lZXV891dnZKS0lJBSgpKR1PT0/PzcrKwl68eNFd IBAgpqen23R0dPzl5OR2zc7ObtnZ2RnxeDxmWlpauUAgACYnJ+dDQkL6PD09JU+ePFnDYrEgIpFo Oz8/XxYGg2n5+fm93bNnj1BMTGy5qKgIdufOHcz379/LiERiIggEwqLR6O2oqKiof6jj5tTU1J9H jx5p9Pb2buHxeCVPT092UlKSqrW19fOwsDC14eFhLIvFQs7OziIDAgJYX758YROJRBcEAiEUiUTQ kpISTEhIyPebN29+MDIyMhITE2sDAABgMpmzvb29FmVlZXsuXLggvbW1xd/Y2CCz2exBMBgspFKp tZOTk5lMJvNrQkKCUE5Obruvr288NTV1TE1NjSkhIaERFBSUVlZWVtjX17fT39//VWxsLNXV1VVq ampKsGvXLhCfz9cPCwv7df78+X4DA4Ndq6urqKGhoZj//e9/RggEQjg/P7/k6ura5OXltU4mk728 vb1VkEikMgAA7NXV1Uw1NbU4Op2+TSaTVRgMBk5aWhr9+PFj0cePH0dHRkaIjo6OWt3d3e/n5uYs jh49aqmqqupgb28Pc3JyckGhULCioiKp4uLiUCQSaTA0NMQMDg4+uX//fmkPD4/dYWFhCzIyMkVo NFpYVVW1EBER4S8nJ6eqrKy8eenSJTMoFCr8+vXrrKGhoWBkZORGRETEL2tr61UjIyMFBQWFIhMT E6Pl5eWloKAg3Y6Ojqnl5WU2iURiAACw0dfXt2Jvb5+bnp5efvPmzezHjx8Xw2AwelBQ0N/Lly+H zc3NSc/OzmJMTU3NTpw40WpnZ4cgkUgnPT09j87Pz+P9/PxW0Gi0DQaDER8cHKwyNjYWQiAQ0dbW FltKSsrSxsZmNSEhAfzt2zeugYHBLkdHRwqBQFA+ffo0yMfHZwaHw5ETEhI0bGxsOGw2e7qhocFu fX1dSlVVFfH58+equrq6PdLS0pJ2dnbNdXV1cDQabQAGgwn29vYnHz9+/LywsPBRXV1dYkZGBqW7 uxvn7e0tDQaDxW7fvt1KoVD0L1261K+trS0/PDyMwOFwhMrKSiyfz9/s7Oxsnp6epoPBYODcuXOo hISE42w2m2tkZKTf1dVF3tjY8M7JyTkVHx/PNjY2PsJgMMTa29sV8/PzDc+cOUO7d+8ed9euXbay srJbRkZGUAAA4BEREcgTJ06MNDU1IWZnZ5GXL1/u7O3tfWpiYiJXX1+vpaqqqg2DwZSdnZ1zDQwM BIGBgQd+//4tOTAw8B4CgegLBAImHA632tzchEIgEODBgwc5+fn5YwsLCysMBkMDVFZW5vfhwwd1 Y2PjZTgc3jMzMxM1PT3dwGQykY8ePTLCYrHbPB6PKCcnZyAUCsWGh4eLNTQ02AKBwJrD4dChUGgj EonU+fXrlyA3N/dXXV2d93///ffc2NjYmEqlovbu3WszMTHR9+TJk4ns7GyH4ODgwvv371v19PRI GhgYrCspKfnAYDDR0tJS19DQ0IJQKARcXFzOLywslMDhcCiVSq2Ul5eHCQQC1efPn2+BQCDQ/Py8 wNzcHDQ/Py/68+cPH4FAbBKJRGJ+fj6ezWarVlZW/rCwsDizsbExg8ViFX18fO4XFBSYxcXFdT95 8iTmn1TjGggEAsfHx8uYmJgwSCRSelpaWqqLi8uKvLz87ra2tk9LS0vDOBxOg81ms4VCoYyzs7PW w4cPxc+fP/+XyWSui4uLt1dXV18QExObPnr06NWTJ09mJyUlQbe3t0EaGhrhra2tcaurq1saGhqb zs7OiPb2dsbk5KTaxsYGKzMzUyUkJISdkJCA9vHxYVtaWnb6+fkdw2Awu4RCIf/AgQOZAQEBs1Ao VHfPnj3U9fX1vpCQEM8PHz6wt7e3NXx8fApkZGQYPT09ljMzMzf/4a5FBAKBQaPRpKFQqAgCgSCj o6OHr1+/rszlcvkGBgZe/+bs6FevXmULBAIgNDTUjMViDYHBYKCrqys7IiLiMBqNXlVRUREbHx9f 6ejo8FtfX39QUlJCwGKxI0KhUHZra4uyf//+ywQCQZfBYPy5du3aj3PnzjnJy8vjf/78+RGPxzep qak9sLGxqfP09ISmpKQEtbW1/c/Ozq7wH7C1gcfjr+7bt8+gqakJDoVCRerq6v2VlZWRWlpavzMz M1csLCzU19bWatlstrK+vr6vubn5sydPnqxraWkpcrlcrrGx8fbKyop3bm7uVQMDA6Kbm9suBweH 7OLi4pqtra0RgUBAp1AoZXp6ehfz8/OjiESi1cLCQpuNjY0hm81eAYPBgJKS0u5/7j1xGAwmBwCA 8P79+0murq47paSkeP39/WOOjo77Nzc3N3bu3MkdGhoi4fH4haqqqlsVFRVmqampmVQq9TWBQMDQ aDS2srKy9alTpy6dP39+x+3bt7vT09PPAwDwqr+/38DFxWXu3bt3M7t379ZBoVDu9+7dK01JSdnR 2dlJNzIyEmtubv6qqal5EgaDiXg8HiQlJeVnd3e3MCkpadDOzu5CRkZGXXBwsPDu3bvwY8eOsZeW ljT7+/sH4uPjk5eXlwvGxsbws7OzfWAwGFlbWzurrq6OPHbsGJNAIET++PHjx+LiIn3v3r2+GAzG mEqlht26dWvLzs6OCCksLBxMT08fio+PN3nz5o0JFosFsFgsRllZeUlPT0/Gzc1NMTIyEti9e3dT aGioOYFAkGMymW0YDCaQy+UK0Gi0Y3x8/CstLS3jN2/eABUVFRgFBYUNEomkBQKB5mg02nRUVNTM tWvX9JBI5Iyvr6/r169f59TV1WHW1tY2Fy9eRM7NzdXIyMhoamhoBJWWlp41MDDAikSiUQcHh+ZH jx6F+Pr6Tl2+fFnx1KlTqoaGhp0VFRVyYWFh3TIyMmwVFZXx2dlZKIPBIGRnZ/Obm5tXvL29WeLi 4mxJSUlXT0/PGx8/fqTz+fw/fn5+1xgMxncIBMI8duyYe35+fntqaqqjvLz837i4uOWpqSk6h8MZ W1paGre0tHRdW1ub2b179x4oFDpZUFBgsHPnTphQKFz99OnTCoFAmH/w4AHm2rVrp01NTfcDAACo qqo2NzQ0TG9vb/Pm5uZ+rK+vb/T39wvu37+/MycnR0ZLS0uJQCAgoVAoEQwGL3A4HN7Xr1+9Xr16 haDRaN0yMjI7JCUlVWk0WrO+vj4kPT1ddPHiRYne3t5OAoGgFxEREdHf3z+qqal5TFVVlY1GoyHN zc0T+fn5/WFhYVAUCjXY0dGxiEAgKIqKikQkEsk2NTXFQqHQGSaTiYNCodWqqqoLWlpaBVgsNk9J SUkHh8NJsNnsLTQaTSosLJx7+/atdHFx8ZaDg8MfKSkpfHx8POTChQthdDq9EYFAmGVnZ/dnZGS8 gUAgc5ubm2tYLBZwcnICLS0tbeHx+MWFhQVWamoqFo1GT379+lXr+/fvcCqVWnL69OnTbDabdv36 9WQ2m70kLy+/lJ+fv7x7924pExOT7/Pz84TNzc1Rb29vaEhIiFJeXt5fcXFxaTMzM8Ls7Gx3eHg4 ydXVlXju3DmZ3bt3Q549e7be2trKg8Fg2KSkpI67d+9SGhsbJZ4+fVq8uroKJRKJ3eLi4pJ///5t ZLFYxvr6+hvW1tY279+/LzIzMwvA4/HKfD5/CwaD8aampgZlZGTshELhsImJieTi4uLM0tJSV2lp qcz29nZDbm7ueFBQ0HxRUVFFQkLCtpSUlJyvr2/k8PBwjYmJiU5oaKjwx48fC0ZGRuZgMJhRW1vL 8vf3d7px48a4o6PjxpkzZ7bS0tKoIpEIrKmpKQeDwUzt7OxCpqamPjQ2NsI6OztNJCQkRFNTUywl JaUjCARCY/fu3Rxvb2+18+fPS2tra48aGBjMbGxscH7+/LmIx+NJXC6XFxgYqLqxsVEMh8ONVVVV 5ZSVlQXKysqahYWFPKFQSLOyslpDo9FG6urqQSwWqyssLGyroaGh1tHR0dzf39/08uXLf8CVlZX/ g0KhS1paWgG2trbz0tLSVC6X2zM7O7vz+vXriFevXjExGIyNsbHxuFAoZIhEIiESiRSAwWDZffv2 DZSWlp60s7OTX1lZ4b17904Vh8Nt//r1i1hYWNgQGxtrUVBQUNXd3f0/FovVvL29XQsAACAvL08w MzOz2djYQDEYjPaamhoMjUbra21tvfPnzx+b1tbWPElJSdXm5maPW7dufX/69Cnp/v37shoaGm8g EAjiwoULfTweD//gwQMZDAZDAAAA8PPzm6msrFxrb28P6O7uRi4uLm4ODw+/qKysTFtfX9f59euX pEgk2uRwOGAOhzMKBoMBX19fRHBw8CKXy7WsqqoaCAoKMuVyuUhnZ2c/Pp9P2blz58FTp04txcXF WXh6erYDAADY2dlhcDicYnt7O727u9uYwWC8rK6uvtXR0XFbX18/FoFAiEQi0RqVSkXV19dT4uPj Q/bt27dlbm6uJxKJ9J88efJcW1vbsre3V7h//37h6OjoezAYTBcTE3OSkJCY0dHR+YxGo7f9/f1b IyIiFsTExKyoVKoyk8lcycvLKzAwMJAVCARTNjY2qLm5OZilpaVYRETESm5u7mMymSxpamqqq66u fprBYOBhMNghMpkcRCAQzCIjIzkEAsGqpqYGiImJQVtYWDyfmZlp/beZJoBAICASEhL+h0AgvCoq KrBVVVWca9euqfT19dkDAEAQExNz0dTUHD958qTK0NBQOYvFYs3Pzw8dPHjw7p8/f7h4PB7c29v7 lEwmaxw9elTb2dnZ9ffv35K9vb1oWVlZheHhYQoAAIOxsbG79PX1N1JSUm6UlZXJHj16lCUuLu5S XV19UlJSUu5///sf1t7efrqkpET62LFjdSkpKUMCgWD93r173aWlpZR/bIne169fl+Fw+E8ajdbw /fv33bdv35bb2NhAq6urs729vREkEkkJgUAIWlpaaFFRUXJ0Ol2FQqHkLS4uKvz48aMGjUarCQQC KAwGE0cgEA1Xrly5HB8f//n3799NHA5ngUKhKNBoNMmrV68G/P37V+vZs2dm0dHRdlgsFuXv7+8s FAqnSCTS9uLi4ioIBBIhkUg+AABbCQkJWwQCAWphYeGUnp5OO3/+PD8lJaX5zJkzq87Ozi5oNPoy BALRjY6OjltdXUV7e3sz0tLSOv78+dNgaGjoOTs7GwcAAFBcXNwXHBw8NjExAduxY4fm8+fPcV5e Xjv7+/sRbDa7LC0tbW15eRmGw+F48/PzzTQa7UNtbe28i4vL9P79++FxcXHGCgoKb7hc7vCPHz8K CwoK0Ddv3lzQ0NAol5GR0dTU1Bzy8fGhgFJTU88mJSU9WlhYKNm/f//rS5cuKTk6OrrV1tbWoNFo ZUlJSZympiYZBoPxNjY2Gn19fSnnzp1befTokX1jY2MCAABAaWlpjJaWFhMEAln39vY2urm5mW1s bEAGBga+uru73xUKhbPPnj0r8PPz89fX1x8cGxtjGxgYsJqamnTBYLCIz+f35+Xlbd+4cSNlcXHx vaysbPjFixffP3v2TG1mZqbM3t6er6KiIlJRUYE5OjpSWSyWvJiYGHTPnj3etbW1DQMDA0w8Hq8M AoFmJSUlEd+/f9/EYrEgd3d344qKit6MjIxbBQUFRw8cOHCBQqH81dPTWxsdHWWgUCgtcXHxJg6H 40EgEGTs7e27ORwO6NatW+yVlRWqqqoqdXNzk0AgEAgpKSlyfn5+/QEBATG7du0qiYiIoM7MzPxM SkrqHBgYCOFwOA54PJ6goqKyxePxfsFgMHs+ny+Ew+H+AAAA7e3tyebm5s5+fn4dAAAAHz58cJ+f n/+qqKgYwmaza9Bo9O4bN24Uubm5EUZHR78cOHDgCgQCYXK5XGxra2uuk5OTP5/PB0GhULBQKMTW 1dX1urq6eohEopWVlZUOd3f3qaamJu2ZmRmGnp7ewcnJyQ///fcfu7S0dJ+dnV1WS0vLSZFIxAOB QDA2m70EgUBAsbGxX3JycpLAYDAKAADgy5cvH/X19ZkoFEqFz+eDFBQU7NTU1KoDAgLWPDw80OLi 4h8ePXok8ezZs4jv37+X7Nu3L6mkpOSmm5sbisViyb1+/XqRz+cLjx8/bjQ6OjpAJpP1Y2Njr+Xm 5nqKi4v7r6ys1OBwOKn6+vq6oqIi3dHRUV5lZaU+CoUy+PLlS5atra19YmLiHIlEmtXW1t4qLi5W O3/+fB+FQtkZEREh+89yS9+9e7c8Ho+XRSKRxPX19RfV1dUvHBwcbs/Pz896eHjII5FIHg6HG7x8 +bKMQCCY0NPTc19aWqquq6v7vrKyEvHo0SNPkUgEOnDgwPvMzEycoqJizP/j3gKB4M+jR49uaWtr 62pra+vIyMgQ4XA4gc/ng4qKitomJib4tra2NGlp6V9kMvnI3Nwcl0ajTWppaRkWFRW1zM/PYz59 +mRcX18/T6VSaTk5ObRnz54duHXrVub/JxPX1tb6Kioq5CYmJjq6u7sxi4uLct+/f1/c2NhY0dXV TdPW1s4cGhoCqaqqLl28eFE2MjLydnNz8yErK6tbNjY2OXNzczoIBOLP79+/dQcHB9HGxsZEkUg0 b25uzu/t7d2tra1dUldXx8ZgMGg8Hn/iyZMn58+ePevW09NTZ2RklLm+vl4mISGxl8FgdIBYLFbW 2NiYICUlhWFtbT0ZGBg409raalNWVradmJiIkZaWdhgaGhq8cuXKQmpqKkJCQoKnrq6uIBKJFNls Njg5OTns6tWru+7cuaNvY2ODtbS0XKuvr1/mcrnjtra2/jQa7Y+4uLicjIwMQUZGRmF4eLj9Xylk iEajXR8+fBgiKyvLsbGxsRYXF0dJSkoGsVisFxUVFVttbW0kOBz+d2RkBPSPJwCIROKHfx3ao7dv 394JBoOBxcVFeHNzM6e0tLQIAADg4sWL1lgsloTFYpFGRkYnZWRkXu7bt2+6vr4eNjo66ra9vT0F g8EMf/36Vejq6ur7/PnzirGxsa2LFy/6enh4/G5ra6M2NjZuz87O9gMAoAoCgSggEEjF19fX+cSJ E6MmJiZQLBY7d/jw4YypqamXAAAAdXV1FHV1dZXBwcHNkydPbkKh0EMsFqu7oaGhVltbW/HVq1fb SUlJVisrKxwYDCYMDg6eoNFoyjU1NdtjY2PVGhoabvLy8nZgMFhRIBD0lJeXP9+zZ88pKBRqcPHi xYBr166dBYPBYDgcTrx8+fJhZ2dnGzs7u4sAAAiysrLOOjo6qnp5eemNjY2ZjYyMvDQ0NLw/PDyc q62tHTE8PPxVVlaWNzExsV5eXi4UCASAhYXFIo1Gm4+IiLgtFArXwWCwu88EKwAAIABJREFUnKam 5ilxcfEZDAaz2dTUVDk8PPyOx+PJ+vj4CGdmZrRnZmaquVyuxKdPn9ZDQkKmOzo6oGpqaqZDQ0P1 s7OzK/Ly8rZNTU3Q/Px89PHjx788fPjwallZ2ePNzU3JgwcPxq6trX0QCAT4rq6uKmNjY8OYmBhu YWHhyX804RCdTn9tb2/vl5eXl1VUVKRtaGhY5unpeQICgaC4XO4WmUzWnZubG8NisSRJSUkNGAwm x+fzZ2JjY/Pi4uJc6urqasfGxiRWV1cFu3btYiQkJMyFh4erJCQkONFotKmrV68SRCLRyOvXr+8C AABERUXdtLe3n/X398/6/7DX1atX//Pw8JA1Njbev2fPnorPnz/vvHjx4qcjR46IbW9vk5ubm7eC goJ+nThxQvP9+/eOampqooiIiPHQ0FCcrq6uX3Z29isGgyGEw+Hs1tbWttevXx+OiYn5kJGRYeHm 5lZmYmIifePGDb3y8vJNCASyicPhtnNyckYSExPxERERCDs7O3NTU9MqKBSq6uvre2xiYmI4ODh4 49q1a88+f/6878KFCxUKCgpaOjo6nJ07dy5TKBSlxsbGgP3797dOTk5a19TU/H337t3vmpoa4ytX ruBqamoWMBjM9oEDBwA1NbVdbW1t3RoaGl8JBMKzmzdvvgOtr6/fEggEZkwm846CgkLq1tYWOCEh IU9eXp6pqKiIio+Pt/q3rgpeX18P+/3794SEhISJsrKykEajjcTFxfkHBQX1GhoajtbW1oozGAxC cXGxdHt7+y9DQ0NTNTU1tQ8fPvT903vBvL29pfT09Jyrq6uf6enpkRgMBmV+fl5sfX2d5+/vHzIw MHBfT08vTSgU0ng8HiU2Njaprq7uoLW1dau8vLyBsbFxq7+/f/Ha2loDm83uRyKRiM7OzvlXr15h y8rKlEkkUtGTJ09Ijo6OPnA43K6lpeVNenr6MAaDod29ezfI2dm5v7W1VV4gEID+vcaLGxsbEKFQ CHrz5s2ktLS0LAAAgKKiYp+pqSnqXx78gIKCglZ6evrrwMBAXG1t7bqCggJraGhIgs1mc69du+ZU U1MzxOfztyUkJAASicRKTk7GR0VFyZw/f35VJBL1ycjIYF69enXl/38aS0vLnHv37g1MTExoZ2Vl TbW3t0dTKJT69vb2ofb29tUHDx5cn5iY+KSmpraHw+H8RaFQO2ZmZt60t7fjAQDoJZFIaBsbm7ip qalvAAAAc3Nz4z9//pS7dOmSMZ/PR4tEom0jI6O/bW1tMlgsliAQCHDv37/P9/LyAldWVmJhMNh2 b2/v5o0bN+JWV1frCASCc3Nz8x0bG5sYExOT5pmZGZmKioo5Docz6eTklDI4OFjQ3t6+YGBgADU3 N4/6+/fvh9evX99aWlrSOnv27J6srKz6gYEBrbCwsFYHBwdNdXX1pdzcXFJkZCShpqYGEAqFyx4e HoH5+fmXRkZGJKKjo81Pnz79JzIycgeJRIJtbm5C0Gg0Ym1t7R4KhfInEonbGAwGKS4uHvjr168G NBqN0tTU5H7+/Hna39//Unx8vC8Gg7HV1NSkd3Z2MiEQCG97exuupqYmlp2dbSIrK5seFRWl5eHh 4S8mJmbv4+PzNiIiQtLc3ByWnp7+6/nz57oFBQWyk5OTi5GRkTEAAAgBAAB//Pjx0v79+2P5fP5q S0tLl4WFheH79++/DgwMwE6fPr3Q398vYWRkNEggEBRu3ry5HBoaqhgeHk549OiRqqampnBjY2N4 fX1908TExIHFYvF5PB4RDAYDW1tboPj4+Oc5OTlZAwMDD4lEIkckEqGnp6fH6XS6dGJi4mBdXd2x 6enprpSUFCqFQplta2v7n7e3d9qBAwfobW1tCmlpacegUOj3x48fE2NjY8G1tbXTtbW1GzExMQow GEywvr6+8+zZs/UgEEiIRCKBvr4+/ZiYmD+5ubmKnZ2dBgKBAHTz5s1X4eHhhlNTUwN0Oh0OKSgo OEyn02dPnTpl9+HDh9H5+fliAoGwqKOjA6NSqTaZmZnj6+vrlampqfCnT5/ue/ToETMjI6Pz0qVL pJiYmNm7d+9OHz9+fHhychJ/4MABoZGRkYBIJI6Pjo7CrKysLDkcDkRRUbH/48ePZUePHt0Ng8E6 XVxcmpKTk9W5XC74/fv3JWZmZoT8/HyKuro6s7a29rORkZHe2traHy6XW75///54HA43p6mpKYyM jDzC4XDGFhYWavB4PBiDwWjNzc1RDQwMDL28vJTodHo+mUwGycnJiWlra+tBIBDlysrKnoCAAGlJ Scmmixcv4n/+/KnV39/fuLCwMNXU1LSuoqJC6e3t1RgcHBy8dOkSWVdXd0hcXFwKBAKhUlJS2PX1 9YKenh4OiUR6m56efkZcXFxtfX39K4VCkbWwsBDFxsYil5eX/S9cuHDLyMhIXVFREff48eOVu3fv OuLxeKXMzMyW7u5ul8rKSjAAAMvb29vN1dXVb0xMTDY2Nzdhrq6ulrq6ulQymewzNzfXR6fTx+Lj 48evXLliLyUltQ8MBouNjo7WSktL60ChUJCpqamfq6vr+NGjRyfgcDhHTExMWFxc/INMJgsPHjx4 AwwGT0OhUMu2trbnKBSKcffu3VmBQFCgo6ODQqFQU0Qi0TkiIuKvi4uLOJPJ5JHJ5K3w8PAeRUXF ZmNj4yAoFIo2MDDofPfunerMzMxoUlJSYnBw8JVTp05FMRiMRhqNJsBgMN9//PgxJxQK9VVUVCR2 7Ngh4eDgoESj0XpnZmaQb9++VW9oaNAeHR2ljY+Po1xdXdFSUlKYiYmJ+fHx8a4zZ864cLlcqLOz s4KGhobJysoKU1NTU9Df3z9qb2//UFZW1nhjY6MDhUJ529raflxaWuqUkpIaIZPJZA6Hg5SWlpZz c3ML4nK5s9bW1gZycnLs+Pj4jZKSkoDIyMjOra0tZnR0NB8Gg8H7+/sXnj59Opefn79/ZGSkxMjI KLigoIDe1ta2r6ampjs8PFyczWb3rK+vrw0PDz/G4XDSxcXFHXFxcZMrKystVVVV85KSkmMXLlw4 dfToUQqJRELMzMxMKSgocCUkJLQPHjxIRKFQovDwcKqTk1NTVlYWxM3NTTw7O9t2cXGxBovFmnR0 dHwfGhqiurm54ZaWltokJSX1sFisYXFxccH58+fF7969G/HixYsfnz59auFyufTDhw8jTU1NZcfG xqbweLz4kSNH4t6/f79MpVIXv337JiUhIdGBQCC4jo6OGTwe77OCggKWz+dvxcTECK9evYp0cHCQ ePnypRiFQmlpbW3djI+PJxoZGckJBAKMg4ODnoSEBLalpWVwbm5OGtLf32/V3NzcFhoaSrS0tARL S0sLT5w4EVxcXPyNy+UaRkREGJBIpLbr168TkpOTR5SUlPb7+fkB09PT9Li4OIfY2Nime/fu+c7M zCyHhIQ0SkhIeLHZ7EI5ObldBAKBCIFARH5+flNwOBzx6dMn5okTJ1xwONwiBoOZFBcXVy4qKmp+ /vw5YnR01DYlJcVbU1OToaioSORwOHVmZmZWPB7vy8TEBNjX19fH3Ny89tq1a4dRKBSdy+Wu8fn8 hc3NTUhycvJAQECAop2dnaW7u7uhgYGBDQwGs7h//35UU1MTp7W1dc3MzAzv6+sLKy8vn/L09Fyt rq6W0tDQ+G1kZJQkEolajh49Kq2mplZjZWX17sCBA01UKnX43r17+D179igpKChQzp8/Hw0Gg2FQ KFRDSkpqqLi4mF5VVYV89uzZnxMnTpQ+e/bs1MjIyMzt27dX8/LyrPbt2/deWlpa9+XLl6OHDh0a OnTokJ65ufkok8nEv3z5cnhxcZEqJSUlbWZmZqiqqqrZ09OTqKamRvrXJUY7OzvX1dbWrh05cgQN gUBADAajYXR0FEEgEMaIROLfoKAgj6ioqM2YmBjgzJkzUtnZ2dLa2toLOBzOTUJCIgiLxa5dvHjx gLW1NVdJScmyq6vrM5lM3r25uQmprq7+4+3tDf/8+fPI8vIyKjo62mBmZgbs7Oz848KFC56ysrJS MBjs8+7du3Ha2toWUVFRlYGBgSwYDEZ0cHAIs7a2XgkODmaFhoYmW1paOtFotLqzZ89Ov3jx4kBL S8vWjh07/iKRSInt7W0lLpdLIRAIjMHBwYXKyspfR44c8WYwGKPLy8uY6elprIuLy8TIyEifqamp koSEhKyUlJTq6urqnJWVFQoCgURnZWUlOTg4yHO5XF0ZGRkejUb7dOzYsamNjY1ZBoPBGx8f37K3 tycfPHjw9YkTJ1YlJCRAqampeCMjI/HZ2VlNaWnp7dbWVkxtbW3/uXPnojQ1Nb/PzMwgVFVVKz09 PeUFAsGWubn5XExMjEJtbe1WS0vLdFBQkEReXt6IgYEBQKVSNb59+2a5trb2vLu729zLy6sBDocj pKWlma2trcjr16//MjIyksXj8Sx/f3/j0NDQdQ8PD2RUVJQcj8fbgkAgS9ra2naHDx9+SyQSyXg8 HiUlJYXa3Nxc8/T05IpEIpn8/Pw/PT09t0JDQ0MsLS2VHj9+3L5jxw62q6vr/fLy8rdwOJy2urpK e/36tZpAIFg3NjbWunLlCu748eMiFRUVBaFQqP3r16+vhw4dwqWnp4vCwsKQJ0+e1Nq1a1eppaUl ITU1dQcEAplOSkpaRiKRa/39/dUlJSWGmZmZe8FEItHR2tpakkgkAiEhIVZv3ryRo1Aoi8ePHw+D wWDA+fPnaVeuXDGTlJTks1is9ba2tvcYDMZaT0/PS1xcXP7w4cNWVCrVh0KhYOTk5PSbm5tbAQA4 LBKJ+MnJyb///v37KyoqCi0SiURZWVnqfD6fLxKJuJOTkyAmkwmxs7OT7O7uPtbf32/B5/MfZWVl jYWFhX00NDQ0WVpaYvz+/Rv17ds3REpKSn1ISAjj169feYcPHy708vLqkpSU9EtISKDl5eWlkkgk DgaDUd7Y2GhdX1+vAgAA4HA40Hv37mHl5ORmsrOzaVeuXBn+77//rsPh8LPLy8t4PB6/h8/ng7S1 tf0hEAhzdHS0DwAANhaLpa+trQn3798vGhwc5BAIBI2XL18W8ni8JTQa3bq2tgbW1NQUS0lJ2VZU VPSWl5eHtrS0pLBYrB6hUAhyd3f/hUKhZjY2Nmbq6uoMa2pqNr98+bIWGxu7/OzZs29dXV2yly5d MpSWlgYaGho6q6urq8zMzF5LSEiEo9HoE6dPnzbhcrkxjY2NGq6urk/weLyqtbW1NJlMhkMgEMDH x8fI1tZ2hUAg7H/37t1pRUXFPZcvX0ZhsVjAzMzsMYvFCk5PT/dxdXVtUVVVtVBWVuaQyWSz8fFx Go/Hg3l5eWE0NTUdTp8+bW1ubi755cuXmWfPntXo6Ogs4XC4rzAYjO3t7a106tSp7a2trSYAAAAZ GRmppaUl9tDQ0KvMzEyuqqqqzD9jcweDwcDdv38fTKFQ/qqqqk7v37/f/PLly8IHDx4wUCgUt7Oz U2b37t06fX19Vl+/fu35p70Wc3Z2tqBQKMqPHz826+npWQ4MDARBIBBFW1vb+cTExFdqamqnxcTE mGAwmCgUCt8tLS394nA44Nra2v+YTOY4n88HCATCNBqNFmAwmPskEmmNTCbrWllZeamrq18IDAx0 am9vxxQWFh46evQotbCwsExVVVVsZmbGXElJyRoOh0twOBwpVVXVCYFAIGVjY6OSlZVl/vfv39nI yEiGsrKyRFJSEvXQoUMri4uLZhgMhrp37960jIwMEzQafcze3r5HUVHxDJ1Ob4BAINtoNHr25s2b mOrqan0oFIrk8/nohYUFRHBwcL6/v795SUnJJAgE4nA4HPS7d+8mtre3NcLCwqpkZGSEAAAgAADY 2tzc7Gxubhb79OkTFQAAICAggPq///1PKjk5+dTY2JipiYkJanh4GEylUpW3trZANBqtLygo6C+D weAlJydDkEjk14aGhokfP3681tDQOGZtbW1va2s7c+LECeOysrIdubm5yLCwsCenT5/empubew96 9+5dBJlMZikpKR0dHR1tBwAAUFdXF547dw5Bp9NBlZWVoSAQCLh//35+bm4uqLy8fLa3t5fi7u5+ MDAwcOLnz59WeXl54xgMhu/i4qKAw+HErl69WruxsSEbFxdnl5ub28FisRaOHDnCk5eXt1tdXe3h 8XgWbDabcuHCBVBFRYWBjo5OvJ2dnSsGgwE1NjaCW1tbz/T399ej0ej5paUlTn5+/tbevXs3Tp06 ZRUcHDwOAACQmpoaWFRU9GRlZQV569YtfSkpqWl3d3d+UFAQFIfDbb1+/Xo7MTGxhk6nX2MymUNO Tk7QS5cu8XE43LabmxtseHh4BYvF8rW1tc+trq7+HhgYGMXj8RIQCATU19cHPnDggJKrq+ubp0+f isvIyARiMBhJoVAI/Pz587e+vv6qtLR0fEtLSzaHw/mbkZGBLikpcUEgEB6HDx++rqqqitHU1OwH AECnublZEBwcDDMzMxNub2/PzczMyH358mU1IyNjUyAQiDEYjGgOh7M0NTVVr6ure3xtbe0HDocz 6u7ufmhqaprg5ub2vaen55m0tLRvTU2NZnh4+OP//vtPycPD4058fPyje/fu/ScSiVYIBAJVRkZm pqGhgYTD4QSHDx8eO3Xq1KaLi0v0vyBSJZlMNuDz+cCdO3fel5eXK3748AEeEBCAQSKRHDqd3tbQ 0GCYkZHBi4uLIyGRSDyZTP6ooaGx3NfXpzk2NkZeX1+XnpmZ+WxhYWGBRCJPdXZ2ZuJwOKi4uLiU pKSkEoPB+CAnJ5fR0tKS1t3dPWpkZMQbHh5e8/b2PvLjx4/Be/fu9Z0+fVr46tUrz5SUFCA5Oflr bm6u67lz56aSkpKQ5ubmgWfPnn1hamo6V1JSIl9eXn7i0aNHOZ6eniYBAQH0M2fOsIODgwWampoa vb293WJiYr5QKPTmwsICTl1d/erY2Fg3hUKhy8nJIWZnZ0c8PT13QSAQVy6XW5GWltZtampKQaPR uv7+/og3b97wDx06tKWjoyPe1NTkIRQKQb9+/cpRUlKyeP78+cro6KgQAAAgKSlp4c+fPzB/f/8D gYGBP0gk0pqVlRXS0dFRY3t7+wWRSIwsLy//u7GxMejv779za2sLfOPGDSgMBpuJi4vTg0KhIjk5 uQM8Hu/PvXv3Xg8ODgqDg4Mlx8bGsL29vZC5ubnRHz9+eOzatYtaUVHhKhKJoCAQSGhhYfHo9+/f GZKSknHnzp3T3bFjh9irV6946enpQikpqamqqipOYWGh0NfXV7O9vX02KyvrBgAAAJlMzh4eHhZp aWnRk5KSumxtbQP9/PzmWSyWory8/Ni+fftGL1y4cFMoFM5CoVAz0NOnTxPevXun39jYeMjd3f32 27dvV7a3t1mysrJHSktLO+l0elt7e7u1ubl5Y1VVFfbFixd7USgU58ePH28SExOdiEQi7s6dO7BH jx7NOjo69oaEhHwsLS1NZzKZXDgcjvTw8OBBoVBSQUFBaUhIyKmtra3ZxcXFJVlZ2ZkLFy6svXnz xsPW1pamqKgICQsLQ1y9enV2eXkZsrKyYrd///72/v5+5Tdv3my2tbW1oFAoQwMDA4UnT57MDQwM UD9+/HgkMjLyOY1GkwoICNguLy/f2Ldvn62BgUF1aWmp0rVr184uLy/HolAoOSaTuXNsbGzE29u7 g06n3xeJRAQQCMRvaWm5YW5uPoxAIOoBAABGRkbSxcTEEGJiYktzc3MwKSkpVmpqat2tW7f8Ozo6 lru6uuB8Pr8kOTn57Pr6uvy5c+eopqamS4cOHZItLi6eP3Xq1M3s7OzjFhYWK3Jycsenp6dpenp6 rL6+vpWuri72f//99xAAACA9PT0+Njb2LAAAwOrq6tDly5eHgoKCRpSVlaEPHz7UIxAIHD09Pdre vXujYDDYrJ6e3sCPHz9whoaGzwcGBsLq6uqm/f39jwIAAPfy8jrz9OlT4ytXrjQmJiZKV1RUmLFY rOGSkhJCZ2fnWQAAEIuLiz+wWKxidnZ2PR6PBwmFQs7t27dV3rx5w9fT02M1NTVJenh4BAMAABgY GLyvr69f6ejokCSRSPSWlpafW1tbkMOHD9uCwWAICASSLS8vn/Py8hLB4XALFAolXF1dnU1MTOx1 cnISt7Ky+iktLR1ZWFg4YmBggFRVVd0qKytbTktLIyUkJFTNz88baWpqIre2tsZnZ2eXnZ2dTc+d Ozd29+5dxMTEBENfXx9pbW2d4+Tk9P7hw4eVS0tL6+bm5tchEAjA4XDqcTicHp/Px4mJiTmxWKxf 9+7da0xOTnYKDAysKywsdAkJCUleWFiQbGxsfM3n82m7du0qiYqKql9cXNxz5syZPfX19bUxMTFg d3f35sjISE0FBYVlKSkpj48fP9bcvHlzLjExkdTW1iZrbm4+b2hoqE8kEk0+fvxYi0KhIAsLC9zH jx//5vF4mk1NTdYYDEZQV1dXPjQ0hFNWVp6SkZFB/hupymZkZKQIhcIlXV3dDx0dHeiCgoKvhw4d ijEwMKDb29tXVlVVWf/9+xdy8ODBqqtXr+oIBAKBoqKibnd3d7e5uTmdTCY//kdOMgwNDWsfP34s XFtba0EikcpHjx7Vio2NpQQHBy+QSKQgPp8Pio6Ofvv06dMbenp6NyAQiJBKpYphsVjU6dOnt8rK yng/f/48npmZGR8VFXWrp6fn/vPnz0kQT0/PzbS0tL07d+58pK2trW5jYzOgqKh4g8/n06Ojo+lz c3OaWlpaX1++fGl+584dsJaWVhSNRvOprKwEysrKLJlMpkJlZeWcvr7+QEBAwFJjY+MGk8lEHDly 5LC+vr71gwcPekkk0rK4uLjy4uJi2ejoaG9eXp4agUCQ5XA4i1gslldeXp6cnp7e4uzsDDM0NMTw eLzhb9++MXV0dKrDw8NJjo6O69bW1mYODg4YCQkJvr6+/kxCQgJcR0dH+PfvX05oaCgsNzd3KSAg gCIhIUHYuXOns4eHx5nV1dW+pqambX19ffeoqKhbkpKSKmQyme3i4rJfIBCsbW1tvbtw4YIYgUBg vnz5smnXrl2adnZ2NZ6enhJSUlLqEAikNywsTFRQUHARjUYbKSgo4Ht6elZTU1NjT5w4scJgMNhc Lnd+e3sbmpWVtT45Oak5ODj49vTp0y7Z2dnjO3bskGAwGPDLly/3R0dHX9i5c6ctm82u5nA4nbKy sgwEArEMgUD4MBiMWVZWVu/i4sJTUFA4sGfPnoP29vYWmpqautXV1T+VlJQGNTU1t379+tX35s0b n69fv7apq6tDWltbS1ks1mc1NTVAVlaWtGfPHkUcDhdsYWGhAIfDtx8/fmwcGxuLgkAg4igUCuXo 6Fh2+vRp6YqKij/T09Oi4eHh8SNHjsgjEAi1kpKSjoWFhXlfX9/nw8PDcerq6quVlZXUtLQ0j5CQ EKlDhw5RWlpaWBQKBfHhw4dvVlZWphUVFSxpaelpJBIJGx8fB6HRaNSjR49wKysrg3FxcRJEIpE3 MzODPnTokP779+/ro6Ki1lpbW2W1tbU3pKSk4CoqKjra2trixcXFXCQSiTE0NNTB4XArISEhzjQa 7Up8fLwSjUbrWV1dDdHV1ZXq6elpZTAYcDc3N3xkZKQuBAKR3Nzc/KugoABfW1tbLS4uRnt6enZ5 eHgY9vf3s1tbW68cPnxYLC8vj2lmZqZjbW0tIS8vP/X48WPnFy9efEtMTNQnkUga586da/Xy8sLS 6XTKqVOn1DIzM4U/fvxQu3TpEqewsFBsdnZ25Nq1a9zp6WkOl8uFX79+Xeb8+fM9ZWVleC8vr20t LS12b2+vcGBgYENOTo5NJBLVcDiceFpaWsuePXuQFAqlb319fdzT09NZSkrKmUaj3SQSididO3fO W1lZKZeUlNDNzMzUNjY2Jq5du9Z+8uRJBTweD4bBYBShUNhTVFQ0XlNTg7xz545ZZWXlqJmZ2VRI SAji1q1bq97e3lIyMjJ7Pn78eDs0NNTd29v77vr6utTCwgIWDAYv+vj4TMvIyCjKy8v/aW9v7+vs 7NQhk8mUqampLzdu3PABRURE7PX29hZ5enqWP3r0KO+///47KhAIxk+ePHkzMDDQ6eXLl7O5ubnk wMDA77m5uXry8vLoioqKzfLyckxRUdGqmZkZe2trC0AikRyRSASqrq6OBQCALRQKgdTU1KtQKFTe zs6OJSkpyWKz2ZzKykr1tra2yatXrwrS0tKss7OzFf78+VP/+PFj5OnTp2U9PDzYMBhMb2hoiF5e Xp574MCB1La2tsVPnz5RcDjc8O/fv3Wjo6Prnzx5YnPo0CHukSNHQNPT0wCXy7WMior61tnZuScn J6d6cnJSMjEx0V4kEmHHx8eLZWRkZP9tqrERiUR8OBwuio+PzzIyMhLs27dv08rKas/m5qa0ra1t xd27d/3Gx8cXoFAoIC8vPxUTE0N5//79CS0trdGuri5JCAQiWlxcREtLS+OQSORYf39/P5VK5Z09 exY+NDRkAwKBwAwGYwGJRHLb2tqW9+3bF7q6uvrznwEHGBkZmW5tbSVGR0db83g8EAAA1KWlpa6f P3/KHzp0KLyysjLLysqKMDg4yLK0tNzd1dVVp6amRh4a+j+azvuf6vf/468zOIMzOPY+5rGPvbdk E00hhQqRSkkl1VtLiVISKQ1FA1FElJ0tHXs79namc5z1/eHb5/oTrh+u63F7PJ7P+2MoQ1JSUqym pka2uLiY1dzcfG/v3r2ZeXl5LAwG472wsFDY3Nws4e/v75SRkfEyODhY3snJaery5csKs7OzUHFx cZ6vr6/U2NiYyLt377aCg4MhFhYWIhkZGfVOTk6cyspKaGRkpPnQ0NCKg4ODEYPBAGOxWE1VVdUR EonU9vbtW4njx4/v1tbWbhgeHjZksViQnp6eUjgcvjg+Pk4UExPwgvEEAAAgAElEQVQT2rVrlz2R SPxaVFTELCoqwgMAAAQHB0tHRERshYeHNwkLC4N27dplLCUldcDU1PRxaWmpPgwG4xsaGk4tLi7G /fnz54GysrI6h8MBhYeHL9TV1anV1NQMj4yMoOzs7CRLS0s/JSQk+DU3N28pKCiIqqmp7aPT6S9F RUWPvHnz5lRAQICHh4dHr4SExPKnT58SKisrP+nq6oooKirqTUxMrL58+fIvjUaDP3r0KKy6urrw yJEjUlJSUgxlZWX28vIyPTU1Fd3W1kZNSkoyTkhIWAoJCcEgkchlISEhwdOnTx9++vTJ9evXryAC gYAIDw8Xevv2bdKLFy9e+Pn5qYmKivJ2dnbE19fX+6SkpAz++++/iVevXpWVlZUZqqioaHC5XHh7 e3tVa2sr+8mTJ5jW1tZVIpH4pLm5ufjPnz+koaEhqevXrzuzWKzfPB6Pg0Ag1CgUymZxcTGKRqO1 gcFgwNPTEw8AgNDY2BjV0tJSW0FBYTMuLm4ZAAAgJyfHrrq6+mddXR1pYmJCytbWdv3Ro0eHUlJS OnZ2dvhbW1vjBQUFe6enp48sLy834XA4JZCWltadZ8+eYRwcHILX1tZC3r9/z9bU1BTY2dmFODo6 8js6OjwdHR1zAgIC+jw9PVfwePyLiYmJ5qdPn1bHx8cfERERYSclJdVoamquR0VFGV25coV79epV SXFx8cOrq6sNi4uLIwQCgXjjxo06OBwOTk9P13n9+vX4yspKLwgEEggJCYEWFhYgXC6Xdvbs2Zh/ pR4DLS0tk+rq6j9fvnzpZ25uPpucnHwkLCzsVWlpKXn37t32u3fvxoiIiLCFhYVZ5ubmewoKCgrT 09NRIyMjxsPDw5UGBgZ5bDa7y9XVtaGurk45JyeneGpqipOamnqIx+NJX7ly5UZ5eXk8Go1m/fz5 U4FEIrUiEIg1IpFoTiKR2EZGRpbl5eUfk5KSGCMjI9c3Nzd/iImJWZmbm5+6ePGiwfXr11Hfv39X FhcXB7u6uvb5+vr+jYmJYdy5c0f2yJEjBDU1tRA+n883Nzf/TiQSW0xMTBaPHTvmxufzZREIhI+n p+edL1++eHG5XF5HR0cckUiMP3HixKCZmdlsX1+f2dTUVCeNRhM7dOiQZnh4uFZNTU0hgUCgQaFQ aFVVlTyBQNjy8/N7zOFwqlgs1urm5ia0sLBwNCkp6dq/tp4HFy9eDK2trd1VWFhoZWdnpxoaGmoj LS29OT8/j2Kz2aCkpKT2kJAQbHJyMv3169fCk5OTo1AolL+ysoI5d+5cy9mzZ32ioqLC7t27F5WY mPjmn7E6VlNT85zP5wO1tbWMwMBA8bt37y4XFRXtHx8fn6JSqajZ2Vmyo6MjTkREBOnq6grx9/dv 2NzcpGtoaMB37dolQiAQrldUVKRLS0svmZqaXqmoqEjQ1NT0l5aWVrS0tKwxNDRczsvL23/jxo3m qKgoNVNT00IymXyCSqUOAQAAzMzMfFdXV08gEAjwz58/jwgEgm1ra2tLJBJpt7Cw8M7ExKQwKSlJ Ly4u7p6Pj8+FI0eOKPr4+Bi7ubmRXFxcpqKjo12qq6tb8Xi88MTEhIiHhwcyMjLym7OzMyY6OvrW 8PBwXmpqqlxmZqbK+Ph4BwKBkEWj0ZMiIiLWw8PDpbKysrIEAuFke3t79t69ewljY2PGwcHB94qL i30UFRVXHz58SAcAAMBgMEKurq7+KBRqaWZmhrd3796q0tJSJyEhIYq1tfWXc+fOgffu3etmZmY2 0NjYaAgAACAQCICRkZFaUVFRJBaLFbDZbPa3b98obm5udtXV1c3j4+O4jIwMexwOJ6ipqVlBIBDb xsbG58zNza+bmpouHT16VAMGg/ELCws3+vv7Jaqrqx1ZLBadz+fvgMFgYRAIpGxgYPAFCoVuqKur r0A6Ojoi7O3t5S5duqSoo6ODffr0qc+fP39aGhoaaC9evLgIAADi8OHD9L6+PnEXF5cLrq6uRWfO nPEBgUDD+/fvl3769On3mpoaz9+/f/9VVVVdvnDhwvyZM2fshISE8HJyck0lJSWwU6dO4dzc3MLs 7e3NRUVFX2RkZMytrKxozM3NobS0tLbweDysurpa2dvbW01ERMQOh8Nh5ufnl6SkpKyQSCTr0aNH iOPHjy/U1dVZnDp1StPAwGDQ2toaPjg4yLW2tgYhEAit/v5+HpPJXNu7d6+XjIzMHhMTkyhxcXHR 69ev05uamhhMJnMtISEhgsvlstBo9F0PD48TX79+3W5sbLRBIBBYDAazICcnt3tubq5XXl5eKjw8 /Pzw8LAekUjc5PF4Xdvb2z+Li4u7Tp48yVBXVzePiYn5b3t72yshIeGRnZ3dyvr6Osna2hpmY2Pj X1VVVT89Pd0fGhpK3dnZASsoKOASExOJQ0ND5K2trT5paWn39+/fN+7fv19rZ2eHoqGhET05OVkT FhZmpqmpKefk5NQAh8OlFxcXObt374YODw9PV1RUyJSWlqLX19flqFSqYH5+Hi0vLz88NjY2Ozc3 x1RSUkLW1NSgVldXq7W0tCDm5uZrOTk5Hzo6OvSvXbuGnp+fb4uNjZ25deuWQF9f36Wtra1FTExs TE5OTsHLywtOp9OnxsfHhTY3N2F+fn7edDq95+zZs6EgEAhrZ2fnvWfPng/W1taPHj16BGlsbIT+ +fNn0sHBATUwMADPy8vL6O3tPWtsbGzX0NBANjExkZKVlRUuKyub8/Pz+6WlpSUpIyNDpVAoElpa WpMwGOyDjIzMLhkZGasvX778bm5uFvLw8DDbt2/f5L59+5C+vr6LWlpaXh4eHgZMJvO9nJycjr29 fdTs7Gy2tLS0I4PBEAsKCiKpq6t3RUdHq3G53J3CwsIyJSUlzvv370fHxsZMLly4IBAVFQUFBwcb ZWZmfrt79y7/+/fvS2lpaXKHDh0SRSAQYidPntxaXFxsy8zMpH748MHBwcEhGgAAkLS0tAcCgfhl Z2eneeTIEXZ8fPyYmZkZjcFgjFpYWIRJSEi4rK2tVe/fvx85PDzssbW11ZqRkbGlq6ubKycnB4ZA IFpbW1vIwcFBYSkpqa7+/v4qOBxel5ubG/X8+fOHhYWFlJKSEuOPHz/yRkZGqqytrcEkEmnCzMzM 6tOnT/Vubm7NSkpKQenp6XMYDGYRiURqX758eZlCoWgFBQWJYDAYKRERkVkAANgQCIRhYWHxbnBw MGT37t2mY2NjbVwuVwWNRvcaGxuL4XC4Vx4eHnICgQC9sbHRxuPxyHFxcS6RkZF6mpqaaHBQUNBs bW3tBxQK1RoVFVWMxWL1PTw8Dj1+/FgzIyPjBAAAfAgEIvj06dNGfHx8IY/Hg2ZlZSVDIBCD+/fv 08FgsHtcXFxiQkLCCVlZ2eNDQ0PRYmJilJCQkBMnTpxo6+7uVhYWFpYBAIAZFxd379u3byp79+7l ZWZmih85ckRdSkrKWk9PT0NGRgbZ09NTX1FRcW9wcLDYxcXFEo1GIw8dOhS8tLQkm5WVZTAyMqLU 1NS0NTMzY/X+/XvEr1+/Jv39/VVfv349qKqqivr8+fNdNptdzuPxNrq6ui5aWFhsolCoBCcnJ/Od nR3C+vo6lEqlQgAAMAAA4GNDQ4MJAAAAFApVlJCQCKdSqcP6+vq7YTAY/NGjR6enp6epP378ULGy slLa3t6W7u7uVjxx4oRhSEhIHxqNTk5LS/uspaWFxmAwyMXFRXUUCnX85s2bTb6+vjJWVlbKDg4O P6ysrBppNNokh8MBPXjw4Iempqbz69evA3bt2gWQyeQcJBIJX1xcfO/s7FyBRqOnBgYGWsbGxpAA AHD4fD5jc3NzZH19fdjExAQ8MzMjHhoaOjowMIBLS0u7TKFQUC0tLTuKiorbFRUVi9HR0Qh/f397 HA63SiaTlzs6OmDKysqThYWFI4GBgbHHjh3TP3nyJF5JScl7z549dZ8/f1ZbWFhYVlBQYPn4+Mwt LCyIBQcHH83JyfFLSEgIWF5evhAQEPDEx8cnf21tjff27VtrHA435+/vT2Kz2XAMBsNxcHCQAwAA eP78+SSDwZDS1tZua2ho2MjIyOh0dHRE2NjYGOro6BCdnJws4uLi0gsLC/HNzc2H19bWcj9+/Jgl ISHx48qVK+5cLpePxWIFv379ArPZbOXBwcEz29vbm0lJSfzDhw/TFhcXn7e0tFCam5tJs7Ozy5cv X+5PSkrSzcnJWbKxsSGdO3cuGgAAICwsDGlmZjZ49OhRkdbW1sbo6OjinJycK/7+/uC8vDyJoKCg JQgEAvPw8Jgjk8lyUCgUSEhI2Jqfn58tKyv7Nj8///PixYu3+Xw+bHNzUyQ1NfWDra2tLJ1Oh+ro 6BgIBAJgaWnpq4iISGNVVZVESUlJAZfLfQcAAKClpaWyf/9++WPHju1yc3Nbamxs7F1dXYVNTEzs UVNTU3Rzc/tcX1/vSiQS51RVVXdHR0cLj4yMSFKpVJiKiopaQ0ND6+HDhxvLy8utdnZ2avh8PlpI SAgSEBBw7p8Z+HdqagqRn58/HRAQsDY6OroMAAC0tbVV//r168VEIrHf0tJSgcfjDZSVlZlhMBjO o0ePkqFQaJiwsLDt+/fvp5qamvh///6tB4FAgIyMzA54aWmJV19fr9rV1TXv6Ohow+FwBjc3N5dG Rkb0Z2dnFVAoVKWVlVWPkpISVFNTc9nHx2eZTCYvmZiYUKBQqKCurm5NT08vaHt7+wUYDAaZmZml 0ul0eS6Xq9/e3s4KDAws4HK5U2fOnEnLyso6p6SkRPX29ladmJgQsra21h0ZGdmanZ2VKCoqYmxs bICxWCxUSkoK0t7e3l1TU9MPhUK3a2pqaGw2W+rhw4e9N2/ebFdUVPytra0tmpWV5XD//v1vZmZm G2pqam1bW1vZ4+PjSCEhIRU6nT6FxWIJ29vbtX5+ft81NTUpVlZWNAMDAzEAAFb+obujIBAI+H/j uV5eXpSIiIj8/Pz8hrm5uY6/f/8az83NaauoqMifPXtWWkhIiBQdHb3c2Nh4ks/nO5NIJHxDQ4P+ 8vKyyr59+6zAYHCAubk5ZGtrS8vPz+9vfHy8upubG9XX13e2vr5+KTIy0vfgwYPpdXV1OqdOnTJS UFAIYzKZLBgMJrq+vh5mbm6+ZmlpKU2hUDiGhoYEa2truJ+fX9Dhw4eP7Ozs0J88eTLu4eFhee3a NYSnp2eWlZXVIQkJCcnGxkaRsbGxLhwOJ7W2tjbd3t7+QUtLK/jNmzdRMBiMb2pqKunq6jrBYDBA RUVFm1NTU+8gEAglOztbwcLCghAaGtr+9u1b3P3796d//vxZEBwcnPnr16/PCATi2MWLF1mlpaV7 t7a2hBMSEpwPHDgg0dHRYfLhw4dADw+PfRcvXuxWUVGJLC0tjQ0JCWl//Pix0ePHj8UNDAxEsFgs g0wmjwMAAKBQKCcmk1mVnJx8fteuXWIEAuEnGAwWXLx40fHLly99UCi0X0pKat3R0XE4LCzMgsVi WQgLC681NDTs7uvrQ+Xl5Y1AoVDIz58/Z728vC74+fn9JJFINFFRUbaQkJDko0eP/uBwOPyTJ084 SUlJ+C9fvuyIiYlN37t3zwUMBgPFxcVDk5OTTZqamhh/f/9vQ0NDeqmpqddiY2N3rK2tNRobG+XP nz+/PjExsXjixAldKSkpOovFmv3H9JOAwWCGSCTSAAKBAD09Pb1WVlaeCASC7+DgoOTv70+ora0l u7q6GomLi8/+i9J9ExISgN7e3hUkEtk7PT294Ozs3FdZWdmdn58fBAKB+KKioth79+6F3b9/32Zm ZoaJw+GU/uHQbRMTEyF6enp/bW1tk2ZmZq6vra3taGhoqO/evXtWTEwMyuPx1mpra4du3LjRuLq6 iklOTvb/+/evXmNjY//Y2NhCYWHhaTU1Nea7d+/uUiiUaxQK5Y6jo+NqUlKSlImJSXhubm6bjo6O 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 LB4/foxcX19nGBsb9+vo6ITS6fRZAwODvp6eHmNpaWnPrq6uD8HBwZ2rq6vE8+fPkw4ePGhYWVnJ sLKyYnR0dNC3trZgy8vLovfv3/dcXl5emp2dpaLR6CpJSUm5Hz9+9PT19RnGxcWZuLq6zmVnZ086 ODikgMFgMQAARO/du/cwNjZWhkwmI3Jzc8eDg4Nn19fXYfb29vshEIjw0aNHr548eZJAIpFUzczM WCIiIrJoNHp6bW1NXEVFRX1paYn84MGDqaCgIA0ikai5trb2+vbt279///6tNj4+fkRfX3+hsbFx kMfjTdHp9D0SEhKztbW1cpcvX2a2t7f7Z2dn50hKSsIwGEy9uLi4mYmJya7W1tYbVCrVdnl5WUlH Rwfh7u4OoFCowa6uLr309PRlDw8PkJ6eHvPjx4+wqqqqLRcXl2FtbW07CQmJKhMTk6/Ly8tpTCYT Iikpif9flVxTU9P2yspKt5+fn7Wnp+fz2tpa56qqKqkTJ06IXr9+vauzs3P72bNn8VpaWn8+fvw4 /+PHj/GoqCiPurq6Im9v70QoFEoAAIDv4uJS+PXrVwUUCoWNjY297urqKiEjI+OekZFBy8nJwTo7 Ow91dHRc5HK5o2lpaV/t7OwQOzs7QuBLly6tioiINBkYGPjCYLDQ/v5+TllZ2Y2+vj6csrLy1NDQ 0Lu4uLj61NTUr9nZ2XWysrIHbGxsfO7cuZOenZ1NunHjBnv37t3bPB5vrqKi4mRhYaHW/v37vcLD w9/SaDQql8ud6unpeXX9+vW+3NxcnZKSEvj8/PwdAADWAABYo1Ao99LT05tDQkKGwGCwrkAg2GAy meD09HTlwMBADxsbG+uXL19uDgwM3AGBQAqWlpZAfHy8qoeHx7ShoaH16OgoY319fRsMBnM3NjZq 4XB4DxwOl7t+/fqStrY26vbt25fodHpVU1NTroODA4vD4Uxzudypo0ePhh88eFB/Y2NjRVNT8w6d ThfS0dGRDAsLUzI3N1fJycmRn52dHSgtLU35/ft3dnJy8u+2tjZxZ2dnx6WlJcb79++nFxcXHfbu 3esvJCQk+/v3b+fOzs6d2tpaelRU1Fc+nw/e2dnhbG9v183OzrbweDzpvr4+6ObmpnBjY2NwZGRk FRgMvr22tpbO4XAmmEwm4ufPn+3t7e0yeXl53TY2NuIWFhaI3bt3W1dXVxdevXp1FgwGQ8FgsGZB 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 RoYlAACAvb39nrGxsVIIBIICAECgoaFBEQqFrNra2lI1NTVlNBotIhKJOw8dOpTu7u4+FRUV9Wxl ZaVjdXV1/c6dO53Z2dnBu3fvLpqZmcHj8Xi4vb396KFDh7T++++/+Xv37omnpqZu/j/pEQqF0yAQ CPDw8HgWFRXVOTQ05D08PCwGAGC4pKTkIggEAkZHRzP09fWvNDc33wsMDMTfu3ePam1tLRcZGanc 29u7V1VVNaOiokJWUVFxA4vFkh0dHafu37/fvX379q8AAADt7e0pm5ub0KWlJR09Pb3WxsZGLQaD IYyMjNTA4/E0sVgstbCwMMbhcPTIZLIuCoVa7uzsHPj06ZOGh4cHLzc3F8tisdpv3bpFTE5OHq6s rLRDIpE+k5OTNVJSUpL9+/e3x8XFyUZERFyfmJg4mJKSovPw4UOZtLQ0fl5enm9RUdEFPz+/oxAI RNbPz+/+58+ffX///j1gaWmp7e/v3wE5efJkBJ1OrxgZGQkNDQ1dDA4O9mUwGPMeHh5xMTExP6Oi osgIBIJIJpNh8fHxKxEREajS0tLVmJgYzYSEBImqqqotEomU2b17dzkYDG75+/fvX29v7x329vZe 2dnZVREREQ4AAMyrqaktxMfHh2xtbf1cXFzsRCKRqltbW/ICgWCCRCItjI+PbywvL0NPnDhxhc/n V2lpaaEFAsE0mUy2TEpKGhcKhVsUCsUfCoViuFwurbu7ey4oKKgai8UOuLq6OkxMTDRFRkYGicVi CY/HG4yNjQ3o6emBKigo8KBQqOTXr19FYDCYK5FIjDs6OupxOBz71KlTbEdHR5anp6cCi8WiP3r0 SFhdXd21urq6ODc3J9na2lrIyMiYq6+v73BxcbFIS0vjnjt3Try2toacm5tDeXh4/Jqbm3vPZDIx jo6Oyl1dXSqWlpYz169fn923b5/Yw8PDmkwmQx8/fix6//69Qn9/P5tKpcqpqqoqent7++Tk5Kyd PXtW/vTp02ZCoZDFZrOh27ZtOxAaGnqeQCDsDQkJ+bFjxw69lJSUBTweD6+vr++am5tTKCwshCYk JIwZGxvr6OnpmbBYrGUajQYIhcJNNBrdOT4+DkOhUErNzc3dAwMDoO3bt+tYWlq6cjicCTKZrBAV FfXL0tJSwmaz1Q0NDS0tLCym2Wx2l1gsNhAKheUdHR2Lp0+fnqZQKI5v3759hsFgaObm5sNPnz6l BQUFBcBgMM2srKy7WCyWp6uryxKJRGpgMNhcIpGsQqFQCAwG2+DxePry8vLKY2NjXxMSEhJjYmIs VVVVzZ49e/arrKwsC4lENpSUlKi6uroyvLy8kLOzs7LOzs6GEAgEGR8fT5WRkWFRKBQMDAZjRkdH f3F0dOTdvXtXAAKBphsaGuq8vLzUPT09PSEQyKxEIln+/v37dxgMxuVwOL+np6c3+Xy+AhKJ5KWm pnaJRCI9KysrIzk5OYGFhYXN/wQAJJFIuCKRqH3v3r0+MBhsAAaDUZWVlRGjo6N4GAx2Pzc3tyY6 Ojrm79+/VWtra+teXl7cra0tSHJysqaWltbIgQMHFMbHx1VramrAKioqhgUFBUtxcXEIRUVFs9XV 1QF5eXmTnp6eb87OznGGhoYm27ZtQzQ3N0Pn5+c5RkZG0Pj4eGRcXByrtLQUOj09Pfn9+/cFNze3 QRKJlDk8PNylo6MzoampqWRgYCD8/fv30sOHD8Xnzp2DT05O9mVnZ4s5HE77y5cvb25ublYLhcJX q6uraFlZWbatra1+SUnJZmNjY1lMTIwtjUbbzM3NLblw4YI6gUBw7+vr67O3t3ezsbH5DYmMjLT9 8uWLs7+/P/Po0aPk9PT0NxEREeFgMLgwJyfH5vjx43Kenp6fSCSS0NjYGGxubr6mr6+vNDIyglBQ UBCoqKjIDQwMdINAILy6urq7iYnJXjgcrhASEnL95MmTxkVFRSuOjo5GGAxGeXV1lQ4CgcBoNJoM gUBgXV1dC8rKygbm5uYEgUDQ7urqmgKBQNbV1NSCjxw5UjkxMUFjMpkSPp/fSCKRVKlUap2Ojg4F BAJJJSQkbLx//14BiUTisrOze4uLi4V79+7Vp1KpdTt27GD5+PistbS0zBoZGW1pa2s7hYeHo8+c OYOzsLDgBgcHU2ZnZ4f27NmjwufzhW1tbejXr1/DYmJiGEeOHCFu3779YnJy8keRSIRwdHRENzY2 bt66dct0eHg4nkwm893c3Hatra398vT0fEsgEPbT6fSWsLCwJQwGoyYtLQ1OTk7mLi8vi0pLSwt2 7Nih9M8//+Cam5txbDZ74uPHj/t1dHTU0Gg0T1NTc6Gurs4kICDgw9GjR800NDTmpKWln/748QO3 Y8cOPWVl5VEajfaCQqGQhUJhZ3p6enJlZeV3bW3tjYGBAUZXV5fE399fAQQCqU5MTAAZGRllc3Nz RhQKhYtGo/WwWOxqTk5OV3R0tDcIBJJhMBidy8vLjNTUVA1nZ+fA0dFRuoGBwTYZGRmYqqrq7tHR 0UoQCMSBwWAK58+fd0lJSUGampqax8fHNzMYDPbDhw8PTk5OVjCZzP6+vr4JU1NT/ZWVlUYQCDRe U1Oz1tjYuCwnJwdmsVhrdnZ2t9LT04sePXoUdvr0aYRYLAadOHGiW0pKSnd6evrjnTt31FJTU2HB wcE0MzOzPi0tLSSfzxdPTk522djYQIyMjJQOHjzYdOTIkZknT54YUygUaR0dnUELCwsNfX19DRwO B7l3716ro6OjbnBw8O+EhARdPz8/Yn5+Pq+7u7uxqqrqXUhIiASBQDhyOJzFjIyMr0ZGRnA9PT2P /3cAbW1t4dbW1uqdnZ3zZDJ5jUajkebn5xUePHigNjQ0xIqNjSX09fX1i8Vi/vHjxxVaW1v5jo6O 0Pr6epno6GjO9evXIe7u7sKfP38qGxsbzzCZTKmAgADt8vLyhqqqKh6ZTO5RVlYGcnNzeSYmJj3n zp3ziImJ2aLRaPzBwcGeM2fOLOLxeCttbW3cr1+/xgkEgsjIyMiwqKio5cCBA0kdHR2zFApF+dGj R5UNDQ3KMBisIzEx0TM7O1tw8eLFJjKZjFtaWvrd09ND//Xrl2toaCjixYsXGq2trWtWVlYTcXFx lrKysrbS0tJSGhoaVCkpKS2hUNhiZWW1q76+/oaLi0suiMViVSMQCElRUVH34OAgB4PByOXk5CB2 794tPnv2rJpIJPpFp9MpVCqVNjc3hzl69KibQCB4DoPBDtDp9JaKioqKsLAwMxgMZiUtLW0DAAAQ EBBgkpWV5dzY2Ii3sLCgCAQCrKamJoJGo/VJJBLQ6Ogo29LScl1OTi4gJydnnEajtba0tGwPDQ2d E4vFA2/evHE0MjKqkpGR0cPhcNq/f/+W/vHjB254eJgxPDw8s2PHDt38/PxikUgEDAwMqAYEBHC0 tLRq7ezsnp05c+bEhQsXDnM4HPDDhw8nDA0NV0xNTcVBQUGg1NRUuJOTk6K+vr5rfn7+67W1NWkt LS3k0tIS9dmzZyEZGRktvr6+LxgMRgkUCpVYWVm1UalUj/Ly8lIMBgPT0NAwhMFgK9ra2pZaWlr/ PH/+PAAGg4m1tLQ2f//+PaCtre3F5/NFrq6ux/8/5hwbGxvi4eFhxGAwZKOioshmZmZgGo2mER4e /uvgwYPts7OzCiUlJWXv379POHfu3Jdbt25dxuFwRh4eHs+/f/8+1N3dPX727NkAFoslBYVC6SUl Jerz8/NLaDTa+OvXry/OnTt39+nTp7+dnJxE/v7+UocOHVpQU1ODp6WlCQAAAIqLi1XOnj37IyMj I2h4eJhmYGCgyuPx1AkEwurw8DBKVlaWrq+v/4+cnNx/Li4ub79+/Xo/ISEhSyQSqebk5ATr6+t3 WllZNbi7u2/4+/tH37p169OtW7fCHz16ROXz+cyJiQm5a9euYfF4PD8tLU1WS0ur5vbt24Gtra0I VVVV8rFjx6pu376N3djYAKmoqOgJBAKQr6/v34GBAaiOjo5YRkaGERYW1qiiouIiKyvLP3funNjW 1nZzdHR05fz58wg8Ho9OSkoCgcFgSWpqKtbS0lI0Pz/fQafTmc7Ozt5isZgrEAgUmEzm/KNHj6Q+ ffo0Vl9fr1ZTU7MaHh6+Y2Njo3toaGjh69ev87du3aKsrKzAfHx8liwsLAofPXp09sGDB9QjR44o kUikPUKhcPLTp0+fjh07xhwbG7PPzMxcePHihZq1tTU1OzvbcmJiIjcvL0/v8ePHx/v6+lrS09OX bt68SUChUC8UFRWvwuFw5IEDByotLS3VT5w4Ed/W1na5q6urw8rKKrSurk7w5cuXFS8vL/SJEye0 cTicD5/PbxIIBBt6enrTlZWVvJycnMHV1VXcs2fPwnJzc7t+/vz58fv371dgMBjI0NCwcnx8/HR7 e3slmUwe5XA4/QAAAEQicXd1dTXP2NiYpaKios9isWyvX79+NCIiQvr+/fsdOTk5j8BgsPns7Owz dXX1g5WVledYLNaEpaWlbnd3twJIKBQW/i+P33TlyhVUTEyMEpPJXB0eHsZwuVwokUjc0tfX10Oj 0XPv379fUFJSQgYGBsLhcLiEw+Fg19fXp5BIpC6BQAgDAADgcrlDmZmZz9lstohCoSDm5ub0AAAA IiMj1cbHx9/evHkTdebMGQmJRJK6cuWKhaOjo9DExIRBIBB0vb29ewcHB+FZWVnA3r17jbe2ttTo dHrD2toacODAAfVnz57x09PTWQ8fPgQUFBQkTk5OtNnZWY/nz5+fCQkJebt79+63b9++DQYAAO3t 7Z3/5csXZxwO58PlcotpNNp6SUnJmrGxMWv79u1eAAAAFy9e7F9cXAQSEhL6Tp8+3evk5KRFoVBM sVisAAKBSFxcXGI3NjbSOBwORE5O7uSXL1+uv3nzhltQUBCKQCBQZWVlfxUUFGYsLS1jVldXy8LD wyWRkZEtXV1dFrm5uSEIBMKuu7v7irm5edrDhw/zbGxsxpWVlV2Ki4v7m5qahMnJyYMVFRWzFRUV 2+Tl5eVMTEx6Ll269GhsbKz6/fv3f8+ePRuFRCIZHz9+fHD58uXwd+/eLWpoaHBwOJyFrq7u1J49 e8Tnz5+3Ghwc/G5gYODY1NS04uzsjMfj8YjZ2Vnu8ePH37i4uKjPzMyMeXp6upFIJKhEIqFnZGQw 7ty5I4JAIDF1dXVt4+PjtPj4+PsdHR2XS0pKVLdt2wbJyspabG9vNx4bG1tqb29vxWAwih8+fJi4 ceNGZFRUVKmTkxOvvr5+e0dHB7+hoWEQiUSGiMViiZub26q3t3dJZmbm68XFxW/+/v6Pp6ambB49 ejQrEom4//33n1ZiYqJRfX39lr6+/tr/bhoY7tq1S2JhYdGflZUVvr6+/klOTs4NDAYD09PTLQkJ CUB6ejpvbGxM2N/fDwMAALhy5UrQ1atXnyQlJXkikUidBw8elAwNDWm9ePHC2t/fv/DLly+atbW1 w3fu3JH9/fv3iJ6ens/4+HjV9PS0VWxsrKCyslJLIpHMYzAYq7y8vF/fv39/VFZW9q65ublCVlZ2 LDY2drCtre11f39/naqqKk8gEIBUVFR0RCLR2ObmJhsMBsNpNBqaTqe/sbW19auvrwdcXV0dYDCY vEQiAaBQqB4AAEBqairBx8cnenZ2VsbPz890c3MTOjIyMrC6uioVEBAgKy0trVhUVNRnY2NDkpKS EoyPj8++fv2avr6+zi8tLfXlcDjhTCazqqampnl6epoTFRXlIRaLeVgstvrz589Gu3fv9qdSqTVy cnJwKBQKe/bs2W8vLy+0g4NDOBQK5YJAIKmrV6+W2tvbf3dxccn+8uVLHpPJND98+HAoAABSIJFI 1Nfa2vqYzWaDnZycEqhU6ksYDAYMDQ0R6+rq5qlUqllnZ6fZ4uLiwJUrVzYuXboE1NfXT2dkZIjL ysrwdDpdrq2tjbG1tSWSkZGR/fDhQ82tW7eM7t27J4iOjta5du2aMDMzs2JsbGzbz58/BTdv3pTi 8/lLFhYWturq6r+6urpOOjg41HR0dJB//PjRd/bs2c3m5mZzNBodyGKx2iorKwv6+/uZPB5PubKy crmkpIRCo9HkAgICqv7+/WskEokYVCpVzcXFxY7NZpdXVlb+5fP5ms+fP1+trKw89+TJk9eWlpYK SkpK0ydPnixlMBghb968MVZXV/fMzMy84eTkNJSenr5y6NCh9bGxMXddXV2moqKiJgqFYrW2ts6A QCBJQEDAGQQCoWJubn7+f2LZ/ufPn0tKSkp+zc3NufLy8nwFBQV9KyurIS8vr7EHDx44sNnsl4OD g3Aul2sPBoNBxsbGeBaLxXV2dv7F5/OVBgcHfXR1dRsvXrxIB4FAkxkZGXKTk5Pf/pfmq1xaWtqy sLCIFgqFjUQicfjjx4+c5eVlKWdn5yUAAID+/v45HA7H/fHjh6CxsVHZ0dFRwcvLS8HMzAw8MzOD uHPnTm1ZWZmfubn5cmRkZOWVK1eIzc3NquXl5X/9/PzsUCgUf2lpiTE+Pr7i5uZ2XUZGhurt7f33 xIkTyIWFhT49Pb3N9fV1zqVLl6A3b94klJSUYMPCwsaxWCySw+GoNTY2sgcGBjYcHBykrays+q9e vbq+vr4eOTQ01DA0NLRXU1Ozi0KhTGtqaiI2NjY4ERERMygUCkCj0RHy8vLghoaGgbdv325+/PhR 5/fv363Jyck7XVxcqltbW02pVKoSmUzeyM/PXzUxMWGlpqb24vF49o4dO6QRCAQ0Pj6e0N3d7Soj I4N2cXG59OfPn0shISFVeDyeqaysrO/q6jqbk5MD1NfXY8rKyn7s27cv8cmTJ12XLl1aMjIy+ist LQ1cv349fWtri8ZkMjeqqqq6UCiUoouLi0hNTS0OAIA1DodTyGazPTo6OmaJRKJofHx83M/P7yAU CtX8n7nb+h8BeLa0tFRPoVCMwsLCcMHBwer9/f0TAoFAenBwUAQGg9k1NTWd8vLyWyUlJRaBgYHc 169f+9y4cYNaWFiIxGKxs1wuF/bvv/8qWFtb7w4KCirKzc1VFwgEIAwGI2GxWFXq6ur3SCTSj1ev Xv1WVVWVaGpq+jU1Nc1oaGjgiESie3Nzc6VQKATJy8uvaGpquvj4+LTV19dH7tu37152dnYYAoEw W1tby8bhcP7Pnz9/QyQS4dnZ2eU/fvyogkhJSSFtbGzMNTQ0NGg02pa5uXkUgUBwbGxsnCCRSDwP D49FAwMDYy6XO41EIhefPHnCbGpqWjx8+LCVjo6OamZmZmlQUNDy2tqaUmBgIMXPz8/awsJC899/ /127ePGitLe3dzOBQHATi8XMwMBAoUgk4uno6Ow6f/68wblz5+AEAqHuwoULhBs3bmivrq6+c3Fx qVxYWNB/8uTJDzKZvDwyMsJDIBB6BAJhtqura8zQ0HBMUVGRHhkZadPc3Pyuu7vbJSMjY9THx0dB VlbWztDQMIZMJst7eHj8XVpaWv9fZXc2ODjY2szMDHf27NnkDx8+3BQKhX0SiQRCoVCcLl++DG9v bwdOnjypJCMjgy4tLV12d3d3bWlpoc7NzclmZWWNRERE2FdUVKw5OztDT5w44RAYGAiPj48f+PDh Q5OJiYkigUCIodPpr9ra2pAgEKgJg8FMtbe3D0dFRb3X1NR04XK5iwQCwTchIUH5zJkzkYcPH/6W kpKCPnjw4BkdHZ3hrq4udGRkpB8AAEBLS8sJS0tL0n///ffBzMzsUEpKCgUEAjUymUy4sbGxf1dX 1wwej59/8+YN7/Dhw2YsFotnYmICqa+vn5eWlu5BoVAb+/fvzyAQCOe+f/+utby83H758mUjMzOz YCKRSPj27duHlJQUlaNHj7pzudw+e3v72c+fP3NEIhH/+fPngLa2dsf9+/chNjY2YBMTE8Pp6WkZ BoMhMTExYcjKyqpKJJKFycnJmeLiYsLq6upEQkJCmoWFhbqpqenfxcVFgaysbH9TU5OakpLSwuPH j4Pq6+s3JRKJTl5entbFixfjGxoaPjg7OxtbWFiApaWltx4/fswODw9vXFhYwD98+FBZW1ubWF5e /jooKEgFAID5xMTEpNraWpabmxtXIBAYT01NIfbt27ejoqLik5KS0qCUlBTw5s2bYUVFRUpwcPAf NpsNf/TokfXs7Gz3/fv3McbGxsUsFotqbW0NOXXq1PH379+LIiMjrWZnZ7uhUCjczs7Og8/nS8rK yjZsbW2xUCjUGQ6HewgEgnETE5MwOTk5vLe39xcQCNRhZ2cXcOXKlWQ9PT2eWCxeMTU1FTx69OhG UFDQCoFAkGKz2aIHDx781dPT42lra/MAABAcO3ZM9+7du6CamhrT9fX1ze7u7gUqlSp+9erVfHx8 PDkoKAiQkpJSxeFw9i4uLtSioqIVS0tLeTwe7yMlJSW7uLj4zMLCYqu8vFz67NmzpPj4eFk6nb4x Pz+/Ki0tXU8mk420tbW95eXl5fr7+/9gsdhaY2Pj2ePHj2/r7OysvHHjBt3Ly2tweXmZ+vPnTygI BOI/evQoXyQS0UBsNjvo8uXLuqmpqZbv37/fam9vX87KyrKhUqmNycnJndevX/9/xQN27Nhx7/nz 57tDQkL8MBhMS319/cr27dv3NjY2VhsZGcGdnZ01VlZWACwWy01LS+vs7u4GJycnW09MTMwSiURj EolkOz4+XpOamsogkUjvMBjMdhKJRLp69epYfX29pYqKyuOKigqr/fv3D798+TIIjUav19TUwFZW VqRbW1vH5ubm3CEQiCQ5OZkBAoHGaDQav6KiAl5fX+92+/btkX/++cefz+evnThx4qVYLAbi4+MB Ozu7A3V1dW8GBwc3Dh48mHj8+PEvrq6uozExMW/ZbHaPlJSUqkAg+L21tQVbWloSoFAoLA6Hk01N Ta0Eg8HA9evXbQAAAEQiEQiDwTBLS0tFZWVlLU+fPj2zsLDQHRAQIPDy8hpKSEjo0dLSustmszsg EIgQgUBYEYnEf9+9e6fn6up6enh4+NvCwoKUs7Oze29vbyKZTI4SCASsK1eufLl161aQnZ3d+Nzc nOXOnTubYmNju65evRr99etXz3///ffSzMwMa2hoyObNmzcyLS0torCwMIPk5OS5+Pj4fhwOx0Kh UKZzc3OtIBDISlNTk9nf3z9DoVCC7ty5U7i4uEiIjY1Fh4aGuuzYsaPx0qVLikgkcp1EIh3p7u7+ ZGRkJHPs2LG6uro6+6qqKlkPD4/VvLy8JkVFRdmGhgb5PXv2eDIYjL47d+7MLS8vy1y7dm1YS0vL ePv27SX+/v5jCQkJJ3k8Hu3ChQuIqKioDQqFosvlckEgEIiAxWLFS0tLrQAAcHbs2AGcO3cOFRIS krqwsHBUJBIJCwsLSRERESB5eXnXjx8/Xo+Ojn5w7969BAwGYxIZGenv4uJCf/PmzS9zc/OrdDq9 UlFRcdvCwsIqHo9XSkxM/IbFYvmLi4tzZmZmXs+ePet+8+aNMDMz0ywnJ0dua2tL/O7du8uGhob7 a2trO5OSkpz379//6/v37+4jIyPC06dPr//+/dtTLBa3FxcXTxoZGW1WV1cTZ2dnaf/++29gX19f 06dPn+BWVlZqSCRyxsLCgqSsrGwBg8EkOTk5L4eGhuRMTEyWDhw4cLG3t/eKqqoq5eHDhz9sbGzc s7OzN8vKyjzb2tq+dHR0SPbv3x/A5XIhUChUlJ2d3f3q1auKtLQ0KxwOZ6Cvr9+IwWAUeTyeLB6P lyGTyYo3btz4evXqVa/R0dEYU1PTC729vTcSEhJ2uri4aP3+/VtNR0dnjcViSd24ccOex+PxRkZG aslksjsUCpXj8XhDCATCBAQCKXz69Om7vb201q2iAAAgAElEQVS9yuPHj38pKyuLhoaGSCkpKVgA AICKigpQQEDAJOTGjRtDSkpK+7FYrGFhYWH2xsaGuVgsHhUKhaKLFy/qp6WldbFYLCk1NTWp8+fP 1965c+dmT0/PHSaTGaCpqemQmpo6IhaLeTIyMsQ3b97wnz17Nn/06NGlnJycLTKZvOjl5XVPJBIN t7W1NZiamvLOnj0rvnbtGrS+vl771q1bhIWFhfWYmBhOV1dX8+zsbIyzs7Pzvn37XDkcDis0NJTH 5XKRQqFwysDAAF5UVBR26dIlgZSU1GpSUpJ6XV3dHAaD4dvZ2Rnq6+u/lZGRsYFAIACFQpEQiUSI jo6O5tDQUJutra2ulZVViEgkWsThcJPPnj0jh4eHwyoqKnqmpqaGS0pKqKurq2p8Pl8wMzOzrKys rCorK9u1sbHBrq6uHu7t7Z03NDRcHxsbU3Z0dDTQ0dFpHhwcnLp8+TK9rq4u8fDhwyMXL1604PF4 YEdHx/bY2FiFpaWlTicnJzIUCpWqrKzsqampeW1qarqsr6+vk5mZeerPnz+3dHV1Pe3s7BQBAACi o6NFOTk5anJycuMODg62c3Nza2traxUODg6ycXFxIQEBAWITE5Pt0dHRrUQikXTmzBnmyZMnhTMz M9wHDx70ysvLm2ZmZvaYm5tzo6Ki0KGhoVvnzp1T9PT0HMrNzQVVVVUJo6Oj59XV1ZNqamqueHl5 TW5sbDSfOnVK/tixY518Pp+/Z88ek6CgoI9zc3OrISEhbvLy8mt4PN4zLS3t16FDh+RVVVXntm/f Lty9e/f0xsaGvpyc3HYPD4+wlZWVdkdHRwEej4cODw8PI5FI9vLycl11dXWPhYWFMRwOZ6uoqCDP nTs38efPn5nS0tJyPp/PDQoK6ujs7Bwnk8kXiouL6Q8ePGjY2toyra6uXuXz+dPGxsZSy8vLOG1t 7fno6OglAoGwpqurq4dGo618fX2xFy5cgNy7dw82Pz8/oKent0qhUFA5OTnAyZMnt1tZWVGfPn1K wuPxC0QikdHe3q7w6NGjx11dXa3GxsZbe/fu1QQAAFdbW8vJy8tbMjAwQGhra7P09fX13d3dR4RC IfTLly+wY8eOCZlMpoKtrW3A169f7z18+PDr8PAw7+XLl5eEQuHMxsZGv7y8PHlsbKwmICDA08zM zAcEAr2prKykikSibg0NjTkQCKReUVExhMfjpaOiouRev36trqKiAtXW1pacPHlyMSQkRDU0NPSv tbW13uzsbM2lS5f22djY/B4dHf0YGhoKh0AgRXp6elgtLa01iUQy4+XlxZ6fn8c4ODhEi0SiH7W1 tT36+vomCATClM/nj8BgMDmBQDBlbGxsRCaT14ODg3sSEhLibt++Pffx40dYUlISD41Gi7lcLhqM QqFKTE1NZ0UikbqZmdkxX19f9I4dOzQYDAYEg8GYaGpqEsFgMKinp4d+7do1zZWVlZ/6+vpOCASi TVZWVnjv3j1daWlpYUpKynJhYSEYi8WqUanUDW1tbcz79+9lAAAQ02i0ivLyclBra+uog4NDl7q6 +srdu3dRExMTc25ubhaOjo53Q0ND9+vr6ysAAMAQCoXMI0eOtBgZGUH37dsH19bWNraxsaFLSUmJ P3/+PH3//n1NiUQCNDU1bQsICMA2NTX91NLSei4tLW28vr4+NT4+3p+fny8nIyMjMjY2VgKDwYSG hoaXUCiU3dfXhygoKHjr5uY21tjYOHn69GmBlZWVOY1Gow8NDX1XUlJCuLm59aLRaIfIyEhbAADk qqqqJMXFxb22trYRZDJ5UEtLK/rMmTOoo0ePdhw8ePDUtWvXBJubm6DFxcUnNBptCAKBACQSSUFG Rmb6+/fv6wAAjFy4cOHY4OCg3eTkZDUAAICnp+cbKBTqgMVi/Z8/fz506dIlmoqKymJWVpZNS0vL uKWlpbSSkhKGTCY7Nzc3d4WFhXUPDQ01HTp0yEcoFHa3tbURCQRCoIGBAZ5Go4WHhoYqa2lpmbFY LOmgoKD+gIAACR6P1zh79qx7Y2OjPQAA8Pb2drmAgACf/v7+raqqKqKOjs7g2toarqamxklBQUFe XV19fGhoSCM+Pj5wfX0drqGhkTA9Pf3kzp07J+BwuBgCgfwNCQkRhISE/HZxcYEHBgbi0tLSCggE wlE5OTlDAoEQR6fTFVJTUwnp6emWISEh1s7OzguRkZEETU1N9sTExDEDA4MFc3NzywsXLlg0NDQA KSkpu/r6+o6lpKTY5eXlOefk5Djs3bsX9vPnT9axY8cMw8LC1Dc3NweLi4uVDQ0NCXQ6nfY/utF6 8eLF2dzcXJWoqKgYIyOjVRQK5dvX1xemrKw89urVK9X+/v4BNzc3awcHh9zS0tIukUg0bWlpacbn 8xcdHR3pP378aIRAIAwMBmOsr6+vZm1tnVFYWLjY09OjExISsm5paYloa2ujFRQU8CQSCRAZGXk5 KCho28OHD73q6+tfb2xs9BcXF88TCIQAS0vLlPLy8jYQCAQsLS1J5eTkRBgZGRkaGRntysvLq4yM jHRWUlLiUalU3sTERK2ZmZkNEok03djYIPr6+o6i0Wjp+Pj4jvz8/J1isVg4Pj6+8u7du2lZWVnI 8PAwy8zMbHdfX59ga2tLXVVVlezh4YFeWFh4hEAgTvB4PHB4eDiNy+VO0+n0sYaGhpLx8fH25ubm kkePHjUymUxMbm7uzvb2dtvW1lbe379/1+7evTu0srLSAikqKrJ3cHCYPHr0KGBnZ+eqr68vwWKx YRKJZBCDwfz59OkTi0QiMSkUCpNMJrvC4XAIn88fX1xcRA8PDzdxuVxpDoezERUVpaiiosJPS0t7 tW3bNnRsbGyAm5sb9syZM//5+flR6uvrF+Xl5bk5OTnZ4+PjxdLS0rKxsbGDBw8eNBaJRPMAAPAV FRU9T58+XXXt2jVQTk7OelVVFSo/Px8XHBzMOH/+vPb379/v+Pv7u+Xm5jbfu3dP6u/fv2rOzs4M Hx+fPlNT0zgGg3EJBoPNQyAQp4sXL64fO3YM7O7uDofD4V/d3NzkAgMDeywsLAAGg2FkYWHBAABA U0VFZWZmZmYTgUBI/fPPP9F9fX39X758UZSSkhouKyubHBgYMKDT6SoDAwOkkJCQzf3790sjkUgJ Ho8fsba2xmhpaXV2d3evdHZ2KqFQKFkOh8MODg6mC4VCdSQSKcLhcHLBwcGOi4uL/UQiUUChUIhY LLb2yZMn2Uwm8zcGg/l29+5d27t37xJPnjxpNDY2tvX79+9NLBYLDg4O9ti1a9ePwMBAjLm5OdvT 01NvenpaSkFBQbGgoKBzfn5+gEKhxB04cMBuZGRkOC4uLkBPTy9qZWWlprGx0UlfX//52bNnFZFI ZJ2Li4u5u7s72N7efsTe3p5saWlp0NTUtO7r6zuho6NDOHnyZEJ8fPw3S0tLDXl5+S0MBqM5NDT0 s6+vb1NbWxuNRqMVAQCQBYFANe7u7peSk5M5O3fuZDo7O2M2NzcruVzuChwOhyopKSE4HA59165d iyKRCDh48KAwODh4/s+fP8oYDKbe0dGxLSgoyPn48eNoMzMzi9LSUl5jY+NGUVHR6tzcXP+ePXs6 9+3bp9nT0yMTGRlpj0KhtDAYjD2TyWyxsbFB2trafnz16hXdzc1tC4PBQGpra/u9vLyMbWxsYuXk 5Gzn5+db79+/P0YikZiFhYVqu3fv7uJyuV9Onz6dLpFIxAAAIBEIhLOrq+uGk5PT7tTU1L6CgoKd OBzOOSsr666vr+9gXV2dLAaDWb1//77m9u3bUcXFxb8qKioeh4WFqRCJRL38/Py5jIwMzj///EMm kUiAlJSU4s+fP6k7duwIBQBg3MjIyEBJSempnZ2d8c+fP5mzs7PGioqK4IKCgobs7Gzw+fPndcVi saKcnBzl79+/nW/fvnXYuXOn7fz8fJWDg4PF0aNHf50+fTouPj7e/MaNG+rNzc0CMzMzGz6fz/n5 8ydXSkqqGY1G64hEouJPnz7NhIeH42VlZaESiYRfVlY21t7evslgMGRu3brF1NDQYKSkpDhu27bN sry8vFxPT287DAbjs9lslpOTEwFSVVXlbGpqWujh4aEAhUI3ZGRkGG/evPnp4OCgg8fjTzo4OHy6 efOmlEAgMH327Nl8QUHBDw0NDQ0jI6PVlZUVOSgUKjM6OroSGBgYgcPhfJOTkydMTEx0TE1NQWw2 G+vj46OIRqPZwcHBvjo6OihFRUWSsrKyEwAA8P379xv++fMn8+fPnyNZWVlLERERHu3t7bn6+vqT ampqMB8fH6mpqSkGk8lcv3r1qqavry9FQUHh9eTkZBgcDq9tbGwcSUlJwaNQKCaJRLLX0dEp8/X1 FXI4nNHY2FhDbW3tPYcOHaIoKCh03rhxQ9bX15c5PDzM+PPnD2x9fV1oaGgo+O+//8QikUhSUlKi tba2Jre5uTkxPz/PmZmZ2WQwGJsaGhryJ06c6BgdHZUUFBSwHjx4MBUXF0cwMTHJt7W19XR2dpY3 MTGRQqFQrJycHGxCQoK0mpoaX0pKynV8fLzz1KlT7F27dmkCAMDKzs5m0On00X///RdgMpk61tbW kE+fPoG9vb2nt7a2Nu/evSsEAKCeTCZLAgICNGpra2sLCwvt5ufnBw0NDeV27NgxDIVCc16/fq0w OjoKDw8Pp+Tl5bXY2dmpKysr29TX198MCAjIev78+aeWlpa8p0+f9h49erTf0tIybmBg4CWfz+/8 559/Yg8fPizx9/eH+Pv7X+FyuW87Oztntm/fHjI9Pf1CV1dXtbu7m0sgENRLSkqmo6OjdUEgEAME AuEgEMji2bNn8eHh4aouLi5zS0tLqy9fvqxTVFRUfv36dau5ublMWlpaR0BAALimpmZBSUlJnclk guXk5DzYbPaMhobGkr6+vpmOjk4om80eUVFRwVtZWT0VCATqQ0NDGoWFhYtgMNjaxMRkubq6ui0p KSkwKSlpAAaD0cFgsPzz588lVCpVVyAQcMPDw6cOHTrUV1xc/GF5efmvl5fXxM6dOxe5XO5aWFgY JiYm5pCqqmq3t7e3y+nTpzdcXV37//vvv/GlpaXub9++1QYHB0eUl5enqqqqare1tbVkZGQ07Nq1 S1leXt7BwsJCQKVSle3s7GaqqqrwHR0dzi9fvpRFo9GKCAQCzuFwRpKSkmBTU1MdcnJywOjo6Ja5 ufnm+vo6R15ePkJaWtoQBoN1d3R0qG5tbcneu3fPsK+vb93Q0JAmJSUFvH79eunLly/DISEhYhAI tKKlpWUrEonY9vb21vb29hNHjhyZkpOTwxoZGd349OkTdGZmRqCqqvqxoKAA8uDBg0RPT89NJpO5 OD09DUlKSoql0WiNFAplu4KCwpqenh6hpKRkjkQiLY6Pj8+1t7dL/w/Jo/T09ALFYjG8s7OT+vnz Z52enh4BZG5ubmdsbKwaFAqFTExMSOBwONLe3t7Q2tq65Ny5c70FBQWYc+fOiYyNjVmFhYWolpaW rQsXLkyPjIwQJiYmtnx9fU1xOFyLrKysPQAADG9vb6GTk5Nefn7+hKWlJSIuLq4zMTHxmJubGzUk JGRgdXW1//bt26/c3d1tGQxGV35+PmZkZKT2xYsXqi4uLnNKSkriq1evxg4MDJSYmJhYVlRUoDQ0 NAQKCgqbc3NziGPHjoF1dHTU29raxtTU1AwmJyd/7dq16xMIBELGxsb2ysrK2hGJRH8lJaVxOp0+ gMFgTL29vafV1NRmeDye2N/fX87W1haCx+NlysvLBQoKCqC0tDSHycnJHy9fvhSEhIR0h4SEwOzs 7FAqKiq4N2/e0PT19ZXr6+vXv337FkEikX5kZmZOh4SEPIiLixOHh4fDdHV1uR4eHl4kEumHk5NT SGZm5uKRI0e6oqKiCBcuXDgpkUhmYTCYwv/2c/PS0lL+/v37XY8cObLq5uY24unpabe4uKjh5ua2 7ufnd3VsbOz34uLi4p49e+b6+vqM9fT0eA0NDdOmpqab2trair9+/VLz8PBgjo6ODkVHR6/C4XD7 +Pj4O3g8Xv7GjRueS0tLZYqKihXbtm27/uDBA7iTk5NCZ2dnfVJS0issFmtz6NAhW19f37GNjY32 //77b33v3r3yBALBvaenp1tTU9OwpKSkSElJafX9+/fwb9++PV1ZWYEODw//bmpqEnt7eyOmpqZW NjY2gMrKSh6VSrVzdXUFtLS0FFVVVVdtbGyU2Gx2nZ+f37X79+9XKysrqxKJRCVdXV3jly9fUicm Jhpra2s/Li8vGwUEBLCvXbt2t7y8vC44OFgwPDxssba2ZnD9+vVREolkfPny5VYymayQlJS0gMFg YkNCQnqnpqbGa2pqhAgE4vfFixeTsFis4dDQUMbhw4dlPnz40OXp6ZmMRqMXWSzWoLKy8gCLxVKS kZH5DQDAhqqqqqWqqqqkt7eXUV9f32Zra+vg6ekZZ2JiAiQmJm5aW1svTk9Pd/P5fNDBgweRZDKZ Mzk5OaWpqYmOiYlR53K5oD9//rTKy8szZ2dnCQ8fPpRnMpmQubk5FhqNxk9MTPyVlZVtk0gkEBqN 1mpjYyNnbGxs/+TJE1ZPT4+ljY2Nw9evX5tOnz5NGhgYWA8ICNBcX19njoyM/EWhUP+trq62njp1 CjYyMlKroqJiuWfPHuf3799rSSSS9qtXr6pIJBJxZmZmf2hoaO/4+Ljg0aNHRycnJ3tfvXrFc3Fx gQAAAO7q6iqtqKgY3b17N9vS0lLXzMwMpaur+1FKSkqKz+er4XA4ncnJyfb19XWMlZUVHCSRSJYH Bwfvqqmp2UtLS2+trq42YTCYyPn5+blr164tg0Cghfz8/FvZ2dlnExMTY7q7u//++vWrRSAQSJaW loRpaWmUjY2NscbGRo6rq+ucurr6t83NzXcmJiZN27Zt4xYUFJzgcrmsM2fODPn4+NAPHz5MoVKp HAqFwvTy8lq5d+8eV1lZ+ZJYLB4Eg8GGYrGYduPGjaNFRUWb6enpzigUavXly5cGjx8/Nk5PTy9P SUmJkJKSkgAAAPz69avDwsJiTElJaTeLxVpbWFiYVFdXHzl69CguKytLfmFhQVhUVFR6+vTpb79+ /TpWWVmJqKmpkVRVVbHHxsYwRCLRaHNzE5ibm9swNzc3BgCANTU1NdjU1AQ1MDCABgcHw86ePfsY AADg3r17p3JychopFArpf1gTEAqFvNzc3JfW1tYOr169WkhISJi3trZODw4ODi4sLDwJhUKjxWIx s6Cg4NODBw9+GBgYSBUVFaXQ6XQ5Nze3r3l5eYpfv36dTE1NNVtZWYGNjo5OaWlpQTU1NU9NTk7e //DhQy2JRCJERUUdS0pKepGRkZHU0dFxvrq6mozD4Xh9fX2qT548ORoZGXklNzdXrrOzs3lqagof GRnpL5FIYCMjI70mJibE0tLSB46Ojjb79u1DFBcXX/T09Mzy8fFR6O7uFr18+dJOKBQCZWVl3w0M DIR1dXXyfX197dXV1QFEInG6oKCg9vHjx+SBgQE+CASSXL58mbJnz57N0tJSnfr6+sHl5WXE/fv3 twYHB8MLCwtfk0gkjEgk+snn86NlZGSGS0tLlauqquBEIpG2a9euFicnpzs1NTXtg4ODopKSEnxo aGh1Z2enJYlEGodCocadnZ3ML1++JA0PD1/icDgQWVlZiJmZGXx9fT0ZiUS2hIWF9b99+/ZwXFzc fSKRCHdxcfkDAACQkZFhuLm5iba0tJy6du3atqqqqg1PT0+9wsLCURsbG0RbW5vE1tZWjc1mz9XV 1Y3GxsbukpGRsebxeK0gEKhjZWXFYO/evU1FRUVkLpcLXlpaGvj69etfXV1dnfT0dMV3794tgEAg cxAIBEAgkNKurq5tenp6BAAAPm5uboZ2dnZyg4ODpZFIJBGNRgtBIBBgZWWV/fTpUz8ikYhTVlZW BoFAkvX1dSoIBCLNzs5OikQiEJvN5hsZGenT6XSWiorKGAgEckOj0eKmpqZZDQ0NrkAgAKmrq4vE YvGmra0tUiwW909NTek0NzdjqqurGwIDA+1wOJwwNTX1k6WlpfaePXtcfXx8yiorK12Ki4vzbt68 qdba2noDAAAAAoHgKioq8hISElQwGAy8tbXVBDw+Pv4MBoNh29rafm9tbQ1jsVhDOByupqOjE3Pg wAGxm5sbHAAA4OjRo+leXl6vzc3Ne549e7aNy+UO/PjxYx2JRKoCAADcuXNHurS01AQAAOD8+fO9 sbGx8KysLKeCgoIcPT091pEjRxQMDQ21L1++3Pzp06fBEydOzB44cGASh8NtX15evi0UCul8Pr+e w+EUHzp0KNTDwwMVExPjgEKhVOLj41lsNvtRRESEzs6dOyscHBxqdHR0ygIDA/djsVh7JBIpLi8v z1VTU8P87zsOu6ampt/Pz29oeHjYrrm5+Yi1tbVFbGysura2tmx3d7d5Z2cn/vXr1+t79uwZt7Gx wUOhUEl0dHTH1tYWc9++faYNDQ3dnp6ef/Py8pyfPn3qoa6uLkehUEhqamqY1dVVekJCQhsCgVD/ 8eOH0/DwcFtcXBzM2tr6oK6u7rkdO3ZA8vLyxoRC4QQej7+oo6PDDgkJMcjIyEi4du1aKQAAcDKZ PKWmpob68OEDx8XF5SeRSIxwd3dP5PF4aDqd/hGFQgkdHR3xbm5uzmAwWEFZWRm6vLx8pqWlRbmq qkr04MEDsrm5OY3NZje9efPGBAwG20ChUFhVVVVfXV1d7sDAQP+7d+9mnj9/nh0SEtJUUlKCLS4u vgUAADA5OYk4fvy45osXL5zAYLDS7OxsC4lEMlJSUuKamJisffv2LdrExKRudHSUdOrUqZDk5GSt t2/fut26dUvuf0ElGXl5eafr16/Tf/361WBtbS168OBBjrGxMd7Y2NhzfX0drays3GtqanpicHBQ VF5e7iwlJSWCwWCmDQ0NFWg0mpOcnJzA4XAECQkJx6ampjAnT54c1dfX3wAAAHBwcLilo6Pjhkaj hSsrK2u2trblAACszszM0N6+fXu4t7f3SlpaWqeKigpYIBDovHv3jpyYmNj5/ft3u8+fP5OpVOry xsbGKpfLBWtoaLD/N2gisVgM2trakm1oaNB4+PDh17dv30Zubm5eoNPpUqqqqq7l5eUXrl+/Pl5c XFxGJBINaDQaf/v27bqlpaWYI0eOoKhU6lZOTs4EBoM5sLy8jBYIBIze3l7LV69e5bLZ7OX5+XkW HA6nMxiMdSqVSn3+/DnZy8tLBoFAgEEgkIREInUiEAgmn88fLC0tHbxw4YKUg4NDRFZWFm1xcXHu xYsXPCwWK2IymYUIBCL//PnzPBQKBQKBQE7j4+PIDx8+MN6/f0+Mj49n3Lp1q2xubm6ezWb32dnZ jcXHxx9ZW1tDubu7VzY1NZ3y9vYel5WVdZ6dnQ0xMjLqYbFY/c+fP09kMBiMW7du8clk8hYYDAbA VVVV/J6eHvbly5cJ8/Pzw2Aw2EgkEs1bWFjc0dLSktuzZ8+Vt2/fno+Pj7/K5/Mh9vb2kNbW1rrs 7GzrgIAAlFAoBGlra6enpqbCqqurN169euV/6NAhUWJioioAAAACgcCNjY1tYLFYYUFBwVRYWJgp mUzmWFtbV/f29lr7+fmVNDQ0LOfl5f25du3aAwqFMrF3796e69ev36HT6epCoVBmaGhosr6+vh2D wQjZbLbSs2fPgMePH6++fv36gpubWwOTySw4cODAwbCwsBosFhvv6+u7tLa2Bty+fVt06NChgfz8 fBCDwZjk8/krNjY2/VVVVaCYmBifHTt28DQ1NWdhMFgQEom0zMzMVFJTU1N98eLFC3V1dVJeXt4u JSUl0M+fP2nBwcFdmpqaBxYXF+sLCgoWR0dH59ls9lhZWZn6P//8Y+bg4LAXAACD9PR09717977V 1NQEa2pq7k5MTAQxGAyenJwcZ2Fh4cOBAwc8eTxec1ZWVuy7d+8GBgYGjgIAAAiFwlYAAJArKyvD ZDJZ1d7evuHFixfznz9/fvv37983GxsbqBs3bhBmZ2fBERERXY8fP54fGRnhy8jI2CMQiNClpaVG GRmZbaOjo2p+fn4fxWLxalpaGggAACAlJWV/fHz8ZS6XW7u2ttZubGzcDofDZ+FwuD4EApGVlpZG z8/PN66vr8MXFxehdXV19Zubm9INDQ1yX79+1RIIBFVLS0uw4eFhFIlEMjA1NWUAAADs27cP0dnZ aaupqTkbFBSkKisryw8ICPjq6el5ZW1tDd7e3t707t07zJMnTypOnDiho6ysrMJgMPAVFRXC79+/ /+vo6DhSW1v7wMzMjPn161eFxMREzQ8fPpjV1tbyeTxevYmJiQ2JROI8fPgwdG5urmBqakooFosX GQzGmkAgsEYgEH81NDQUkpOTeVlZWbze3l7qzZs3JSAQCPf27VuphYWFCQ0NDdL/MXXWb0237/9/ rQPWwTY2umN0l0iLUipIeAMKyo2NCioitoJvsTGwQFG4KQMVQRFQaekePWrAgMFgA8b2+cXvcXyv f+H84Tqu63w+H4+Ojo4ZR0dHzerq6p+qqqqYpKQkXQ8PD9rY2Jg8AoHwmpmZ4Tc0NKS+fPkyAQAA YMuWLXAIBDLx4MGDvLW1tYmpqSn+jx8/ju7atQuZlpZ2gkKhmO3YsUPzyZMn3JMnTwI0Gs11ZWUF VlpaOjA3Nzf5V+ohNjY2jrSzs/vM5XK/+fn5tTY0NIz09fVNPnz4kODt7a336dMnz9zc3DfHjx+3 WFhYWPPx8YGDwWBTIpF4Y21tLTQjIwPT0dFRODc3V/P06dMRFouFaG5uliorKy9lZmbGweFwdnNz M+HAgQNaWCz2v5CQEIXLly+vymQy8uTkpD6Xy9Xx8fHJsra2fo7BYPRbW1s1l5aW1v39/ZmOjo7T L168eA+xsrJyioqK2qWjo/MzKytLaeLFcE0AACAASURBVH5+fvjSpUuL6urqYiaT2dTQ0FD67t27 FhKJpCKTyTBpaWlyfD5/5ubNm4eYTCZEWVl5BwAAQHJyciccDpfn8/lQLpe74OLiol5dXT04Nzen i0Ag4OHh4a1paWlqN27cmPDy8hokkUiEw4cPK9y4cUNkbGxshkaje4KCgnZ//fr1i6+vL6ytre2/ kpKSjYCAAK+2trbGs2fPqg4PD/PGx8cRysrK02ZmZkx7e/tdlpaWM+fOnVstLi4u8vLy4l+6dEmk r68/WFlZab9nzx6X6Oho2PHjxyG6urrBU1NT05s2bZKrq6vDfv36dVwoFK4kJSVtl8lkb/h8/mUW i3Udi8Uasdlsqq6uLuz58+c1paWlynNzc+iMjAznxMRE88+fP0/s2bMnYGVlpd7R0dEPBoPRDx06 hILD4TiZTDZ35cqVMR0dnR4rKyu/HTt2qKPRaEUTExMsk8ksKS4upltaWuqLxWL8uXPnmths9mxA QEDDuXPncA0NDf0mJiYuOBwO3dPT0+Dr66uupqYGplKpnnl5ebmBgYEm5eXlArFYjLp06dJBLS2t AAgE0kShULIgEEgTl8uV19PTU9y+fTt4dnb2c0tLixCJROrt3buXPDExMbtz586inJwcXnNz89D5 8+flkEgktbm5uXhmZqa6v79fDAKBsHg8XgCDweZYLBbcw8MDLhAIFk6fPt1UUlKirampSWltbV2u rKxsx+FwMBcXF4dnz55VfP/+/fj09PRbJyenWIFAsOHn55c1MzNDKi0tpZeUlOTp6uoq/e0gMAcG BpYnJiY24uPjt9TW1vbHxcW5k8lkS09PT/j169dBfX194IaGhu6tW7c6fvv2Lfv169eXQCBQn0gk gkil0nUcDidxdnZ+3dvbux4YGOjd3d09BgKBFIaHh7vMzMz0MRhM6/v371VhMNjqr1+/wBkZGazE xMTQR48edVtYWGA/fvy4oqWlRevs7JxzcXHZ7+Dg4Ds/P9/Z09PD09XVxQ8PDwtGR0dlZmZmQ2Aw WAwCgXonJyflzM3N7YuKik6Ojo6urq+vz2zZsqVjYGCgmUgktt24cWOKQqFssFisKQ0NjbX5+fn+ tLS0jc+fPyvp6+vPuLu7g42MjHaEhobaicXigezsbEZkZCRNSUmJAYPByGw2ewuTyezw8/P7Y2dn l/Tr16/7Y2NjRampqZLAwEAmg8EwFQqFmPn5+ZFfv34BKBQKGhERsQUKhW4sLCz8FIlEqsvLy8/8 /f3vEwgEOQKBYKarq3stPT19Ew6Hk0okEvq+ffsw9vb2XAwGIwwNDRWCQCBjY2NjDR6P1w0eHByU CYXCs3Q6nZmcnKzu6urKQyAQ6IqKCgaZTIa5uLjox8XFaSUnJ6tyudy2mZkZ7F/UdHZpaelSfn6+ UVxc3KbU1FQhCAQatbW1RTk6Ohrw+Xw8nU63sLW1lZw/f35IX18fBIFAZGw2G6egoLC7oKAAo6ys vDg4OAh6+fJlBxqNZhcXF/NmZmaCPT097SwtLb2Cg4MFXC73zZcvX/Tfv3+vjEAgNPbt20fq7u4m oVAoQn19/WsAAJAAAAAnT5408fX1NYiMjKRlZ2drx8bGdsjLy+NZLNaUgYGBSWZmZqaBgYERGo3e nJiYaEYikX6bmJiorq+vd4NAoJW+vj6HJ0+ePAIAAI1AIJzRaHRwbGxsxK1btwbfvXun5eTk9Kiq quoik8lciY+PL5FKpbrh4eE/1tfXJyAQCGplZWX0wYMHjbdv38ZTqVT68PBwJolEWiEQCMN8Pj+P w+FoNjQ0TIjFYh4SiUSGhIQs+Pj4nPzz509Uenq60NXV1ZpGo2W+fPky98GDB4w/f/5IVlZWNJqb m7v++ecfm7Nnzw5NTU0pDAwMoDkcTnJ6evrlvLw8EBQKxa+trVl+/fq1QFVVdd3Z2TlPXl5esnXr VsjQ0NCMrq4uesuWLfCZmZnxwMBAi7W1NXmxWLwgFApRcDhcpq2t7djc3DzS3Nw8oqCgYMdgMBSb mppqT506pUKj0YCuri6VL1++wCYmJibr6+v5hYWFNC0tLa6CgkJceHj4HAAAAIlE8p2dnc3GYrGT GAzmn/7+fjkHBwfZ/v37fW1sbAy9vb1x+vr6Lra2tlpjY2OYhISEWi0tLez4+Piv0tLSDj09vamC goITXV1dODk5uZG1tbUyf3//r3/frZskEkkFFosd6urqAhcXF9sfPXpUjkwm23V2do6dOXNGzGaz tXR0dDqrq6snHBwc+A0NDQSxWAzp7+/ftLq6WhcYGMgrLy9vNjMzW9bS0nLy9/ff3dHR8Z7P5/9X W1tbMTIy0gWDwXCFhYXI4eFhGYFAYH769Enp48eP46WlpZMcDqcrJiaG6O/vbzo1NVWZmJjIu3nz 5nBubm5AT0+PtYODgzkSiYSePn2a9O3bN6SDg8O0qqqqRCKR9OJwONnJkyf/SKVSAIFA6J84ccKQ SqWuT0xMNGVlZWX+le246evrbwEAABgdHf1VXFz8JTAwcPTYsWNNubm5Yz9//hwwMzMT3Lt3j3j1 6lVJYmLiDQAAAD09PU82mz2flZV1tKCg4L2SktKUnJyc1MbGRt3Dw6P09u3bT728vGgEAsFAUVFR kpycTAEAAKBSqVoIBEKmpKQ0A6mpqbnR398/pqqqap6dnf3H2dn5pre3d7WHh0dTSkrKgK+vr6ij owOFRCJlCQkJt5SVlc0+ffp0XlFRUefp06fcQ4cOqYeGhsL37t1L2b17N7SzsxMUEBCQiMPhDFAo 1GN5eflpMBg8amFhYcTj8SqsrKyMr1y58js7Oxu+ffv2DTk5OUBJSUng6elpWVRUhK6qquqFw+FC Go1GbW5ubunq6pq4fPly6ps3b17ExMRYKysro7y9vQU4HG6zioqKgYKCQndUVJTg169f5OfPny9s 3rwZjkKhEP/995+StbX1XFBQkBcKhbJcW1trJpFITD6f39fd3d0cFhaWJi8vn7a8vAyTSqVKNBqN aGZmpg4Gg4kymUwskUimIRAI9sKFC/W7d+/u1dDQQOFwOJ1///13NSIiAq+oqIgeHx9v5HK5g+bm 5sYNDQ1cNzc36d+bfHdJSUmnubn5P+3t7TwDAwPS58+f12/evHn/1atXHRQKZUFeXl5XJBLxRkdH 3+jp6XVra2tjXF1dU9+/f680MzOzhsfjP2zfvh1saGhIAIPBNF9fXzwej59LSEiYvXv3rnJsbGwz FouVs7S09ExKSuqXSCTytbW1jw8dOhRka2u7v6mp6T8Gg8HC4/HzKBRqvbKyUg8MBvN0dXVReDye ODMzs6yoqCiTk5MLXlpaqomIiHDk8/lSFosVDAaDpzw8PNY4HA5ofn4e1dzcPNPd3T3m6OjITEtL 23/v3r3uiooKJ2tr66oTJ074gUAgTlhYmIBMJn9TVlbWF4vF4yAQSKigoAAPCAhouH79ekBWVtY9 mUw20traSoqOjpZ1dnaK1dXVDczMzJhxcXH+f9Hv+0NCQrxBINCyVCpt+vDhw/uWlpaeiooKUGZm JtXQ0LAThULhBALBYnt7+8ODBw/G3r9/f2Zqamr28+fPhmfOnIFqaWkZeHt7yxYXFys+fvxYbm1t DVZQUKCZmpoaaWtrq/z+/buourr6T0RExPq///6LeP78OZNGo81ZW1srjo6OLrPZbNLExAQqLS1t orCwUFZUVBQ0NjaWVF9f74/H45/OzMwYAgAg4fP5XFVVVY61tbV+e3v706qqKv2oqCjowMCACAwG 083NzWf//PnD5/P5PBAINGNiYkIEgUBQEAjERSAQigAADE1MTLRpaGio8ni867W1tevv3r3rh0Kh 4szMTMLU1JTG69evk0ZGRj55eHgYMBgMTaFQ+EcsFhOSkpKIIpFoncPhDCQlJZFjYmLmOzo6hioq KuRzc3PHDxw4oBIYGGhLo9FIIpFoGQwG816+fLlBIpFAHh4eh3/+/JmipKSkpKCgoAU5e/asj5qa mrmZmVkFi8VCyWSyTyUlJVBra2uriIiI7RcuXIihUCgNLBYrcc+ePZtIJFJNS0sL7c+fPw0+Pj4c MBis7+joqIrH46n9/f1SHx8fm42NjWGJRFLy48cP2devXxmxsbGn/vz58yEvL0+rrKysNyIiQoFI JK5qa2v3DQ4OUggEAr2/vz/369evhqGhoWM2NjbjCgoKjNraWkpkZOT/AACQJicnz9y5cwd5+PBh 6fT09DqRSFTd2NhYSk9Pf11QUPAYBAJZbWxsDPb09AjIZDK+oaFhcGVlBWJhYaGdn5+f4+Li4r2y stKQmppaSiQSCdXV1aUPHz6UhoaG/qukpLTw6tWriQMHDpjV19f/YTKZygsLCyNycnJ67u7uSHt7 +4hv3759sbGxQdvZ2ZHq6urAW7ZsQUVERLjl5uaqQiAQGIPBIH369Kne1tZWXyQS/bK2to46evRo lqKiYo6ampre6OjoSnJycnFVVVXX/Py83OvXr/PCwsLcGxsbZ/38/C7AYDBdBoMRoaysPNHa2jr7 588fOz8/P4RQKJRvbm7ud3Z2DqLT6UIlJaVEEon0CQwGCxITE2Gampp1xsbGInNzczcqlYrZs2eP ws6dO7/n5uZO/PjxA6qlpYXy8PBQd3BwoFCpVDwMBlvH4XBkCoXC/v79ex6VSpVpampagMFgJBaL hUkkkkkMBqOMwWDsGAwGhU6ng11dXaXz8/PL165dgyKRyB/W1tZyDQ0N4wAAqO7atQt06NChJTAY LKDT6YPq6urBw8PDMigUiuzr6xt3cXE5c//+/S8kEonT0tIiuHLlygkAAHrfvn074u7urlZXV9eh pKREFIvFY2AweMLDw8Px9OnTv8BgsDOTyRT9+PEDt7a2Nnvu3Dmqvr7+rpycnA8/f/7U7uzsXDA2 Nh43NzeXIBCI+c2bNytraWkhuFzuSGxs7MaZM2dICwsLg5qamlobGxvIR48eFcNgMLqcnNy0gYGB Wnl5+e/Q0FDe8PCwnJKS0mJ0dLQgOjqaQqVSIaOjo5Dw8HDUt2/fFF6+fFkZExOzic1mb9ja2lo7 Ozvb3L9//2Fpaanu8ePHx+Xl5bV0dHQsKioq+vr7+4UhISEUOp2urqenh7awsKAqKSl1CAQC2K9f vzgODg6xAACAR0ZGZq9fv762f//+nUgkcozH4/1nZWV11N7eHqOmpobR19eHkcnkKXt7e4Srqyuv s7NTevnyZZ6xsXFxbGzsJh8fH6yjoyPi7t27vbGxsRChUAi1tbWl2dvbr/r4+PCZTCa1tra2lkgk qsjLyw+XlJRQ/vz5s6qnpwfq7e29/+XLl2EqlaokJydHhAQGBsIPHz7cqaKisqaqqmo7PDw8NTEx MYRAIJba29vBHA7nxNatW5+eOXMmytTUFPfq1Suqi4tLo4KCglgqlbooKCh0u7m54fLz89EBAQEZ zs7OOtnZ2c36+vqKbDZ7fffu3WAVFZVSIpEowWAwPDc3tykcDuegra3NMDQ0tHz69OkSjUaDpqSk WGdmZnYjEAhSVlYWUUtLa0NbW5tEJpPRZ8+eTcXhcGJdXV3ZzMzM5ObNm4+tr69/gUKhlubm5oZD Q0OfiESiWVdX1yUUCqVLJBKX2tvbl69evepw+vTpMgKBMJ2RkfEdj8cvLiwsKEVHR0eqqan95+rq ukSlUpswGAyht7fXEQKByFRVVVP37t1LotPpXgAAAOPj490IBGJQVVWV3d3d3fr9+3fEjh07IAgE omffvn3IV69edSCRyFokEsnQ0tKSzs/PEycnJyvHxsYAKBQ6aG9v7/Xq1avmzMxMEIPBEKSmps6k pKRIDAwMpD4+PoHp6elVmzdv/tzX1yf7+fPnHzMzM2FPT49OWlqa58LCQrOioiJDU1OT0dPTc7O/ v18IAAAIgUDMVFRUAO7u7ui2tjatN2/eEMFg8KKJiclCfHw80NTUNCwQCFQEAkEDCARyNDY2Rv74 8aPJ1NTUZHl5mT8+Pv6prq7ut42NjRGFQjlobGz8ZmxsrDQpKUlIIpG4MzMzv0dGRn7FxsZWBgcH b0YikcwnT57ce/bsmbKKioqEwWDMy8nJMdva2n43NDS4/Pjxo3pxcVGorq4+cP78+dWIiAh0VFRU ydLSEqy+vr6/vr5+9uLFizdsbGw0tm3bdt7a2loTh8Nh2Wy28fz8fCOXy+1SU1MLVFRUZERFRQnQ aLRde3t7N5PJNNLV1cVnZWUty2QyWWpqaufZs2ctHjx4IHJzc8MeOXKEwWKxZCKR6Ke/vz/20KFD H1dWVnROnDihVlVV1b5582bzjo6OCR0dHQuRSMT18/MzS0tLW4NAIDxjY+NeDQ2NOzY2NiY8Hq/5 woULoe3t7VwAAMAYDGY6IyND+vbtW9Pc3NzZnz9/rvv4+FB4PB6XQqGoBwUFJX78+PFaRUXFxv79 +9MePXpUjEajsQoKCjglJSUSgUAAVldXRRgMZiMvL2/a09PTnU6nK1CpVJO6uroyIyOjACcnp8dI JFIwOzvbSKfTj1hZWX2qrKz8UldXB7ewsCDa2dmhN2/ezL9x48an9PT0OxgMplFXV9f627dvBTk5 OTtDQkJqjx07FiaRSMB8Pp/v5uZmoaGhQdPR0VEdGBj4kZubuxAZGRlFJBI109LS+igUiujt27fG bm5uyyEhIVZv3rxp0dXVhUH6+vpM5ufnZz5+/Djr5eVFT0pKmuNyuRSRSCS8e/eubXJysmpERASx sbGx1MDAgBUQECA+deqUe0pKSrKdnd1Gd3d3AYlEcvHy8nqWkZHhMjY2ptbV1UVmsViKeXl58ydO nBD29fXRJycn+wUCARyNRmOrq6tRR44cQXt5eXFbW1uXyGTyEBKJbL537x4pOjpafP78ea9Hjx79 SEtL63R2dp7duXNnmJWVVUVlZSWlsrISFhYWZgWBQNi1tbW3qFQqbd++fdNSqfS5k5OTEhQKlcrJ yRE5HA7fzMxMfnFxcUAikUjxeDwqLCzsm4WFhc6dO3emw8PDY8rKykaPHTsGe/z4sbKdnV35jh07 hqampn6cOnXK+dWrV/9TVFScJ5FIKtbW1n3FxcWjLS0tWg4ODj8/f/7cGR0dHQEAQO+ePXtYPB5v enV1tVJdXT350KFDg9ra2jZzc3MrBgYG5Obm5r5v374hnj17ZpyXlwdKTU21CQ0NxXV3dwttbGy6 dHR0lltbW5nW1tbeBAJhDQwGK9jb2xvGxcXlBgQEbM/MzLxDpVKB1tbW5c7OTo3t27fvW15eLtfT 0xOoqqoidu7caba6urro4eGxpKmpeR4KhY4aGRklOTk5ufv4+OxpamqqGxsb69q9e7frwMDAoFgs 3pBIJJjy8nKpkZGRXltb25eAgID1Cxcu6Hh6enb9/v0bMjo6SnZ0dJRduHDBZ/fu3T9LS0t7jYyM VPr6+nhOTk5HcThcwK5du96fOXOGXVlZObOysiK/tLT0wcPDQ9XT09OypqZmIDg42NTAwAAWEhLi LhaLe5qbmyvpdHpPTExMSmdnZ4e7u/smMBgMmZ2d5err67s2NzcfZ7FYoWg0WvHAgQMVMTEx7lKp tMzMzGz833//HfHz83MeGBhY9fLy8sRisRwNDQ2Zt7e3pLi4eKyxsdG8oaEBdu7cOYhIJNL7+PFj 7/j4uFxAQMBWOTk5gUQimTEyMophs9nVHA6nVVNTcyeNRtv069evtwAAVKWlpclmZ2cr0Gg0SV1d fXBlZUXpwIEDztnZ2Z+Tk5Objh8/DnNzc3v59u1by7CwsNH5+fn+oKCg7d7e3uCgoKDvZmZmLGdn Z4K+vr48k8k0Xltbm2KxWP6rq6scY2NjRSQSqQIGg8VYLFZjYmLiG51OX1tdXWXJZLJ5LBYbIpVK V1xcXOp9fHz8EQjEkqWlpVggEGBmZ2elqamp6Xw+/+HIyMiSn5+fIZVKlTQ3N6tYW1u3y2QyxIED B9aEQiFv+/bt2+bn56fLysoKLC0taWAwWGNhYWGYyWSybWxsmj98+CBXUVFBeffuXSufzx8xMzOz c3R01AaVlpYmaGlpUZeXlzurqqqY3759Wzl16hSmoqJiEgaDdezfv/86h8PhU6lUCRqNxu3evZuz sbGB+lspZD9+/Ping4MDr62tbTg2NpYbGxs7oamp6aqjo8PmcDjjBAKBuWPHDuXk5OTB1NTUb1VV Vf8IhULeiRMnhnJyclzJZLKrvb19wq9fv1IMDQ2vtra27l5eXm7T09Pr4nK5B+rq6nIYDMa6TCaT 7t69G66srFzr6uqK37FjR9jr16/rZmdn+8PCwoySk5OnFBUV2y9evHgbAADg/v37qWQyWTw9PY3U 1dWlr6ysVKuqqupVV1eXFhcXa3A4HMP29vZOJBJ59tGjR6/d3d0LGQyGaVNTExYKhTqamppqgEAg cWtr6wCbzdbIysq6GRIScnx9fb3f2dm5tbq62m1tbQ2HQCAgZWVlZbdv356j0WhCOBwO1tHRWfL1 9VWJjY2V+/r167/9/f1f1dXV7cvKyvIqKyvLTpw44ZWXl/ejq6uLFBkZCTIyMjpy8+bNx97e3oYY DAZDp9PZjY2NJb29vYvnzp0jPXv2rMHV1fXZ+Pj4E0VFxX0AAABVVVWHZDIZ6a92TVBYWIhXU1Pb 9PPnz0cODg5H/1+Fe3R09JRYLKZqaWkdtra2PnD37l2qsrKy6uDg4My+ffuwW7ZsmV9YWGh5/Pjx f15eXslTU1N6J06cGDc2NlY8duxY9cLCgv6vX7/0p6amBj98+NCyuroqpNPp+i0tLfOpqanJk5OT 72dmZlYTEhK6zpw5w9LQ0Oik0+lH6urq3h4+fBh3+vTpDVNTUxSFQsGyWKwVBAIx5OrqOvTff/9Z iESig7Ozs5/IZLK3s7Pz+e/fvx8Fg8F4qVTaNzMzM0wikVRIJNKn169fg1JTU7u7u7s9Z2dnff/+ FySQyWTIyMjIbyUlJduqqipmamoqTVFRET49PW1aU1Pzg0ajzaqpqTlJJBLBuXPnqnbv3q3t4OCw hEaj17hcbkRNTc0DOzu7Q319fQUtLS1f3N3dPdfX10EIBEJvZmam9evXr/1eXl6K58+f/8Nms8fu 3bvn0t7eTrl3796kSCRaZbFYQFBQEAkGg22anJxsRyAQIBqNZiyVShcePnyY7u7urgmHw0mLi4sT Kioqyzt27Oh58uRJNJlMRq2urgpxOJzk27dvORwOR15bW1s7Pz9/TE9Pz7C1tbXEyMgo6NixY/4A AAB5eXkFXl5e0+Hh4TQQCMTbsmXLbG9vrxiPx8P6+vqIQ0NDKo6Ojg3t7e1m79+/D19YWLiMQqFs e3p6RmJjY+c8PT2biESikYKCQt2OHTsef/v2LXn79u3aP3/+BMBubm7Xr1+//odAIEhaWlp4lpaW GxMTExIPDw/t1NTUHXQ6fcrQ0NBIQUHBAo1GI5SUlHJmZmaqpVJpZ3Fx8Qd7e3uhmpraFVNTU2UC gaC3ZcsWHzgcThGJRIMnTpzQs7e3t+3u7p4vLy9vF4vFVCKRKKDRaBQAAIDm5uaWZ8+ePUxISPi9 sbHR0djY6Juenn4LiUSqHDt2jNPT03ONzWabg8Hg+tu3b4uysrLk19bWoD4+Pkrt7e2N27ZtG4uM jES2traO3bhxg0oikVhisfgjAACigwcPWnt4eJj5+voq3L9/H8Vms9mVlZUQCoVik5iYqFpaWmrw +/dvi8OHD+/t6ur64ejoeCg+Pn6isLBQFQAA4OLFi38GBweLSCTSOggEgiGRSBkcDldYWlqC19fX x66vr8ujUChwfX19laenZ+DNmzfJmpqacxcvXpTbvHmzKZfLRSUmJiIuX768eWFhofJ///vfUUND Q9qFCxeOLSwsqLBYLC01NTV6W1tbd3x8fPbVq1dZc3NzsNbW1kWxWDzR3t4uxGAwMC6Xy/L19XUh EAipioqKUQAAAP39/elaWlpWZWVls7Ozs78vXrxYBAaDRzc2NrgWFhYqwP93wGAwhMfjIe7evXs0 Ly8P8/DhwwaRSDT233//UTo7O/17e3vpYDDYRiqVjn/69GlfbW3tIhaLXWYwGFg1NTXQ27dvCRMT ExMBAQEiKBSq0dTUpGZjY8NXVlau5/P5r9lstgAKhYoSEhKye3t7hVwuFxcXF5fq5eUlefjw4QcM BrPu4uJSXVlZ2ZiSktKZnZ2t9/Tp0zg5OTnB/fv3D3Z3d0f6+fmxAQAAXrx4EfYXGc/v6ekZjY6O zkQikeOtra3YxcVFs9nZWd937949aWxsvBkTE5MyNjYGpVKp1rq6uoo2NjaNIpHoD5PJnHv+/Pn9 v7y8TUpKSryoqKi+lJSUw3g8Xu7ChQuD3d3dih8+fIhisVisqampotXVVfG2bdt29fb2zkKhUDQY DG5UVFQ0xuPxq0wm0+bChQumERERx3fv3l0tlUq1yGRyzdjYGB2LxbJaW1sFAAA0Z2Zm1qHRaExc XNxPHo83tXfv3gMsFos+PT2NyM3NBaNQKPX09PRwNBo9Li8vj0ahUGM3b968AoVCzWtqapa4XG6/ vb39RktLy4KWllYgkUgU/x3hNAaDWS4rK+trbW3F+fr6TqelpVmHh4dvKisrY83Pz6OcnZ3bZ2Zm KHFxcRwAAAAej4cQiUTVHA4n7/v375pJSUk75eXl1wcHB7daWVmdt7CwCOHxeI4ODg4ycGpq6gES iQQhk8mOurq6nTt27KB6enrSo6Ojr3d3dw/39PSApFJp7dLSUh8AAMr79u0znp2dlR07dkywvr4u xWAw8pOTk/cmJyfV2Gw268CBA6KKigpmW1vb9IMHD9ZmZ2crOjo66lNSUlyfPHniAAAA0NbW1mpq ajpsbW3tuGvXLrOkpKQgEAhEg8Fg2ICAAPeVlZVBPB6/Mjw8jAaBQJNPnz6lm5qaDgEAsODp6cmC wWAMKyur6Ddv3jAKCwuxjY2NFmvwqQAAIABJREFUiIcPH5YHBAQYREdHt4LB4AYul7uSkZHRT6FQ NBoaGkh2dnYG6+vrH8zMzFwbGhogk5OTX1xcXGL37dunn5aWdqm/v1/bxsZmjsFgfLh06ZLQ1tZ2 7OXLl2QajWb89u3bT0FBQadFIlGNgoKCukwmQ1pZWZUODw83/TUkNUGhUFlSUtLbR48eaVGpVExm ZiY4KSlpxdDQEGFpaZlYUlJipKio6PDz58+c4eHhd0wm09Df358nFosNvn37pjM9Pe1NJpOllpaW CigUSkcmk8m1tbWRsrKyyjkczlJdXZ2sra0t7W8Sb66/v/8DGAyGVFdXc728vHarqKiEfPny5WNI SEh5bW3tPUVFxcclJSVXTp48iU5MTPxx+PDh2ywW63+3b992GxkZKblw4QKJSCTGv3v3LhIOhwvA YLBiQUHBcV1d3ZWNjQ1iXl5e1+3bt3cqKiqiy8vLR3bu3CmxsLCYffjwofGDBw8YV65c8SEQCBgd HZ0UPT293QKBYP/NmzeJly9fXqurqyOcOnUKTiaTo3V0dJS+ffvmbWJiYgEAAKCioiJ69uxZLoFA 6D548OB9Ho+36X//+58jGo1euX//vuf4+PhTkUjUbWxsDElLS7OPiopar6ioEAmFQm53d3eRsbEx CYPBqP7FcZGfP3+ujsfjaRsbG4CXl5dBZWXle1tbWzUmkylcWFj47e/vn19RUcEEAIDIYDCs2Ww2 VVtbu2fbtm1Ho6KiZmg0mr+hoWG0VCoF9PX1sd+/f6/NzMwcB4FAdQUFBW2RkZHHwWAw0NbWNmFi YrIThUItdHR02NbW1qLk5OSWORwOpru7e/Do0aMWq6urg3fv3o2ZmJhYbGho6CgqKhITiUTR6uqq 4PPnz9Pq6urr9+7dq9vY2GhEo9HGaWlpB2JiYuYdHR3lDQwM6F++fLE5ePBgY3l5uVhdXX0dDAYj /waTDpeUlKhqaGjk9fT0EFtaWsgGBgZb9+/f30kikSaXlpZwaWlpnjweTwEAAIDJZJrHxcXBvLy8 Yqqrq8fMzMy4wcHBNiwWa+zZs2ezYDBYfOXKlYbR0VFD0L1797bTaDRVX19fw6mpKRSRSJSMjIys 1dbWrv3+/ZuzuroKxMXFgdra2ibz8vKMc3JyrFNSUl4GBgbiuVwu3sjISDowMKAQHx/Pf//+PaK+ vh48OTkp//Xr198MBoNQVVXFLy4uNpXJZLJPnz4NqampYe/cuTN45cqVTSQSaXHPnj38srKyoPv3 75f19/cX3r179zcAAMDZs2djUCjU9Pz8vIaGhgbU39/faGFhobanp0eGwWBgSUlJoN+/f6eur6+/ B4FAeqGhoalVVVXuurq6PzMzM7O3bdv2b0hIyKSWlpbjuXPnpj59+oSUk5OTv3XrFnDq1CkVPp+f T6VSI9vb2++bmJhE6+vr/ywqKhKoqalZ/vr1q0NFRUWlqalpgs1mU1VVVU2Wl5cn/u6lZzAYzJab N2++iYmJ0bW3t89//fq1CR6Ph5JIJPWOjo50Ho/n9ubNGySZTObicLg+DQ2NDRsbGwMYDCYlEAiw Bw8eUE+cONHw5csXUktLi5RIJE6FhoYaFRcXz23bts32xo0bA66urvMpKSldHz58cLl69eqqn5+f qKenB+vk5NTf1dU1UFBQoBESEgJxcnI6s7y8fEUmkwWIRKKynJwcMZVKFTk7O4sWFxfl5+fnya2t rfioqKg9AAAAz58/P3jjxg1rEolUBgKBdN+8ecNhsVjPlpaWqi9fvnz+2rVraT09PcUnT56Uffjw wVkoFFaHhYVJEAjE2vPnz22+f//++OrVq95FRUW/b9++3fvq1SvHhYUF9+3btzcODQ3hTU1NJ9LS 0hR9fHyGMBiMLDc3N2B0dLRkbm4OdunSpUF3d3dcbGzs1ZWVlfaWlpZHtra2D9bW1n7zeLznfX19 Qy4uLuXFxcXB1tbWliKR6I+CgsKesbGxnxYWFtqWlpZr2dnZ8yAQiLqwsIBXUlIykMlkgKKiYldt ba1EWVl51djYWNDc3Oz65MmT7ysrK93Hjh0LZjKZ41AodJDNZi8KBAL8mTNnljEYTC2fz7etqKiQ 3bp166Svr+/9169fK2dkZLw/fPhwLBgMbt3Y2MCDQCDWvXv3sqhUqrmfn5/i8+fP85BI5HxjYyPt 9u3bUT9+/Pi5tLS03N7eTqLT6eUMBkNjYWEBIpFIYNHR0afS0tKiQkJCnFtaWtpWV1c73d3dryEQ CNnQ0FBxcXHxSyMjo6jMzMxye3t7upOTk4eGhsYuoVBYtLa2NodCoQgoFCpgcnLy6erq6pSKisrZ 7OzsdF1d3XWpVAqw2WzT8fHxTiQSuVZdXd3j6+u7RyKRAMePHy8ODw/HYzAYydzc3NLFixdZT58+ 7Z2fn2ctLy93lZSU4JWVlTuHhoZ8INra2na9vb39NTU1Zf39/QpmZmZQOBwuZ2NjowyHw8VQKFQ6 NjY2sHXrVmssFrugrq4u4XK5PV1dXbpLS0vwmpoauSNHjkzX1tayNzY2SCoqKqjMzMwMT09P/q5d u5xaWlqmnJyc6F1dXTwejyefmZk5Ii8vLzp69OjV9fX1pr91Yaauri6/srKS6uXl5VRaWhp57969 kYcPHx64du1aJpVKxQkEgj9GRkbmYDB41tTU1AMGg/0iEAjCxsbGQRUVFXJ2dnZLWVlZdmdnp1xr a6ull5eXalBQkBwUCl3S0NCAa2trg6amppZ0dHR68Xi83vr6+vTy8jJHXl4eTyAQdjx//nzA3d19 iU6nm3E4nH4EAkGxt7cnFRQUDCgqKoobGxtHX758KUUikbMRERHt6+vri0gkklteXi42NzdfzsnJ Gdq6detRIpG4qK+vH6mtrZ0vEAhI+/bt8wsODkbv27dvkUKhaI2NjWHFYvGgoqIi4tevX+LAwEDq 169fuebm5lQjIyOl+/fvD+np6eEsLCwUT58+bV5dXZ3//PnzFHt7++9Hjx6dmpiY0CWTyapJSUmS jY0NFg6Hi83KyrI/duzYjJ2dHWzTpk2qs7OzC6Ojo8oaGhp5MplMNzIykjUyMlKtra39vbq6elgo FJIQCAQjJSVl3sfHxzA8PHy1pqamOyIiIkooFH6dmpqqLS0tJZSUlPz29vZuU1dXnzxw4IDh9evX b9bX11scPnwYrq+v7+/u7g5LSEg4s3fv3n8KCgpI27dvx3V1dS27uroS7O3tQWfOnLFYW1sr9PX1 jf7vv/9+btmyRSSTyZbpdPpUUlLS3c7OTj0vLy9HCASitL6+nm9gYPD+0KFDT/T19Qdv3bolB4FA wKqqqvyJiYnmxMREL3d3d8T169fH/P39Y3R1datfv35dHB8fr3TkyJH8sLAwQzQa/ZVAIPDPnj07 yuFwlo8fP96Jx+Mdp6env2lqajY2NzerYrFYEIVCaQ4MDPxfZWXlkIKCgtDY2FhnbGysQiqVtvr6 +rrB4XCN27dvt9rb2weCwWDl2traLxEREZshEAh0cXGxn8lkSmxtbbVQKJTAwMBgc1pa2g8rK6vB vXv3viAQCM0mJiYQbW1tveTk5OP5+fkB58+f16ypqcHo6Oj0Li4uSjU0NKwIBIKpTCYr1tLSYo6N jdH37t1rLRQKK/Lz8wtsbGxOR0dHp8DhcCGJRBqenJxczsnJgdNoNO7k5ORKYWHhMI1Go0kkkimJ RAIaGRkp7e/vh9bV1dUTCAQ5d3d3EJPJ3MDj8bYMBkM3PDzcColErkGhUNzS0tKIjo6OKoPBWDEy MpqCVFZWXpqfn2/NzMz8Z2JiAmlgYMBtaWmZUlJS0ty7d69wcXFxVkdHh8JisTBGRkbkzs7OVqFQ uGpkZKQ/OjralZqaqr+8vKzz4sULARQK/ZaTk7OMwWDEUqlUxcrKSjU4OBg3OTkJJZFIQ35+fh6u rq7zRCJxw8vLy7u/vz+ETqf7bWxsLA8ODo6QSKTBhoaG8uHhYWhLSwvk2LFjcUFBQUp4PF46ODg4 lJ6eLufm5qZFIpHWTUxMnCMjI4fj4+M1V1ZW5IOCgpgIBCLc29vbws3NbX9kZGQjFAr9mZeXpx4a GioBgUCrAoEAOj09LZbJZG0FBQX6tra2DCgUKubz+XVhYWH08fHxTgwGA9PU1LRta2sbw+PxvMnJ SeG1a9dyIyIiXMlkckNVVRUmISEBHxgYCNfW1qZramrO5ebmrvz8+ROhpqa2oKamNgCFQl3BYDDK zMyM8eHDh/7du3evUSgU2fj4ONbOzg785MkTSmFhIcTT01N269at8XPnzlnz+fxpDAYDqKmpDbm6 uu5SUlKqSk1NJYHBYMiHDx/ifXx8TKOjo4k3b950WVhYmHnw4AFtcnJy7MCBA5u3bNmClUqlz5BI pOmtW7fa9u3b53Dp0iWOv7//9Lt37/TOnTsHhIWFeUKh0CE3N7ero6OjH//8+cPIyspS/PLlyy+p VCo+ffq0QEtLa1ZdXX1HZ2cnGAQCLa2srCx7eXkF4/H4nwQCIU1ZWRkeHBzs1tPT8/Pq1atTUqmU HhoaWqisrKw3MjIyc+vWLafx8XEBk8mc9/T0jLt//35bbGwsgUAg8DZt2rSlpqameufOnZv5fP7Y jx8/JshkMuXEiRPfzp8/n4fD4WyXlpa6o6Ojl9vb29unp6dZQUFB7IMHD66rq6uvGRgYsL58+ZIP AMD4ixcvuDdu3EC7ubnRMzIy3DZt2uQZEhLS/P79+6H+/n5yfHx888mTJ1m3bt0S/vr1a4xKpZY7 OTmFq6ur/7a3tx+KjIxMOXjw4O27d+8iExIScF++fPl56NChZGVlZXZRUdG9oqKistOnT/9vfn4+ E4VC6RgZGRHBYDBEJpOBWSwWqrKycsLV1TWgqKjow+zs7GJcXJxMUVHR+NKlSzmqqqqCiYkJSXJy ck9CQkKwo6PjOhaL/ZyXl6dna2t7OiEh4WtgYKD53Nzcm/n5efPw8PDV2dnZci6XiwoNDdVRV1df NjAwWCsrK+vatWuXAx6Plw0MDMhIJBLi8+fPC+rq6gShUMiRSCRyWCwWBYVCN0gkErmwsBC4cOHC XoFAMASHw9GDg4MkKpWKw2Aw1PPnz2/Mzc1dfvnyZWVgYGDulStXcgICAnwjIyM7wJaWltVGRkZS GAy2HhERATt48CDr+vXrahgMRjUvL6/i8ePHNAsLC8GDBw+A7du3r6uoqNg6OjpuMzU11bpx4wZG JpPNDA4OLs/NzUEaGhrUuru7l37//m14/PjxwPr6+iY4HM7m8/nQI0eOMH7//l166dIlBo/H083L y7urp6e3XSaTLQkEgvmmpqZ6Z2dnFw6Hs2JkZDSnq6s7CAAAgEajSWfOnIHGxMT8Lz093XF8fJzL 4XCyJRIJCIvFDpw6daoCAoHIXF1d22UyGbC0tHRm8+bNaQ0NDQohISERFy9e7KipqWm6du1ao7m5 +UksFjtaUlIyOjo62jEzM1OHRqOn3r9/L79r167nY2NjOB0dHQgcDgcrKCigzp49CzEwMDDMysr6 Nz8/v9/AwMBKSUmJBwAAMDs7qwAGgwEKhTIjJyenJBQK3f755x/ZysqKNwAAc1wut+rcuXMvIyIi wl1dXf89dOjQp23btom7uroKCgsLJ5uamjo6OjqEKBRKdfPmzeK/kVD88ePH5ScnJwuuXbs21dra +qOqqoq/d+/eUwYGBlBlZeWWzZs3f0QikTOnTp1qjIyMXJBIJLfgcLjBrl27IrZu3eqVkpKyDAAA MDc3h8dgMGcjIiIsg4KCppubm8vgcLjy2tpaMZPJhAcFBS3KyclNMJlMaxqN5vf06VOknp7eCAgE Ah4/fizz9/fvWl1dVTty5Ehxe3v7XgAAJEVFRRulpaXZXl5eoSdPnqwuLCxsvX79+hCDwRDFxcUx DQ0N75w6dWqFz+ePTUxMHI2MjKxhMBjis2fPfg8KCnr0zz//pCAQCE86ne5ZVFS02d/fXz83N/fD 2NhY7I8fP3jd3d3lhYWFs5OTk5uioqKGiUQiOioqSiKRSDT27dtXV19fD05ISMi+ffs2XyqVjkkk Eu6DBw+erqystNJoNJXCwkJ2cHDwho+PzwuZTMaGw+Ebly5dst2zZ88mMBgsiIiIsHJwcDDmcrlv WlpatO7evSsCg8FASEgIY25urioxMbEIBoNZubi44LW1tf8XHx+/tL6+zvlLO7KEwWB4Pp/PNzY2 Nrt69WpOSEhItLOzs+fa2hoMj8fbXLt27ay8vPx4QUHB6uHDhxlEInFZRUUFf+/evUAej3d5aWmp zMTEZMDY2Pj1r1+/VrKzs9uOHDmyfPbsWZ24uDid9PR0kYqKiuKDBw96KioqbOvr63/V1ta2AQAA vHr16rW7uzsOiUSu8vl8emdnp8jOzs4RBAKRUlNTJQ0NDTINDY2Kly9fcpaXl0V2dnZao6Ojg2tr azNkMjmlpqYGHxkZiamrqzv64MGDm3v37q2FQqEyyNTU1LuUlJQ+EomkgEAgOs6ePYtKSko6UFpa +lxeXp4Og8FW8/LycEwmc/3s2bO4ysrKoc7OztmUlJRBOBzeVVdXZ0AikczDwsKGgoKCkM3NzX8K Cgrq4XD4PjAYvEEkEvVLS0sf6+josL5+/TpdXV2NCwsLaywuLsapqakpw+Fwoby8PNzAwIBy69at saSkpOMUCgU9MzNDhUAgNWQyWd3HxweFRqNJUChUrKSkZCQvL89ITk4uefDgQZK9vf18TExMW2Nj o1xoaOiLycnJyPj4+HUQCMQ6dOjQcGVlpVRTU3MBAAB5FArVlpSUNO3o6AjetGkTWEFBwQmLxSqR yeTlR48eCe/cueNw5swZg/Hx8ZF79+6dZbPZNiKRaKC2tlYuJCREoba2tn1xcRFqa2urqKCgsFZf X/+0oaFB68mTJwrDw8PWGAym3NbW1qq5uflNX1/fhqOjo9qNGzce3717twKNRuvB4XAog8EQvHr1 Cvf27dtr2traLi9evOjLyMjAnzlzZqGsrAynpKQEBgBgMTIyUhYbGwveunWrvI+PTwydTlfW1dWd KygowAEAUJmQkKDi4OBAoFAoL2ZmZj6SyWRrgUDQQiAQlM6ePVutqalJOHTo0HJeXt4kiUSSqKqq Dl64cKHx9+/fyy0tLaR//vmHOj8/L+rv7/9FpVLrysvLFX19fdUqKir6tm/fLs7Pz5c8evRou7+/ P1RJSYnI4/EaPD09w3V0dNzT09OTJicnNVxdXcW6urrs27dvY/39/cfz8/MRBw8eZIjFYtnly5cp 4+PjSE1NzTUbGxt0ZWWlZkhIiEVeXt4VBoOxTqfTEYmJiQuurq7lw8PDEltb29FXr171WVhYGFhZ WQEMBkNtcXFRAQCAZSqVSsvIyACpqalJ2Gz2QEREhLyrq+saAAAbqqqqaywWy0YgEIyfP39+J4/H K0Gj0Ys8Hk+irKxMHBoa6puamoKQyWQoBoOZxWAwZuvr6/UWFhaLampqi+Pj4x3Z2dkKKBSqce/e vf8EBga2BwQELFpaWsotLCysxsTEwOPj44nz8/P3wWAwc2RkZHFlZaU6JCRkj0QiAUQi0deWlhaU VCqtIBAIXtPT030uLi56sbGx9enp6YtNTU3DpaWl2IyMjFk3N7ftampqIyYmJoiJiQmFxcVF+tev X9fW1tZkLBar68iRIyv+/v7ysbGxR+Li4kxbW1vfYbFY5KNHj0Tfv383fPLkiVFjY2ObtbU1KDU1 9URwcHDG4cOH90RFRfX/888/3Nu3bxsMDg7O1dTUTN+5cwefm5vLw+PxFQ4ODgQ7OztsaGgoGoFA rJqYmKhTqdSa5OTkdMj58+cTHBwc0FQqlWdoaIhCo9FaKBSqA4FAUPr7++tHRkaEd+7coUxPT4Md HBywTCYTRyaTJ/T19ecQCER/TU1Nk5OT09bPnz9/WVxcnM3JyWG9f/9eOywszGhubi6gt7dXmcvl 8jo7OzmXLl2yg0KhrUgk0s7Hx4cGh8PXrKysZjIyMkYIBEJjTExMAAwGkxeJRDxTU1P5zs7OCR0d HW17e3tOcnJy/q1bt9rCw8NriETiPjc3NycwGEyNj4/P2bp1K0Ymk3W9f/+ePTAwUOPg4LBlZmbm HY/HGwsICOhns9mMuLg4rwMHDki7urrqfX19tVtbWw3U1dXHEAgEtaio6LuDg8OGqqqqKhQKRcjJ yaHT09OXXVxcBths9pRYLBZ1dXXx/Pz8XHR1dVX7+vp6jx492mVpacnMzMwcMTIyMti/fz/g4uLC zcnJqW9tbRU/f/58fefOnVgUCtVia2urHBwcvKClpaWRkZGxlpWVZXzx4sVHenp6+SoqKmAmk4mY m5v7RqPRCEgkck0mk8GtrKw0Dx48SOZyue0CgWBQWVkZ193d/ZNIJHZXVlZqYDAYOTU1NTAMBrME AGDtw4cP70xNTf2Wl5fHCwsL+2tra7Hr6+vrysrKbRAIhC+Tydbn5uYsLl68aIhCob4HBwdPm5mZ dW7bto0QGxtrmZCQoH706FFkXFwcIyQk5MfU1JTelStX+vft2xcDgUA0CwsLf3M4nFp1dXUsCARa cXZ21n7x4kWTp6fnrJmZWfmVK1dISCQS/eDBg/U9e/bge3t7Cerq6tzg4GDyp0+fRpycnKb09PQ8 P378WNvX17eMx+MRx48fV5icnNwwNjY2a2trkwYHB/udO3dOztzcfJVMJitvbGxAORyOSEVFBWNn Z7eybds2vJeXV8OOHTsWnZ2dzdbX1ylLS0siJpOpK5VKZ0+fPl0kEokWVFRUlO7evVv2/v37qZqa mkULCwucTCYbnZ2d7crPzx/s7e2d5nA4rNnZWSAoKCgDDAaP4vF4aklJSWt6eroHiUTS1tLSUhWL xYMikaj79+/fsE+fPo15e3tLQCAQmEqlWovF4nmxWAz9q5aPX1lZaYyPj8+AQCAUW1vbqPDw8G36 +vr9XC63R05Ojrlnz57Atra2n6qqqpuEQuFwaGioqo+Pz2RTUxPy2bNn7o8fPx66c+eOl7q6uvq7 d+9uwOHwGhsbm9nXr1/zdu3aNWlmZsa6cuXKypUrV1BZWVn4e/fufcHhcJDo6OjSsbGx06GhoaPx 8fEEJycnOWtraxckEindvHmz7sWLFzfi4+M3P378mAuHw9GJiYmRd+7cublz505viUTSB7l8+bLu 5cuXAxoaGh6NjIwg0Gj0wsWLFwVWVlZNRkZGFjKZbH18fFxIpVJ/j4+PaxkYGMB0dXVd19bWxvbv 3y/ZuXOnj4mJiQqLxVKysLCwnJmZ0aiursZkZmZWra6uOjOZTHkLCwtjBoOB37RpkyKFQhHu27cv nsfjdQYEBIzIy8uDoFCoSl1dHS42NlaNx+MVNzU1iVEoFMTGxuZkc3Pztfz8/I7W1tad7u7uYD09 vUMgEIgOAoHkiouL7xIIBB6TyYTjcDhJXl6ezqdPn7Z8//4939bWdv/r169BXC4XTKfTLWJjY1Fw OHyeyWSuPXz40AKJRA5YWFg4NDc3zwUEBFzAYrE/QCCQ5uPHj3+4uLj45Ofnc7u6umh//vzRxuPx G0gkEvrp06eNrKysNXNzcyGNRlNUU1MDe3p6GlEoFBSFQvmhpKQEgcFg0ISEBB8sFjthZ2eHLy4u 5kRHR18ikUgOWlpahjk5OX+cnJzWPTw8jN69ezdga2vLkkgkeBqNRubxeAQKhTIbFRWlhcfjQwUC QTebzVZhsVhmAwMDaZaWlvt0dHQYX7584TGZTGh+fj52Y2Oj++XLl0379+/3Wl1d/SOTybC7du3a v3fvXjUUCpWiqampfOHChX2bNm0y+/79ex8EAuk6ceLEgpmZGSIrK+uRSCRaOH78eAQOh1N7+fJl ypYtW5r8/Px2bNu2bTuHw8mAw+GjBw8e/LRz507o3NycOCoq6s2ZM2e0g4KCPr548SIRAoHYTk5O jtvb2ytv3boVdfr06X9LSkpGjh8/LnVxcXF7/fp1S05OjpGHhwc6MTGxi8FgYP78+SNfW1tb5u7u bgAGgyGnTp2Cff/+nXLp0iUch8NxPnfu3PfFxcVaZ2fngImJifLq6upaS0tLy5iYmNbExESNbdu2 uZaXl78UiURyIBBoxsDAgHzx4kXnz58//y8mJsYtNja2cX5+nqioqLi6sLBg3NraiiKTyZ3e3t6p lpaW6l+/fh0ICAjQ9/LyOjU4OPjYxMQk3NHRsYbD4Qzt2bPH+ODBgzlWVlbEM2fOTCEQiNX4+Hj9 tbW1RWNjYxMwGEw6evRotrW19YSXl9eX+Pj4biwW27i6uroEAoGQ//33H9Te3j6ruLj4t5OTk9fj x4+558+fj/s/ps78Her3++Ov2VfGMhhjHfsydmMnFKIIUVokpCTtWhWSRErLW4WiUCktJGWXJfu+ Zd8ZM9YZ25j9+0uf6/r+A+eH+7ruc65zno/zPGAwGC8rK2t08ODB55aWlux79+4ZNTQ0PPDx8VFZ X1+vS0tL0zc2Nq4EgUA4dXV1+YMHDw75+/vvkpGRARMIBEkFBYUNoVAo9/Lly22BQDA3PDysoKqq upySkrK9sLBQeevWLW0qlfqtoaFBWk9PD4tCoTS5XC6rq6vr3cDAwHp4eLjl7t27NeBwOHlra6tB QUFBLiMjoxXC4/Eyc3Jy3lIoFLikpKTU2tra5M6dOw1ERER0L168WKOpqTlZVlamGRAQYIDBYNL0 9fWNu7u72+fm5gT5+fmk9vb2tu7u7k1PT09Cd3f33bS0tC0lJSWZzs7O5Q8fPqzp6OisLiwsUOPi 4hbweHzJ1atXTQYGBroMDAykQSBQVkxMzC48Hj937do1ZGdn58KOHTvMt7e3Z0xNTcVTUlKey8nJ sa5fv27CYrEUHB0dJXR1dYdGR0f7VFRUVhEIRMPfv3836XQ608jIiOjj40MQExOTWFtbo9JotL+B gYGuampqBx8/fhx75cpsuNEQAAAgAElEQVQV0Nu3b9l0Oh1qZmbGHhsbE3327FmbqqoqG4fDfcnP z1fYvXt3yMrKSoOkpKTA39/f+MuXL2MlJSXKFhYWaA6HQ09OTtYeGhoi1tbWIs+dO8eurq4G02i0 RV1d3S1tbW38zMzM+oEDB/hfvnzZxuFw6yIiIpje3l4EHA6foNFof6qqqqru3bt3ZHR0tCM4OFig o6MjExERsSItLc0JDAwkdXZ2sjIzM6+Ul5e3Dg8PZ+NwOKChoQH69evXCk9Pz1Pr6+uFtbW16ydO nNDh8/mf/P39dx89ejR/Y2NDZH19vX11dRWurq4u8erVq+cGBgZy+vr6zkQikaqtrY358ePHzJUr V+B79+71DwsL+3Lu3Lm1mzdv+jY2NlZraGhYTk9Pf5SSkuKZmJhYoVAoJAgEWufxeDw+nw+0tLSg PDw8pPr7+5v19fXZ2dnZ0omJiQYYDIaroaHRIC0tjXZzcxNraWkRgcPhNXl5eWhlZWX4+vr6LywW O+jg4DCFw+GmGhsb1fbv349tbm7mxMfHY8XExKZ//PjBDQwMpObn58NiYmJqEhISasLCwuTMzMzM 3N3dm3/+/Kmmo6MzNDo6OnD//v2dlZWVA79//243MTFRI5FIaAAAVhITE9fCw8PLhULh9PT0NOT+ /fvy+/btk+dyuTO9vb0yCQkJsJGRkfXx8fGSrq6urvDw8Mjs7Oy3ampq9IqKiiUbG5syU1NTaH5+ PguJRLq+f//+eXd395+GhgbvN2/eoOTk5HS2tra4CASifWpqav7QoUO7MBiMiaSk5Njc3JygpKQE VFlZqWRubs6XlJRcDg0Nlejs7FxwdXX93NzcLLZ//363/4FZPj4+4qqqqosoFGr6ypUrIXv37q16 9eqVc2Vl5TSNRoPo6Ojgtra2fh09etT12rVrxf39/WJzc3PTYDCYoKysrBgaGrqlq6srhsfj244c OeLKYDAmRUVFrV++fDkOh8M/NDU1mcBgsLbXr1/PUSgUJolEQrS1tQG2trYKHA4HBgaDqaqqqm44 HO5VWVkZGiwQCNIdHR3VYDAYRVpamqOjo+Osrq6uLC0tjWltbTXv7+93aGlpUSIQCOtOTk7hdDp9 ikKhGE9PTy94eXmBYmNjzbBY7BKbzd7EYDDy6urqqoaGhqxPnz4tdXV1SZuYmBiUlZXNRkZGkiYm Jsh6enp+Dg4OJzkcjjgcDnerrq4ef/ToEdvGxmawubmZWV1dnc9ms2FdXV1LgYGBOywtLQ8EBwfX ODo6FgEAAISHh6NgMBiovb2978OHD6Rdu3bZnj59OgOHw6lyudzxGzduNKPRaDiZTJ4FgUDA+vp6 a2RkZIqKikoHFotdi4qK4k1MTCD/ab94UVHRX4uLi5YhISEGLBarODMzU5xIJCL+QSuD5eXlrPPn zxuVl5dvlZSUzL569Wo2OjqaXVhY2GlkZLRKJpMlsFjsnJGRkSeJRBLJycn5DYVCBSMjI/iFhYXp sLAwi5mZGcbAwMD8mzdvqAAAAHV1dSvXrl1riYiIADQ0NCRNTU3B0dHRg1euXIHOzMxUWFhYYGk0 2rCKikqEUCisuXPnDh6BQJgODAwoTkxMzM/Nzc0/fvxY+fHjx286OzuzSktL7zg6OuqrqamJbm5u ok6ePHmYy+VCMjMzk6SkpJy6urrA9+7do1tbW7vl5eU97evrc8rPz7cBAAAQFRWFrK+vZ/v6+qZz uVz+48ePmx8+fFjX2dnZ2NraujQ2NrbN4XBgmpqa7kFBQQcwGMxOX1/f4dnZ2XYCgSBobGyUPXXq lLS2tvaKmZkZeGVlRfzly5chUlJSHEVFRYnx8XE1gUCgY2hoGODg4ADauXOnTnh4OFZdXZ2Ex+Ot nZ2dqb6+vpLy8vLVR48ejf3w4cMtDocDZjAYo/+GwLMZGRme0tLSWwkJCekrKyvdZ8+e1eFwOHIA AEDk5eX1Dxw4ULZ3717Bixcv3omIiHAXFxdV4HA41s/P75CpqWmTtbW1goWFha2fn1+0jo6OWFpa 2ntDQ0MDJBKp4Ovra7h37151IyOj2crKyiGBQMDm8/ng5OTkp7du3frU29vLa2pqap2enuZXVVVJ ra6uCjo6OhavX78+rKGhsf7q1SszLy8vseTkZGJfX58kBoMhuLm5yT58+HABgUBIW1lZgf4/mQkC gQTS0tIi/v7+4wgEwmxiYiKNyWR6xcfHY+rq6sDj4+ONOBxOZXt7e51MJktTKJT5iIiI3Lm5uYG1 tTUGFAoV1dDQMLG2tt5Bo9GWb9++zT179mx1SkrKRFNTE9vJyWlFXV19TElJiSUhIcFlsVjScnJy olevXn0wNjb2XigUssFgsNza2lrIly9ftkBcLjfVwsKCXV1dTVpYWIBcunSptqCgILa7u/trcHDw dklJicbJkycHXVxchiwtLWH9/f2yx48fx4yPj7e8fPmScPLkSdNDhw71lJeXI+BwuA2Xy11OSEho HBwc5AEA0PH+/ftoEAi05uXl9e3+/fuOmpqa02AwOLC3tzevqqqKpqSktACFQsHt7e3S586dU7ey skL/45/XiUSiDAaDETg4OOR//fqVqaend2plZcWxurr608OHD7ttbW2lzpw5o/vw4cMfu3fvxoWE hCg5ODiwra2tIQoKCjwQCCQ1Pz+/NTQ0xHVwcOAZGhpa7tu3r+bgwYMdjo6OnnQ6nZ2SknLrwYMH twQCAeH27dtZMTExxxQVFZ2ePn36wMPDY3ZxcXHOzMzsx4MHDyIWFha4iYmJvAsXLqBOnDihoKen 5/Phw4e7vr6+J5KTkzvJZPKSpaXlKg6HC3327FmRqqrqmri4OO7KlSu9qqqqEBMTE/DIyIiEvb09 RkpKaoBOpxNkZGQMRUVFeb29vQ0gEAgUFBSU8A+H5SUnJ+8+e/Zs+Obm5jIWi21+8eKFso2NjUpx cTHj+PHjajgcTkRUVNSJRqOl+fv7b0lJSa0ODw+rPnnyBJ2bm5u2vb2t4uvryxUIBMY2Nja6aWlp Be/evdvEYDBQPz8/rKSkJPvIkSMpFy9evCQqKrrE4/H07ezsBFZWVuR/R1AfLy4u0rW0tHpYLFYX g8GoZrFYECaTObhnzx6XoKCgX11dXcSTJ0/iX716xSwuLnbi8XimQ0NDTzMzM/8YGRlp7tq1Sw8M BosjkcglNBqtfvv27WRNTU3lo0eP3l9ZWdnd19enp6amBiUQCEFTU1NjCQkJAwAAdDx//vwyg8Fo PXr06Hx5ebkrlUrdlJSUVJ2enu7l8/lAfHx8P5/Px4eEhAjU1dXlpKWlLV68ePHK0NCwcGpqilxW VqZia2vL9fDw0Nvc3AR/+/bt9szMjMLi4qKnubk58OTJE8msrKyCgoKCVTs7O30pKSnFJ0+eLCYl Ja3Ex8f/efHixYvZ2dnikZEReUdHR8fGxsb6tbW1STs7O5NXr179lpWVRbS3t28SiURYZWUlrbe3 V9PKymr79OnT4q2trRNFRUWKRCKRGxUVpayqqqp76dKlj48fPz4MBoPF2Gz2rISExLPNzc23/z85 9PX1Pb9w4cJQRUXFMwcHh5fr6+siCASitr6+Pr22tnZ3dna25pEjR7R37NhxICEh4ZWioiKESCSi MzIyqjc2NojPnj0rx+PxzzAYzM7/xTx16tRTV1fXGTU1NV06nQ4nkUhjKioqUdXV1WGioqLWkMjI yLipqakEfX19hxcvXnz98uXLrhs3bujicLh3hoaGBAkJCTQej592dna2GRwcZCkpKQlv3bqFBwBg gslkcrW1tUkkEgn2/ft3kLW1dTUYDHaxt7fXJxKJDWfOnCHT6fRxUVFRw/DwcFUREZEYGo0m+/Tp 0+IdO3bMffjwQSQ4OHgKiURq9/b2EmVkZMb3798vY2VlFWlpaXlGIBCMdHd31y0uLs5sb2/L1dfX rwmFwj8iIiLIT58+SX38+DGUz+ePra2tLaPRaE5TU9NcTEyMkqGhoaK6uvrhL1++5FEolEkCgcDI z8/n2dnZEQ8ePChbXFxcQSQSJa2srIw8PT1f7dmz5xAajdamUCgKJBIJff/+/aLKykrN6elpqoaG xvx///23SiKRxPfs2dMqLi6+Q19fn/j+/ftJc3NzGUNDQ4pQKASio6OXoFDoDAQCESORSFgrKyvK 4uLiDJfLBcXFxR0aHBwsS0lJMSopKXE1NDTcq6Ki4t7T09NDoVCUKBRKfUlJCWx7e1vl8OHDegAA gP38/Aqio6MJbDabsLGxQa+pqdloamqC2tvbd1MoFO7i4qKooqKiOZfL7cdgMMYCgaAzLCwM1d7e TrOyspI6efLkAxQKlZKdna2YnZ2tc/r0aWljY2OD0dHRTSKRKAmBQEQnJiYQTk5OqyYmJmqGhoZo SUnJUh6PR7p7965wz5492IqKCqGJickhR0fH9P3793M2NjboTCZTYGxsHH/58mUtDw8PXGlpaSOb ze5LT0+nMxiMndbW1qWSkpJcMzMzpf/++29gZmZmVkJCogqJRNpvbGx0yMjISLm5uUUPDQ2lt7a2 0pBIJEtHRycIAoFo4HA45KlTp36kpqbuxeFwAIPBoLm7u6PfvHlTfvfu3WAwGIzp6el5AgAANjk5 GaShofFTW1u7o7Ky8u/Fixeprq6uf0ZGRpx9fHwMnZ2dxWRkZBQnJyc7lpeX0X///p3X1NTUDwkJ IWtqaooSCISFPXv2uNbV1fE8PDxSmUwmxdjYuO379+9CdXV1UlJS0lBOTk6Tra0tCAaDLeDx+E0o FAoSFxfHSktLv6PT6RxxcfHmmpqaTQ0NDfTz588FAQEBpB8/fmyXlpbSsrOzNauqqjY5HA6HQqGY ZGVlDXl5eWnyeLzhd+/edX758uUSAADo/33UxcXF+tjY2AUWi0Wj0+mFg4ODsocOHUpZXl7W9/T0 xINAIBkJCYniyMhIjKen56qCgsLShQsXkGFhYQr19fXQ0dFRHoVC0SgvL682MzPb/7+4Dg4OjL6+ vml1dXUJZWVltqioqHphYeHH9PR03tTUFBh04MCBaBKJtHT9+nW58fHx7rW1NVsDA4NyNBqtmZmZ qVRXV8d0d3cXGBkZKba2tm5xOJwWV1dXVyKR6MPj8Vp+/fpV7Obm5lpeXp5mbW19vKCgoE9fX5/x /v179IEDB+BcLhccHh5ebWVltZqXlxf09u3bVQAAgH/312xXVlbGt7e3twEAQCYmJk51d3eDP3/+ zIiMjLTIzs52SE1N/dDT09NRXFys1tbW5i4tLU35+PFjgo2NDWlxcVGSQqHoxMXFVSclJclXV1cv aWtrb/r6+lZHRkaKDwwMqHZ0dGz6+Pisz8/PE8Fg8Iarq6slDAaT5vF4AIFAyFVRUcFpaGhgP3z4 cOzmzZvZ165d04ZAIACFQimGw+HD0tLSLhgM5tP58+eD09LS2oODgxWXl5c3cnNzmd+/f7/KYrGm WCxWv6ioqOzQ0NCylpaWEgAAsqOjoz3a2tpePB5vmMvlglRUVArr6+sVIBAI8OHDh0Z/f38LLBa7 VFdXt+bi4mJKp9P5PB6PhcfjK9Fo9CkajfZBUlLSJD09nXHs2DERMTGxI1lZWZEmJiarIiIiHC6X C5KUlHT8NzAV8Pn87dLS0iVfX185UVFRsLS0NKurq0sciURC/u0rbC8sLHAUFRVDSkpKHpPJZLKx sfH258+fi3p7e2kODg4beDx+X0JCwpy+vv7Q9evXlXt6eiw4HA6axWJtq6qqqtPp9DeNjY0Szs7O OiIiIgcAANhis9m55eXl8Dt37mSsrKyQHj58aGNsbMxksVhIBAIhbG5uHpeVlZ3IycmxO3To0KCG hoY2gUCwFQgEi1AoFF9eXp6ioqKCYLPZ0jo6OvMoFMr/yJEjvSkpKeTCwsImHo8HBoPBMCsrKzkS ieQ7MTHx2c/Pb1NPT69lfn5eEBoaKuXk5ERZXl6GXrt27d1///3nSaVSRwEAADY2NiSQSCRCRkZm 5u/fv0OPHj1aodFoAQAAABEREdyFhYVf0tLS0mQy2crT07Pv06dPGjQara6mpgY+PDysLCMjw/jv v/90hULheGpq6vqFCxfih4aGXqmpqTn09vaG/jP/9AUAALh+/frcq1evtK9evTr2+PFjlfz8/C4w GKzg5+cnCYfDeVwud8vExARcVlYGYTKZ7V1dXVxLS0tFfX39M6GhoZe4XK7Dq1evdJBIpMTFixdf 8Pl8Znh4uFlcXNzPtbU1fnZ29n4HB4eloKCg1Z8/f9K1tbVJ4eHhUlNTUzMAAAAwGAx/4sSJRYFA UNLf39/5vwTw5cuX89ra2pq/f/+ePn78uOn6+jrkz58/tGfPnnE+fvy4CNrc3KwHg8FCJBJpzePx mvl8PiAvL//j4cOHomVlZdza2lrUwYMHRRkMxtiBAwd0bGxsiEgkUgMAAIDNZtNyc3Or/tkuYy5c uHBme3u7Jjs7+7uEhAQ8JyeHlZeXd5jH4xVXVVXhDQ0NZba2tqZRKJSAw+EwmEwmrL6+fu7cuXOJ YWFhBQgEom9wcJC9vLwsERoaOre1tUXYt28fTCgUck1NTa3fvn07paGhsfzhw4eV8PBwRHd3t/Le vXs3uVwupb29vaKnp0fs/v37nJ6ensCnT58+R6FQtB07dthlZWU11dfXr7m4uCAvXboEA4FAjpqa mtnj4+Mvtra2aHV1dZ12dnaw4eHh+rW1NXUKhWIgEAhAcDgcd/78+W+PHz8+TKVS/xQUFMD+HU+p 1tTUVHNxcVEVFRXlCAQCoLCwsC0nJ8dKT09v6+7du9oAAGxOTk52iomJcSMiIhRqa2u5zc3NOFtb 25nq6upVBQUFIzc3t7LXr1/75ubmTo2MjACpqakmbDb79c+fP2UOHz58Xl1dvWhkZORATk7OUSKR aPdvw21genqa1tnZSSwoKDA9dOhQo7u7uwEYDF6trq5esra2ViCRSJeXl5dzRkdHBdnZ2ZuJiYlK aDR6fnl5mVddXT0oLS2NsbGxCS0rK6v+p0KkXL161YDBYGyw2WwMAoHYfPPmjYOcnBx9165dr1Eo FD87OzuhtbX1ib6+/kUAANojIiJKrl27ZtnR0aEqFApXhEJhU2BgoOvY2JgYj8ebMTAwAOrr6wEP D4+Nvr6+/VAoVEEgEMy0trbmUigUXGFh4dSuXbt2vn37dlZeXn7L09PzPJfLncRgMMMLCwsMMTEx 56mpqXiBQADu6+tjqKio7NbV1d0NAAAyMDAwMj09XfPatWszZ8+elZOVlZWAw+Emtra2+f/9999G RUVF448fP4x27dpF+/XrF+r79+/iw8PDUG9v79mxsbEj3759e+Hl5RWmrKz8ND8/nxoSEhJUU1ND EAgEPYcPH+7H4XC6r1+/Vjh79mz/8+fPeaGhoSQ0Gj3E4XBYu3btEomPjyeMjY3t3tra6h8fH19s aWmZRyAQmLdv307Z29sj29ra5G/fvi0AgUCz0tLSMDgcbvzly5dFKysr0dTU1OnU1NSwEydOPCcS icoYDKbi8+fPUE9PT/uoqKigwsLCU0ePHp2n0Wh3+vv7o+FwuDuRSOSIi4vz9uzZs7W+vo49fPjw ur29PWR7e5tNIpHUX79+PR0YGIjfsWPHtIiIiPDgwYO97e3tRC0tLfjIyMhWa2uraXh4+FhISMiu ycnJLVFRUf7S0lJzYWHhPJjNZi9sb2/XAgCw8fnz5443b94kfvz4keji4rKEwWAYqqqqjV++fJnk cDg1oaGh2Pj4+CwwGKxQUFBQxefza2RlZZFOTk6r6+vrJefPnz9tY2PTf/LkycvDw8M8FRUVHA6H GyGRSKCMjIwuPp8PgkAgy+7u7vB/ZpIcXV1dOpvNHk1JSfG8ceOGGQAAgKmp6V86na6Yn5+/5erq uiYlJcWJjY0dT05Ohv/580fO0NAQ/efPHwgcDhfcuHFDvKampi4rKyufwWAg0tLSiPPz8wUXL14M 6e3tlVpeXs7v7e2dvX//vuXnz5/XAQBwR6FQFsPDw6F8Pn/ezs6uzMTEhJGamvqhurp6GovFbsfF xRVFRkaWCoVCga2trU5JSUnP2NgYurS0dENHR+ebv78/T19fn/Hjx4+fhw4d6vHz81swMTHBP3ny ZMjLywuZkZHRe/Xq1SkjI6PrTCZz7O3bt8jU1FRhRUXFz8TExGF1dfWEubk5yO7du6Hnz5+fhsPh c0+fPlUDAACDRCJD9+3b55Sbm/vl3bt3SAAAAGdnZ4qUlJT8169fEW1tbeLa2tqap0+fPuDm5tZq bm6+sG/fvkkOhwP/9OkTDYfDSU5NTd3f2NiYzcrKWnjz5o0YCoUiFhUV3cJisbXFxcWqFApFt7m5 OZ1KpXYlJSWVHzhwQM3Pz28CBoP9qKmpEZucnJREIpECCoXCSkxMPPv06dPTq6urEw0NDao/fvyo am9v50RFRe0BAACIiYmBWVhYbKFQKNv09HQAAIDRiYkJlJqa2raioqLIhQsXGo4fP37z+/fvAXfv 3n2Ox+M5YDD4rK2t7cTc3Fx0QEDAhoGBAbyiouKRhIREYWNj4xcxMbEDAoGAraSkdJnD4ejU1NSY KCoqsgEAQBYXF99PT0/XvHfvXiOBQFhXUlJyQiKRHuvr68UbGxtipaWlUw4ODrjLly9vnjhxwvTH jx+7FhYWhHFxccvT09PuKBRKAgAAgEKh/LWxsZEJDQ0NkJOT27p27Vq9mJiYE5VKXX39+rWCr6/v R3d3d568vLzj79+/ZVNSUjT09fUni4qKGNbW1lUQCITc0dGxSiKRtgICAozNzMwMoqKiWAQCQZVA IKxubGywaDSaVFhYWOfy8jLs9OnT9o8ePfqRmpoaNjMzU//ixQvVmZmZ6bm5uV39/f3X4HB4HwAA wL/Bnvb+/ftb8Hh8oIyMjMTNmzdnYmNjGXA4nL2+vg4JDQ09VFxcLD4zM8MBgUAjtbW1gvn5eURR UZFeeHg4Cg6HuwwPDyt7enrOJicn8xsaGjT19fUNWCzW2OrqKgMKhdLV1NR2mZqaboI2Nzcz2Gy2 xPLysuD9+/ej0dHRYUwmsysxMbEOiUT+KCkp0aNSqVJ8Ph907NixWRAIxFdXV8ctLS2JtrW1yXt4 eGClpKTG6+rqFBQVFX+RSCSEpqamOhgMllRWVh6rqalB7d27176jo2NNUVHRl06nf4uOjv7r7e3d 4u/vb/fx48dtBwcHp+np6TEGg7G2d+9ekcePH9fm5ubqQSCQNXd3982enh5aQkJC4ps3bwpKS0v7 qqurrUgkUuP4+PiaiorKbHNz82sJCYnfqqqqH7Oysk7r6Oi402i01JCQEHBCQgI1Nzd3JS4u7hkA AMDU1NR5BQUFl/7+/txz5845uru7T+/evVvT399/dN++fbW2trYO1tbWvRoaGoSVlRVvKpUKRyAQ uNevXzeePn36uJ+f36OLFy9ywWAwMD8/P7pr165zk5OTHe/evSuOi4uL7+rq+jAzM8MAAADY3t7e 1NPT4xKJRMfKykrmzp07sT9+/PhtY2PjnZeX97O8vFwKj8cPBQcH7xAIBFuOjo5eEAiEs7KyUoHH 4895eXnFf/nyxdPa2joiNjbWVElJSRKHw/EYDMaqr68viUwmf8HhcEo+Pj6YxcVFRGFhYf/p06dh dnZ2X5qamnzGxsbkoFCoUEZGhmtjY3MKDAb30el0uI2NzW8wGGyye/fuCjAYDHr8+HEcGAxW7e/v z4FCocJXr171wWAwPplMRpSUlFQ9fPjwNIvFKh0YGNAWERFBdHZ2SrW1tbX6+/ur2tjYmH38+PHF 8ePH3wMAAOTl5b3D4/Gczs7ODQcHB6yOjg7x27dvqR8+fODv3buXLCoqKjEwMNDk5eU1rq2tHcfj 8VhoNFpjeHg4X0REhOft7a3a3t5uLSMjM0Sj0UxHR0fLnZycMFVVVWtwOFwAAoEwVCq1Ky0tDa6k pETPz89f//z5s6eCgoKpk5PT67CwsAUKhUKvrq72efDgAebt27fVCwsLCGNjYx0+nw+KiYkZlpWV XUhJSXFubW3dlpaWlq+rq7sdFxd3pqKiQvnLly+/0Wg08+rVq7YWFhY1qampxKCgoAZra2tacHDw dTQavQqDwY5vbm5eRyKRriMjI+UaGhrB0tLSH2trazfRaDQ/ICBgwc3NjRwWFqZZXV3d6O7ufre0 tDTGwMBAc2xsbGFycpJuaWkp7e3tLXvlyhV2RkZGZV1dnXdXV9dkXFwc/OXLlwooFErUxsamobW1 9XplZWWovb19JAgEAra3t8d///5dQiQSYd+/f2eXlpYqQyAQ4eLiomxAQMDo2toaqKqqSnjixImN r1+/bgEAAFRUVOz19/evdHR0HHNwcNARFxcnbm9vg3E4HBG0uLj4CACA7cbGRnEYDDaakJAgKC8v 33nz5s226urqRTs7O2ZBQQExMjKyLyAgIIrP50P9/f0/ysjIMGNjYx1HR0dX9PX1HcfHx8eOHz9O ffTo0SoYDAZqa2tpKBSKe+PGDXx4eDhHTU1NLDAwUBkKhR5YXl7OExcXdwaDwWLu7u63d+7cieJw OOzQ0FC7t2/f/tm9e7eJioqKxvr6+oy5ufnSvXv3mnx9fSMXFha+e3h49Pz8+dNZXFzc+J/hBY/P 50PV1dXLbGxs1tFo9NfLly8fotPpJS4uLjf37NnzKyEhQfrly5d9a2trgKqq6oqBgYFgeXlZ7PDh w6n/65U2Nja6i4uLO319fdX+/PnzzsbGJlVWVjaexWJxFxcX/bhc7gIYDBbeunVr1MXFZTMmJoZ5 9OhR+T179hCSkpLex8XFOeFwOO+7d+8+uHnzZgAEApE5fvz4ewkJia3r16+rsFisvuLi4n4ulyv6 8+dPkoGBAXD58mXljo4O7s2bN1daW1tdBQIBCAQC0aFQqLWhoeGtlpaWI0gkcmpwcLD2yZMnQxwO B/LkyZNLubm5zWbVBBMAACAASURBVIcPH4YCAABgMJjTN27cCPLx8dmRkJAwb2hoOM9kMnmHDx8W TUxMVElKSlKRkpKSgkAgyJ6enp/Dw8NUX1/fU2VlZb9VVVX7V1dXRSgUStDS0lINGo2Wb25uziGT yWQpKSm/2trapqWlpUofH5/0379/n6+urkaUl5cbBgcH1x08eNCLwWD0UqnUKQMDA4PNzU24hYXF 0NramjyVSjWvr6+PtbCwSBgYGGhwcXHZ6OzshBMIhCMbGxvfFhcXYampqW9u3759FoVCkTkcTl9P T0/X+Ph45/Xr1w9ev369QVZWtqetrU2hra1NqaSk5C4AAEBubu5bGxubFQUFheMVFRXZRkZGUiEh Idzc3FyTmJiYT6qqqi01NTW2+/btG1ZTUzNNTU1lmZubE1xdXbnNzc39FhYWkJaWFryVlZV8WFhY R0NDg0xoaGjD+Pi4eUpKisvKykrK58+fV8vKyrRMTEzkIiMj7ZBIpOGHDx+sHBwcjLKzszdDQkJ2 rqys9Li4uPCGhoa8AACQhUKh6hEREdEEAoF99uxZt8HBwfvNzc2uFApFsrCwsPvmzZtqg4ODBGVl ZWkoFIpCIBCof9W+6MCBAzK1tbUuIyMj73NycmhYLBaspqZGu3PnzkxnZ+ctdXX1F2NjY0nx8fFv b968eXxycrIkPz9/BQKBDO7YscMOAoHQ09LSJLS0tKhnzpzZd+vWrQpdXV24srLydHh4OHh9fV3y 6NGj/d+/f7cOCwsrcXBw8JCTkwMnJiaOAACwBtmxY4cni8WC6OvrK2VmZv7NzMzcKRAIIIaGhkpa WlqjTCZTITw8fMHCwsLi69evb8hkMvfQoUMXIRDI776+Pvz+/ftFz54929/S0rLR29uL/vbtm4Sq qupEQEAARVRUFPzw4cMNHo+nJCIiwlRUVFyFwWB29+7dK2YymSW/fv0q1dbWRrq7u4+4urqGv379 Os3Pz09ZSkoKraCgsB0cHDzp5+fHExMTW01OTq5xd3cPCg4O1kKhUHgDA4OCp0+f/n369Om7kJAQ LVdX1/OnTp0KX1xcFPz8+ZP59OlTXFFRUSmJROIsLi7SQCCQdkZGhmRZWZlodHT0uJubG9vIyCg2 ICCgIzg4eB8cDidoamoCi4uLWysrK/SNjY3SAwcOyCooKHRaW1u7PH78+A0SieQ6OzuvHTlyRKGj o+MYFosdlJOTWyYQCGLr6+tT2dnZLWfOnDGxsLCofPXqVfbw8PDW69evyVgsFtTf398zOTmp4O/v b725uflneHhY3c3NbWhgYACoqKjAYzCYr4aGhiQrK6sWKSmp+2lpaes3b960P3r06EdVVdWg4eFh Hp1OZ0hKSlKZTCYCi8XSmEzmxp8/f9p3796NIJPJ55eWll6fPn3aT1JScsvY2Nj979+/+R4eHpda WlpK/vvvvyo9PT304uJi99WrV7f09PRqLCwsjpSUlKwxmcweR0dH+YCAgNaAgIDJjIwM3smTJw0u Xrw4c+fOnf01NTVXNDQ0eDQaTQwKhSLExMSU7ty5s7G5uVknJycnAgCA8dLSUl9sbOzpK1euOLS0 tLxWU1PDcbncJlFRUbq8vHzHmzdvBG/fvn2poKDAYTKZMxMTE0s4HG7VwcFh5eLFizaRkZH19vb2 vIWFhdn4+Pi72traB42MjIZhMJjY9vb2LyQSeZVIJKpvbm4qb2xs/HJwcNh4/fp1DRgM1l9YWChb Xl4W3L59OyU/P785IiJC+sSJEwIZGZm58fFxjJqaWuf09DTp8+fPPHd399l79+6JdXd3g6urq6Vh MNhyV1eXxKlTpwi3b982Tk1NhSUmJop9/fp1ev/+/SZsNnuYTCbPIxCIbR6Pp3X79u0xEAg0SKVS uXQ6fXF0dHSsrq6u0MDAAMTj8danpqbS09PTHaKjo/UePnxY5ejoyPz58+c6DAZDysjIMAUCwfzH jx9T0Wj09+Tk5GFVVVVSRkZGe3JyspDP50s+e/bsIIPBqNLR0ZHNzs5u2blzJ8Hc3Jytqqoqo6mp mTc+Pv7L39/fFg6Hb1tYWOxoaGiYunr1qq6iomKPs7Mz3NbWlnzs2LG+Y8eOiZWXl8uOjY2ZWlpa tp85c0b148ePgn379rWz2eyR5ORkG2dn5yWosrLyamtrK8jS0tJ93759HTY2Nn2dnZ0X3r9/nzM0 NIQ9ePDgQnx8vJWcnFzhgwcPLsFgMFEWizVsaWlpp6CgsPL+/Xt+UFDQZkJCAigpKQkaERGxeezY sSMAAAAaGhpDPB5v765du4Q/f/6EwOFwJ4FAMGViYgJzdXU9jEKh1MrKypKZTKYqn89fPXXqVAgO h/s6NTUF0Gg0vcePH7e5uLiswGAwgbGx8SKbzW6OiYnJwWAw3O7u7gQEAkFDIpHcpaWloubmZh8m k5kFAIBsZGQk187ObtnIyOi1uLj4e0lJSdFz585NW1hYrNrZ2cEfPHigsX//fp69vf3pgoKCb2w2 u3F2dpZ55MiR0d+/f2unpKQoHjt2TACHw1ebmpqUkpOTr1dWVkq+f/++4cKFC0ZFRUVgbW3tJ9PT 0+oZGRnrbm5uFCwWy9XQ0AAjkUioiopKw+3bt/fPzs7WCYVCyNGjRwsxGIwZDAYD8Hi8V0BAAE5X V3c2Ozsbn5ubu3r8+PFvTk5O56Kjo79//fpV8OzZM/a9e/eI5ubmHi9fvtTNzMxM1tbWlu7u7tbY 3NxciYuLk01OTuaJiYlx9PT01vB4vPXGxkapj49P0MWLFwciIyPZXC4XtHv3blxeXl5ke3u7UFtb WxUKha7u379fW1NTc0RPTy+Ox+NtYrFYMJlMJv39+xe4f/8+is/nO4iKik5DIBBgbW0NUlFRkTI+ Pq7+/v17dnR09DKZTN6emJiYLSoqCgwKCtIOCwtTn56efrm5uWnZ39+foaurGzgxMcGTl5df53K5 rOjoaGkvLy+0lpbW+q9fv8xzcnK6LSwszAAA0Nq7d6+cmpraCAgEQl+7dk1ldHR0aN++fdIJCQmx 0tLSjUFBQcX6+vr5nZ2dQg0NDa++vr7Rb9++bXz9+pW5vLysu7CwoDE8PAw2NDQUT0pKGsnKykq9 c+cOvampSQIAAExUVJS3pKSkA51Oz5qbm/udmJjocenSpemgoKAJMpmM+PDhA+TZs2fyfn5+0Ojo 6Gebm5sKPT09nebm5iaLi4vRRCIx6vPnz5pzc3OyysrKmzY2NtSxsTFVLy8vLzMzs+HXr19/R6PR mq9fvxapq6szIpPJE3p6euzw8HAaCARCAADAgsPhYv7+/jvFxMSGpKSkNkdGRrSJRCJMS0vrzX// /ScLAAAgIyOTNz4+LmtnZ1c8Pz/fVVVVtRoaGqoRHR3d29LSourl5TXEYrFKP3/+bD43N+eIxWJ5 dnZ2GiAQaEtSUpIjFAp3cjgcFo/HE5mdnZ1qaGhwffbsWXtgYGApBoMZdHR0PCwhIaFvYGAgjsFg LIRCodyRI0fe7N+//zA4KytrcGhoaGBhYeGHmZmZfWdn5y0CgVBKIpE27969eyg/P18ZiUQKnzx5 cndwcLCFzWavVVZWNsLhcFJGRkaLoqLiMA6H2zx16tTWjx8/Os3MzLoAACDS6fQ2JBIZisFgBFAo FLC0tOwBg8EYAAAwbm5uO86dO9dYVFR0u66ubgUMBgM3b968x+Fwamg0GlJERIQvJSU1a2lpKcdm sxepVOpcZmbm4vj4eIOFhcXizMwMv6Sk5G5/f3/WjRs3JltbW4dGRkY2kpKS5Nra2ngYDAYnKysr 3LNnz+HQ0NCi2dnZ0cTERFxkZKSokZGROIVC0YmNjf05MjIy9uTJk2MzMzPNMBhss6qqyvL379+z VlZWdaurq60PHz5sDA8Plzhz5oz3u3fvnFpaWrxu3rwp393dXV5dXQ1NT09n/f37txcCgQjV1dXz Y2NjY2dnZ4u/fv16QlpamqOhoSFnaGg4PjQ0pGtmZgZWVVWlHzx48G5AQMB1c3NzzbNnz3o1NTUF Xrp0KaelpeXt2tpaExaLJUKhUJ3R0VGJK1euUBYXF4WTk5Oo379/c799+yZTX1+/6urqytza2hp0 cHC4LSoqKlxdXf1eVlY2JCEhIfHy5UunrKwsAQQCQRcVFa25urra4nA4DolE+gaHw7kdHR2DJBKJ WVlZ+R4GgwEdHR29UChUSKfTZ3t7e+mPHz+W5HA4+iIiIks1NTW77ezs1D09PUU6OztBsbGx81FR UQZHjhxJT0lJ+ejn5zcTHR3dLicnd6iqqoquq6sbyGKx/rS3tyM3NjYkKioqpKysrGYDAgKU4uPj VaKiojYyMzO/sdlsobW19byTk1NlU1PTwTt37vxcWVlZLCsro/v4+JwFgUDCo0ePXmxoaAg1NDR0 DA4OvpyUlNTd2NhI1NfX315aWrp1/vz5ZjMzsw8MBoOakZHRd/z4cV00Gj0vKyvrZWlpqREeHr7I 4/GgwcHBu7BYLAyLxQpevnxZhcfjNwEAAJhMZruXl9eMlJQUsqOjYzE0NJRHIpHwL1++PFtWVqZx 7ty5KzAYzHZ5eZltamoqrq6urkWn0y11dHRw+vr6zfLy8hqPHj26fe7cuRsPHz7cwGAwCi0tLarp 6en6Li4uF4RCIburq2tJUlJSBwaDFbHZ7P6ZmRkzDAYjcHJyipqenn5VVVW1r7Oz8/3IyAjz3Llz ZWFhYatdXV3fPTw8PJBIpGheXh5MQkLCND093VhbW5uCRCJBe/futf/z58/cv/ZXe8eOHQH/nJ6e odHoHdevX6/78+dP4eHDh9f09PQ0CQQCxtTUdKm/v/8dEokUvH//fm5+fr7J39+fVF5e3gV59OiR RE5OjimBQECtrq72MRiMKikpKUF3dzdYKBTW9vT04IOCgqD5+flzpaWlGAUFhZHx8fFtMpmsKiUl pamurh7m5ubWtWPHDrGMjIw5ERERuLm5eWVzc/OWoqIi/enTp1VwOLxWQkJCksvlCng83rvu7m7W yspKiY2NjbGlpSXUyMhIn0QiSbi5uXFYLBZje3tbLDAwEJCWlgZxOBytxsZGgbKyMlJSUlIQExNj DoPBFPbu3aspKysrA4fDx1VUVBwUFRWb+/r6JFtbWwEtLa0hCQkJmfb2dk5eXl6EpKSkvr29fb6U lNR2W1sbz8XFRURRUdEIjUbrsFisThQKRRAKhUIwGCwQFRWF6erqYtTU1NCNjY3b+fn5CwAAjFVV VfVSKBTjP3/+FB85csTk0aNHbCqV+qW/v59aX19fRCaTN6Kiou5SKJS1EydOqGdlZS0wGIxpQ0ND 9rt370K2t7ebAwICbtJotIHl5eUeaWlplYGBgfympqbO3NzcajKZDCooKKB7enoqWlpaEmJiYuTG xsYq4uLiPhoYGKB27dpFfvjwIZ1Go6ltbW2xbGxsMAwGI0VLSyu1ubm50MzMjIPBYLR9fX2LQ0ND lZKTk7NiY2Ovz87O1rm5ue1WVFS0w+PxSigUqvrly5cOCARitqioaG1iYqJ3amqqRllZ2dDS0lK6 rKxsdHp6WkJBQeGnra0tAIPBtj5+/AicPXt2TURERPT3799wcXHxe66urt45OTkTXl5e3JmZmc1z 585pGBsb/1JVVXV2dnbWWFpaypCTk5s3NDRUv3z5suulS5fkg4ODp4KDg3fq6upCVFRU1AEA6MjL yxt1dnbGsVgs5pcvX1z8/f052traCnZ2dt3BwcFmkpKSDkVFRQ4PHz48VVBQEKKoqNjL4XBGlJWV ZSYnJ5VwOBx0aGiIsLS0JG5ra0sEg8HNbDZ7UUdHR//BgwfxJ06c0F1eXtaJioqSX1xchMfHx6uh UChaTEyMppKSEtrIyKiUQCDIMJlM0JUrV+D6+vrOdDp908nJ6S8SiSTq6Oh0YbFYZGJi4h8Gg6Eq JiYGBgCgwcfH52hUVNSVt2/ftoWHhx9nsVgzCQkJjfv37z8NgUBEjIyMnvz69cuczWYDN2/eBFpa Wqbs7Oysvby8Gv78+ZNjYmIyRSAQ9q+vr8+vra3NQiAQ5sbGBp/D4cDa2tqYmpqaBk+ePBnQ0dGR X15ervPy8sJfuXJlUFNTk2lhYdEAAoFch4eHM4qLi/9qaWlt5eXlbW9sbDT6+PjIEAgERGFh4Z+y sjKerq6u4bt372RYLFbf4OAgf+fOnQw0Gg3H4XDBampq+iB7e/vYGzduwJSUlBYYDIaOQCDA2NjY qB4/frwdjUY3NTU1GR4/fpw5MjIiHhsbq3zkyJHa3NzcXUgkUp5IJD4eHBz0WF5eHlFXVz+Dx+Or Ghsbn1GpVF56ejrm2LFjui4uLnEAAIwDAHBDIBAk8/n81sOHD/8+cuSIiaen5wEAAID79++/jIiI cKqtrc3fuXNnJIfDqf327VsfAoFoodFoQnd3d+PMzMzm9PT0Y729vct8Pn8Ng8HIIxAIwfb2dlVh YSHB3Nzc3NXV9RcEAgEuXLigbWlpOaGsrGyBxWK9FxYW0ldWVmpBIJB5R0eHGJlMHhMTExPHYrF8 DAbzl81mnxQRETEbHh5+U1JSArBYrLGnT58u6unpidrb229duXLl6MbGBlRMTEyvq6trx5s3b4Rd XV3erq6u4LCwMLXjx49XEggEFgwGk42Pj6fEx8e/k5KSwpPJZC0CgTDX09OD8/T03FFQUJAWFRUF efbsmd7CwgISBoNNHjx4MCAhIaHCyspK1MzMTL+2traex+N1ycjI7O7r62syNDRk6OvrezMYDB6H wwG1trb+7u/vZ4WGhnpLSkq6AgCwpq6unj4zMzPa1tbmKikpCfLy8looLi6W8/LyGq+oqNj56dOn P2JiYr1UKnXN29vbuaCgoHFubq5jbm6OdPnyZY2cnBxuaWnp4okTJzC9vb3Yhw8fWtvb2386ceIE TlxcnE2lUqWCgoL2jo6OZm5ubsq6uLioDwwM8D59+vT179+/Yg8fPnQWERGR7O7urmCz2Zz6+nqq nZ0dU1tbe5ePjw/Nz89vQ0lJSQSJREIJBAJRQUHBkUqlvq2srET19/eDZ2dn4TMzMwsNDQ1P+vv7 f3h4eFT8+vXL6PTp09Dt7e15Dw+POmNjY7v6+vrttLS03/39/X5tbW3rTk5Ovv7+/ul4PF7Uy8tL saSkZM7ExAQ6MTEx1N7erhwUFER9+vTpTHBwsKOlpSWktbW1wcDAgLi1tbWgoKCgMDc3J6+lpXWC y+V2jI+PF3d2diKNjY1XP336hNbS0lpYWlqatbGxEYXBYD2rq6t2TU1NZB8fH/q7d+9E37x5A4qP j2/8/PmzuKWlJbOyshJfV1cHrayslNna2oLMzc0t6urqEiEQCBSPxwtjYmJgRCIRaGtrGy4oKIjj 8/kNEAjEjkqlPiISiRcBAABUVVUzBgYGDIRCIXdhYWFVVlZWDwQCgfl8Ph0KhWpUVlYWEInEbgkJ CZXS0lLWoUOHXGg02sTr16/HeTze7+jo6OtIJNIyJCTk4NWrVx2HhobW8Xg8EwKBSJw7d44ZGBg4 wuVyIadOnQoHAKBrbGxMHJSXl3dcTU0Nf/fuXZaMjAzrzp07zmw2uxWDwSiCQCBNQ0ND5ujoqBGH w+lPSEioHh4e5qanpztnZma24/F41vv37wW3bt0SPXbs2LpQKOSlpaXVaGtrW7NYrI2nT59yrKys dp88eXJ0aGiI5OListTS0mLEYrG4Dx48SDl16pQJg8FYW19f3/r58yfR3Nwc1tvbO29lZaVob29v bGho+AkMBvPLyso0GhsbJUxNTZWHh4en/v7927p79+7ViIgIBw0Nja1bt27pZ2dn11EoFMnZ2dnt jY0NmKOj48L29rZZeno6Mz4+njI3N9etoKBAvnbtWoKBgcGKiIiIi7e3t79AIBjs6emZRKFQIDEx MS4EAiFgsVhaVFQUNz4+XhICgWg9fvz4yT967MX8/PwhNBqNP3fu3AyFQrH6/v3735ycnP1LS0vJ 2traeUKhcF1XV/ejlJQU38HBgdDX1wfk5+ef6e7u/pySkpKflpaWymazBwcHB8t0dXWdIBAIqqys rM/a2noTDAYb5ubmVgQGBrpERUU9dnZ2dt+zZ4+ShITE7+HhYWcoFIqJjo6Ou379+tG0tLS6y5cv X93a2qobGBig2tradiMQCO+amppZWVlZaRkZGcehoaGksrIyYmVl5c99+/bt8Pb2Jv38+fNjeHi4 QE9PTyUiIoJvYWEx0dfXZy4pKYkWERFZkpKSIv/582fOzs5Og0qldkRHR0spKytPGRgYIDo7O8Eq KiqY4OBgu/X19S4cDndsenr6maioqAoajUZMTk6ueXt7f2hubtauqalBQSAQoZ2dndnExETN+/fv +RQKZfnFixfksLCw3o6ODqm+vj66l5cXmUwmM1ksFn5lZQUOBoN/3759e19qamonHA6XRKFQ8k+e PGG4ubmhw8PDi9bX113pdLqlqalplZWV1eTZs2fJSUlJY5ubm82tra2+8fHxm1NTU+VNTU2OHh4e bCKRuKSkpCShrKzswuVyQVtbWzN4PF5PWVn5S29vryICgZD5pwJtjoyMNC0vL4ttb2/3EolEqpGR 0bG/f/+OdnZ2Nurq6u4NDQ2VlZOT43h4eCwxGAyEj48Pvb+/nyEqKsrbsWPHNXV19fDh4WHzgIAA NoVCQYWGhhpMTk5Oamlp+T979uyFrKws4vfv37xLly5Jq6mpHZmdnX0pLy9/VkVFJWR2dtYkPDx8 +cGDB/bnz59vvnDhwu+kpCQtAoGwFhsbmwaBQNphMNjzhYUFJ3Nzc4aHhwdCR0dnmc/n9/j6+h6H wWDss2fPZgmFQt7z589jdHV1K1RVVVmWlpYjN2/eJP348YMWFxdndvDgwbnt7e1pb29vu4MHD66D xsbGig8fPlzh7u4+2N/fT7K0tCRSKJStN2/eEL9+/QotKyub19fX98vMzExtaGjgZGRkBF+9ejUG AABBVFRU0MzMTAOZTL777du3J1lZWe1LS0uyW1tbci9evJij0+mSp0+fFp+fn/8gEAi+x8TE+FZX V2t0dnZ6i4mJdXd1dRn++PFjAQAAQEpKajklJQVtYGAwZWBggGtubt4MCAjo/fXrl11eXl53XV2d ekdHh9Ty8vK8lpZWZ2ZmpsbMzMyqi4uLRGBg4Il/yysgKpU6JiYmVl5fX48VCARjSkpKe9PT0zea mpoaTExMYC9evDhNpVI7MjMze5qbm8VLSkqiyWTyfSQSKezu7ladnJzk5OTkDLu7u8+y2WwrFRUV /dnZWVpiYuJCTk5OCAAAwMWLF6PKy8vFaDSaCAAA2KWlpUMAAACPHj160t7eXvXr1y9XNputzmKx dq2srORISEi4AAAgXVBQ8NzS0hLU0dGBNTQ0lCstLc13cnKyFAgEw5GRkbBDhw6pODo6aiwuLvYu LCwgpKWll9XU1OxycnLSKioqlD09PUUhEIiwvr5+PSwsTP/v37+NxsbGhjgczmt+fr4Qi8WyioqK aPv374f39PRM7ty50zopKel7bW3tuImJidLOnTtVEAgE7siRI2OVlZUHcDicdEZGxut/1tPEmpoa 2szMzCgajVbX1NRkRkREIOLi4tBnzpzR9/T0nDQ3N1/78+eP6NTUlFRwcDDD29v73Pfv399//fq1 6enTp+YzMzNIbW1tvoODw4qnp+cEBoOZvnHjxr6VlRVKYWFh4s6dOx0wGIzTo0ePoi9cuHC+pqbm wcDAAHt6elorKSkppqys7OnXr1+/PXr06F5WVlaDoqIiora29m1ISEgEGAzmbW5uQvbt2zcxNDRk hsPhCMeOHcuyt7ef/fv3L/LXr1+wuLg4MxcXl71NTU1vrK2tg+Pj47NtbGxgfD5/087Ozu8fm9Eq EAikExISbu/ateuAg4PDGS6X++3ixYvRGAwm6Pz589I9PT0tO3fuNBMIBCA+n4/icrmK1tbWczdv 3vwqLi4uISMjI5KZmQm2srKaa21tRUdERHg4OTltiomJcZKSkmAiIiLTBAKBPTU1JUGhUPwiIyOf BQYGyiMQCMbS0hL41atX3MePH+MYDMa2jIzMucHBwZ8SEhJcDAYjd+vWrbsaGho66+vrPCqVyn3y 5EkiAACCmJiYp2FhYeIAAAAoFIqfl5e3/eTJE2F8fPyyhoYG4devX68CAwNDL168OP/s2TNVFApF KSwsLPb29o5ISkoKxGKxvOzs7J0/f/5U+fcOLAgEIoBUVFQ402g0CSqVqpiamgq0t7fLHzhwwNHN zU2WzWb3GhkZGW5sbDAjIiKWjYyMePfv/x9V5/1O9R/38c9ZzuE4jnOOw7G3Y+8Z2SMyQksqKtEu olKKJkpDKAkplHyjrJIRMstI9p6H49hnH+c459y/dF/Xfb//h9f1fo3n8/FM3GppaTFrbGwMFAgE Y15eXkoIBEJDVlZWYmJiYlFKSmo0IiICzmaz2VZWVl75+flZTk5OZ/B4vFpYWJgYEonc+vz584qj o6NISUlJ25EjR8ypVOo4FApdy8/P783MzPRVUFAQyMnJ/V1ZWZH+8+cPms1mr5eXl0smJyebpKam EhQUFM7Ky8uPNTc3Kz148OAGi8X6BoVC5QcGBv6WlJSQLS0t11taWrB0Ol2mra2NxGKxsLt27eqA w+E2NjY2OocPHx5VU1OTNzU13TI3N7c7dOhQ/4ULF6Kys7P/YDCYzp8/f+rX19er8Pn8mdbW1qW8 vDxARkZm5fbt2xPx8fFVx48fX3n//r3y3r1755qamvZtb28v8vn8tejo6MmNjQ01NTU13tu3b8Ek EmlgaWlpMz09vUlCQiLT2dn5Wm1t7Zybm5vM9PT03NraGruwsLBaQ0ND4/Tp04FQKHRLVVVVxN7e ftrOzi5ga2trKjEx0VNbW1uzubl59ebNm6Da2loSCoUqCQwM9Hz9+nXHwsLCorm5+S4oFDr28ePH T5OTk/QrOwNCwQAAIABJREFUV65IrKysjONwuBVlZWUKgUCQPnnyZJiEhIQcgUAwt7CwmN6xYwfX 19d3qK6ubktMTIyppaWFYTAYIrt27XJNSkpahkKhSBMTEwkAAPiurq49i4uLQy9evDDu7OxUjIyM nBcTE0OSSKRBAwODtl27diktLS0NAwCg4u7uPnTp0qVOVVVVJTQajW5vbx8fGBjYPnjwoBkAALzt 7e0pVVVV9aWlpc75+XmJR48eqV+7dg349u1b67Vr19iOjo7I+vr6trdv3yq8efNGDYFADO/YsUNB RkYGCgKBRD9+/Dh17tw5B2Nj45upqalaaWlpbkKhkHL48GG1mZkZEQMDA6KioqKaUCjk2Nvb+3/9 +vVVdXW1uIWFxfjS0hKTRqOtTU5OJmVkZBwQExNbUFBQYIDB4D8VFRW65ubmcBkZmRklJSXcjRs3 Gr29vf25XC5WREQEcubMGUkUCtU5NTVF0dLS2nZwcLBtbGxcNjQ0xLq5uQ2mpKRIZ2RkmNPp9Clb W1tOc3PzWmVl5YaXl9dOV1dXj+np6VFpaWn17u7ulcrKSraTkxMWBAJxoqOja+3t7dfRaDSqv79/ 8sWLF1hnZ+c1V1dX3K5du6ydnJzqxsfH3xgYGIxaWVk94XA4nTAYTMhms0f9/PwGXV1d06WkpEwt LS31EAiEBZVKnb98+TL44MGDFCQSuR4ZGVnFYDDUuFyuZE9PD2txcXG5ubmZ4uPjo0UkEv+Curq6 nAEAAPLy8nR///7Njo2N1a2oqMDgcLhFNTU1uSNHjhCZTOby6dOnf/f09LD27t0rY21tPbZ///4E Pp+vzGazq0RFRXcymcwRHo83jkKh5KlU6sL58+e5hYWFx5BI5JOgoCBeQkKCTn9//0hnZ2fX3Nwc kJ2dXfwPdph94sQJYm1tbZONjY17aWnpL19fXzM4HC4BgUCU8Hi8t6urq82NGzfmzpw5o/3z58+b 29vbk/7+/qmioqIKHz58CDl06NBbWVlZAAQCDSEQCPvBwcGtrKwsXkdHR+Xr169Nw8LCcD4+Pjb6 +vqzYWFhvKioKI+FhYXhZ8+eZTQ2NnpCIJDpnJycLhEREXEikfi5paUltKamRj0+Pj6CQqF01dTU VL948YLH5/MdOjs7d+rr6986cuSITGhoqBGLxQJHRETMMhgM8QcPHixwOBwFY2NjpampqTYwGMzT 19dHJyYmsk1MTFbu37+vkpWVJQ2BQIS+vr5kFxcXZG1tLW54eFhsbGys1dDQ0GlmZmaTQqGIqKmp sfB4vB6Px1sXFRVVhcFgqv39/Q+VlJR029racsbGxmgnTpy4Jy4u7nDjxo2L169fd2UymQt6enrC //77TyI9Pb17bm5O/MiRI4O1tbXu2dnZWkgkUhwOhwvj4uKqbt++7d/d3d2+sLAwtrKyYnDixAmN ly9flp05c8YPi8WK7Nq1q/jWrVtICQkJreXl5U5bW9s/AABsOTg4hFhYWHzx8/Mzw2KxFAqFYtTV 1fVNUVFRwcDAwGV+fr4Xj8dzpKWloREREVpEIhFmYmIy3tPTA3/48OEZPp9P//TpU5qdnZ30p0+f RDkcDoNIJG54enoegsPhSqWlpc8DAgLO5eXl3b9x44bSt2/fuvB4vPn4+PgEkUh0MjExQdNoNHFz c/MnV69eBb5//y5uYmKiZG5uzuzv79fT09MT09PTM/1nr80+evSoFQKB4MLhcAEIBNr69OkTE4fD aS4tLW2cOXPmeXR0tOb6+rpmaGioiYmJyd8bN24I1tfXh/bt2/fm4sWLMXp6eivh4eGf1tfXK9PS 0iYcHBymMjMzTXJychQzMzPnIyMj92lra7+4e/eu7OfPn7ednJxAg4ODVCwWu5SQkJAoEAiW+Xz+ BgwGIyorK6dWVlZiJyYm1gwMDGQAAAA0NDSCeDzep7S0tLrjx487g8FgmIiIiLCvr69UW1s70NfX d7i4uBiLRqP1AAAA4HD4zqWlpYsYDMZvenp6SkZGBsrlcp9cuHBBKiMjww8MBgPz8/MIAwMDcz6f D4LBYKZeXl7BGAxGc9euXZzKykqkp6cno6CgYCE5OTkA9PTpU+L8/Lzm3r17VWpqahR1dHTWpaSk uI8ePTJ+8uRJva2trcOBAwd60tLSLhYWFr47cuTIOXNz89jq6upj9+/fT01JSQm1tbVdbmlp0YNC oUI+n78AAABzeXm5MS8vTwWLxW6dPHnSWyAQYFNSUm7FxMTsrq2tbVdSUiIoKysrMplMiJqaWhUe j4f39fWd+/nz54Cnp6eBUChEwmAw9cXFxTAmk0mNi4uzfPr0qY6jo+Pc2NjYJQAAwAAAAM7Ozplk MplZWlqKzM7O5sJgsF9ycnI7XV1dIQUFBTNRUVHG7969W0Wj0a8PHjyYikAgqBAIxHl7eztjeXlZ BgAAAIVCKaJQKIPu7u6LCAQCmJmZsZCSktri8/mr1tbWMY6OjlGNjY0vAACgg8Fg1OLi4ueEhISl Fy9eeLNYrOZ79+69j42NTRQTExM4ODj8dXJy6vn48aNjdHR02ZkzZ17JyMjkZmRkVMrKyroXFxez 5+bmBl++fBklLy+vDoVC11xdXa9LSUlp5ObmhvN4PFB+fn59Xl4eDIvFUmVlZUWdnJwkg4KCjjQ2 NoYTiUTC379/e5hMJjg2Njb43r17s21tbT2amprIb9++0X7+/Gm8srJie+3atdz4+Hi3rq6uKQAA gB07dtgeO3bs1/PnzzEbGxtYaWlpbktLy5q9vb3d6urqLQKBcKa/v3+oqqpqU09PjxgeHr755MkT KJfLFbq7u68UFRWBDQ0NRwkEAsfMzOxeQUHBGygUKoyMjHRXVlbuAYPBQHt7e2hAQMApPp+v9/Hj R/KePXuUaTSawrt37wYHBwfNfv/+Tb937573gwcPislkcr2pqakHDoebiY2NJdvb2+u9evUqvLu7 u9DExMSRzWbft7a29ty9ezc/KSlp19TUVNbMzMzq8vIyR1lZ2QqHw7WVl5fT/1leteTl5bfYbLb2 wsLCqqqqqoqUlJQFDAaDPH/+/EtLSwtkYWEBTSAQKu7eveslKSmJJhAI4jweT1BZWTnk5eVlQqVS qQoKCvv7+/sTaDQalEwmi+7Zs2fnkSNHBvPz8x3n5+dHFBUVVcfHx/vl5eWxAoFgC4VCEWtqauqO Hz8ujsFgpmZnZw39/Pxy9u7dK1NcXCxZVlamTafTjZSVld/Mz8/HX7hw4SKfzwc/fvz4yOLiIkVD QyMEAADg5s2bl3x8fExVVVVZEhISWlAoVI7NZg+Pjo4OqKqq4pBIpKZAIOAzmUwwCoUSjY6OfonD 4XQSEhIu/vz5083X1/dmc3Nzm7W1Na+6uloEiUSqqKurE1AolP4/tgTAYrEW6HT6PBqNVrS3t/9Z VlZWY2xsHAv+/PmzR0lJycnz58+LS0pKLq+vrytjsVh0YmLi9O/fv83CwsJ+rKysUK2srN78+vVL rqSkJPHhw4fq8fHxnyIiInQyMzNLampq5ufm5hq/f/9elpmZ2cPlcpWlpaUvT0xMNF2/fn2TwWCA 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 t8uXL+vKy8sbPXr06M/9+/d1QkJCnlpYWByEQCBAQkLCLgwG0zh27BhteHh4+vTp00KGhoZCIBAI YWZmNhEREREnKSnJFRER8R4YGKgQEhLi3rt3b0pSUlKSx+MtYTAYYXd3d3kajda2tLTE/vDhg5ZA IJhcWVn5KScnd2b//v1LkOjo6KNjY2PDVVVVetLS0tSZmRny48ePT+jp6c1NTU2xYTDY+smTJ8P3 7dunl5+f3+rq6mooISEhOHXqFHR9fV2dTqcLSUlJocPDw6f6+/urZ2dnJa5evUqRkJDYk5aW5kZF RUU5OzvnSEhIiGZkZNzV09Nr6Ovrk09LS7OMiYmZlpGRkVRXVxdfWlrizszM7JSVlWkbGxtT2tvb dxwcHOx0dXUV7t69u5eYmKjh4eExjUKh4CwWi/z8+XNsSUnJHp/P5+bn59Pu3r3LCwkJEcnNzZ17 +/YtZ3d3F5GZmWlKoVDWYTAYcOjQoYNsNlsagUCgYDCYsYKCwmp0dPS/jx490isuLqaoqalBDA0N M86fP28ZFRX1TE5OzhCFQjlZWVllLywsCFlaWrZmZmbOX758ORSHw/XfvXtXobq6euvUqVMBAAAA cDgcx+PxJqWlpTGampoYIpG47/79+3L29va8qampqubmZrCTk5MGiUTakZSUnJGXl4c/fPjQ2tPT Ez8yMsIRFhamcDgcITAYPG1paakwODgIu3XrltWVK1fwHz58EB0dHR0MCgraBwKB5ng83vbY2Jj0 /v37laBQqHx7e/uIiIhInby8/N6VK1d8WlpaYNnZ2epTU1NYeXl5WTk5ubH+/v6poKAgx7S0tNLS 0tJTLS0tK7m5uWYQCGR0cXFx6q+//mptaWnR9fX1RW5vb7Pn5+cJrq6uszExMb4gEKg8MzPTW1VV dVNaWvrdoUOHxNFotGpoaOj0iRMnFCwsLO4zmcxJYWFhqo6OzvWxsbG0hIQEGgqF2rG2ttYfGxub k5eX10tLS+OoqqrOJyYmyuvp6U1HRESoubi4cEdGRsy5XG5/aGio2djY2Pa+ffs2sVissqGhIU5L S+tgX1/fKwkJCQlJSUk1cXFxXn19/QAcDgcdOXIErqCgIOjr60NtbW2N29nZPY6NjV0wNDScLiws 7FZVVTU3NjYWY7FYHGtr69MQCGQtKSkJIyYmhlRQUNhmsViQyclJYyQSyTx58qSZqKjo/s7OzkYj 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 dEtLy+2EhIT7YDBYCQAA4MuXL5KfP3++amdn50Amky0vXLjAd3Fx0Z2dnd1VU1Ojk5SU5KelpVWG wWBWnj9/PnHt2jUDFxcXmb///psdGxurMD8/z0Aikfz6+noKBoMx6uzsxHR3d0+ePn36kI2NjSYM BqO3tLQkdXZ2HqLT6Yy+vj4ABAIB7e3tap8/f2aurq5q2NjYWHh4eLA+f/784+3btzxXV9fPdDrd PzIycurixYvShw4dAnt4eKwIBAIeAABAVlZW2M6dO+l5eXlfhULhfGtr6w8CgQCm0+k6FAplIDQ0 1CsuLo6zvb0twGAw8P7+/go+n29w8+bNU0pKSukcDucGnU6/NTMzIyUhIeFvZWW1tW/fvm0KhdJB JBL9o6KixDdv3iR4enpKDQ0Nnbl3757ElStXpNfX1/sdHBzcu7q60ufm5iCvXr3Sraqq2kMikT4o KChIo9FoNBwOx8bExEQKBIIqUE1NzSlVVVVeYWEhMTo6WqGtra3k7du30o8fPybhcLjA+fl5DzQa bcpisXbHxsZ2ZmZmmv78+bMzPDw8QEZGZjcAAICPj8/Zf/75x3h+fr4uLy/PsaioyPfZs2e5fzTj Rr29vdOZmZk9JiYmuPfv3z8EAAD8/fv3F7du3eLOz88jCgsLZ4hEopOMjIx7YWHhtfDw8PT/9c9j Y2PHZ2Zm1Gpra2vFYrFJW1ubTnt7O1FCQgL06NGjx2Aw2JzBYAwtLy+LhoeHlaKjoy0OHTok5eXl taSrq7vA5/Ph58+f98RgMJZ/ilTGy5cv95w7d+6tvr5+r4ODg0Z3dzfdxMTETU9PT7+oqOhBSEiI 19DQ0ISZmZmrnp5e1a9fv0BQKFS8srIiCAkJwWZnZ3ebmZlZlpWVleBwOGJTU5OMm5ubg7q6OsfX 13fZwcGhZ2ZmxltOTm59c3MTjcFg6r9+/fo2IiLivL29fZu9vb3PH296n7Kycgyfz597+PDhyMWL F30gEIhJcXHx2507dwpbW1ul/Pz83MBgMDAwMPBFS0tL99evXz0oFEqorq7O0dDQOCAUCnkAAABg MBjr6Oj4paGhoY3H443B4XD52dlZVwcHh6Xx8fGN+Ph4aRQKxTl27BgJg8EIHj58OOPn58fQ19fn SkpKJn348OHx9+/fmX19fQafPn1if/r0SWVgYGA6MzNzZ39/PwUEAsGsrKxcDh06lP/3339rotFo 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 7+fPn3lGRkaM4eHhgLm5OeXQ0FAsiUTyMTY2lj537px4bGxsoLGxcXFgYIA9NzdHEQqF2JGREYml pSXJtrY2ZTc3N6yXl1fsz58/JwUCwZaMjIysWCyek5OTU15bW2tXUlJi6OrqblVWVm5oaGgw9u3b J1NQUPD9+fPnr69cuZLHZrO/0en0HhgMJrO1tbXs4ODgoaGhIREfH9/v7e1tNDAwQOZyudtBQUET kZGRhiQSSaG+vr63pqaG5efnJ2hubh40MjKyFQgEC319fR93796tAYFAjHR1dc17enpK/vvvvwQA AIB37949v3Hjxgc3Nze5b9++Sbu5ua3q6emp8vn8nywWa6u3t/cjiUTyaW1tvV9VVbXZ19eHNTc3 by0rK7M8dOgQamxsbOD06dMYS0tLMwkJCa3/Wzq3bt0adnJyMpaXlzdZX1+/KRaL5aqrq39mZ2fv olKpm729vZRr167N8fl8eRUVlZ9VVVXxQUFBG3A4nDM/P/+7qamJsrW1xYPD4ZJPnjz5b2trqz4l JcVCTU2N6ePjM0Ymk3UdHR1Zm5ubUlZWVkMHDhww4/P5M/Ly8uZUKnXMz89vIy0tTRcEAnEwGIzs 6urqxMzMjIqmpmZ3dHS0gkgkGoiOjn4aERHBnp2dNayvrydevXp1BAwGK4vFYoDNZv/68eOHioGB wUBRUdFsV1cX5/379+jy8nIFBAJBFAgEGyKRSHt1dZWmra29IisrqykhIfFHSkrKSigUzl66dOlX WFjYnrKysq8kEmmAzWYj8/PzA2AwGLGysvLXzZs3iXV1dYOJiYnOSUlJtMXFxe87duzwnJqaKgSB QGsIBEI2NzcXdeLECeuampoXTk5O58LCwtjOzs76LBYLJC0tza+tre1aW1vbrK2tRd67d4/233// 2VVWVoq9vb2fycrKKpqYmEDs7e1HOjs7qS0tLepBQUG1qamp6tbW1oC5uTlDV1eXbGJiIuvq6mpJ IBD+Nzc314HFYncTCARhR0dHq4eHBy4iIkIJgUDoQyAQIQwGmz1z5kwDhUJZkJGR2aipqdn95csX CQkJCSAhIaHjn3/+waytrS2ZmZlh8vPzcf7+/v5QKBTBZDJfnjhxotfDw8MyJCQESaVSn3h7e/tQ qdTWysrKvLKysnv+/v6aaDSap6Cg4M3hcOa+ffvWV1xcfA4CgeAjIyMlgoODBXv37nVaW1tTu3// vlZJSYlw165dm9PT09XXrl3rc3d3V1BSUqJPTk7C4XA4PyAggCQWi3u3traoV65cme3u7hZ1dnYu 9fT0/IyNjd29tra2JBaLfyUnJx8/derUQ319feHAwIDUw4cPHSDZ2dkPFhYWnqWmpv7LYrEqBgYG bDIzM8EwGGx3bW3t68TEREsEAjF49uxZg6KiIiiHwxGmpKTs8fHx2bu5udkXFBS0ICsry758+fIj CAQiubS0tPHo0aMfHz9+5DU1NQnS0tI0KysrfykqKi53dHRw1tfXN+7cuYMyNDREv3v3Drxv3z4m j8f7TqPRVDY2Nsjfv3+nS0hILGKxWE0nJycUn88HmZiYkHA4HEdFRcWovb19rqOjA3b48GHR6upq 19mzZ+3v3bsXBgAAn06n1xEIBEM0Gi2EwWBbIBBIikajDZ4/f/6LpqZmj5WV1Zazs3Ognp6exMzM jMG5c+dwNTU1bCsrq61Hjx49Dg4ODhAIBCMAAHTg8XhSd3c3f2ZmZmNsbEzH0tJy4tatW9ZdXV0D d+/eHff19V1//vx5v66u7vvl5WVmVlbWVG5u7q+4uDhsYmLi0+vXr0eEhobOslisIRUVFfG9e/f+ NzQ09CgvL8+Zy+WurqysQMLCwro7OjqYSkpKC1euXFHQ0tKSsLS07FdSUuJVV1f/Y2JismZra5tM JBLrmpqaEPb29gt79+4lZWVlxXd2dg5++fJl3cbGhufg4ICdmpoinjt37vv+/fv1X758uZaenm4u ISGhsLGx8UpGRsYNBALNR0REtEOhUFBMTAyLz+drKSsrrz9+/BgNhULBbW1ti1FRUdATJ060CgSC LWlpaW5CQgLC3t4eJCUlJRMUFKTc0tLC9vb2TmhpablvaWl5mE6nt42NjQGKiorSOjo60kwm88fy 8rKxpKQkZHNzc+zTp0+jYWFhqPT0dExcXJxOX1/f/bi4uBgnJyf/R48eTSkoKKxTqVRoXFxcwfj4 +Ls7d+58PXz4sNPExMS4j48PLikpaXvfvn0Sly9fpoBAIBAcDl9mMpkYHA4nNzo6+vHLly82enp6 ivr6+mWVlZU7/f39maGhobZSUlKTT58+VVpYWKAODg6CZ2ZmwAcOHDi7vr7eJSUlJU2hUObFYrGc qampGZfLXc7MzJzX09NTV1NTUygrK9v8+vVrt66uLiM0NNTt2LFj/J8/f6p6enp+9PT0VIdCoSxv b2+NwcHBOTweD4uJiVHEYDBrfD6fjUQin8zMzNgFBwcHSUlJIVxdXW+GhISYwuFwQk5OzvzDhw9X CgsLx62trbWYTCazubm5pLS0dL6rq0s8MDDw1svLa4+JicmdL1++CBgMBheNRtNiY2M1rayshjQ0 NEiFhYXgvr4+1ufPnzsPHjyoqKqqOorD4Wjfv3//npmZuVZeXr5SUlISZGxsPLS4uIjOzMzUf/jw 4Rc9Pb0NCwsLt+bm5ke+vr4wCwsLmZSUFMP//T+mzvqv6e/9/88lLBhjDDZidHeHNAhYSCmipKiA AQag2BhYKIqK+lIRUMBAVEAUBJQuJaRrwGDURoyNbay/P3x9326fv+D8cs51O+c6j+t+j4n5DoHD 4Yb19fWwr1+/9mzfvt2QxWINODg4rPX397d8+PCBmJeX96Orq2u+p6enKzExUdrBwcESg8HInThx ogWLxdJzcnLW9uzZoxcRERE8Ojo6IhaLwcPDw6yoqCid7u5uuKysbGVvb68dAAAkRUVFIolE6t23 b5/X169fp0ZGRo74+fmVzs3NQQMCAtzPnj07ZWJiIm1nZ6ciEom4z54960lNTV0LDQ0dqa2tXfL0 9FTn8XhTVlZWbAQCoXrr1i3M79+/tf/8+fNJIpG85nK5K8XFxa1KSkp0BQUFXZFItLJjx45SLy8v NSkpKZympqZFZ2fnwq5du9gFBQXEY8eOrSUlJdH6+voQdDp9rbOzswKNRgtIJJJabm7u63379s1+ +fLFLi0tjS4UCtlra2vrKBQKkpyc7EulUpvd3Nz8q6ur6WFhYacPHDiwNT4+Hjs5OTnr6upqCgaD NxwcHKRnZmaGCASCuZmZmUtAQIAxCoWCQ6FQNhaLVY6Li7N+9uxZf3p6usrCwgLZ3Nwcnpub2+Pr 67vJ3t5e6f79+xUeHh5m4+PjM+rq6uy9e/eutrW1mYLB4F8WFhZycDh8+OPHjybT09OTr1+/7rSy skIDALBw8+ZNxSNHjiiNj4+XtrS0kAICAvACgaDnwYMH0qWlpcaBgYHLLBZLPiMjo8PW1lbr79+/ LZWVlfkHDhyoVVdX96HRaIuurq5ex48fJz9+/Bipq6uLpNPp/LCwMLmFhYV1LBa7gsfjPffu3fsT hUJhk5OT8ZmZmZ8mJibaYTDYZF5envv09LTSrl27Zh49eiRLo9GmKysr+xMTE71zc3NrU1JSOtTV 1fl37tw5XlNTU0OhUKqUlZX5Ojo68FP7bjK4AAAgAElEQVSnTlkKhcKhhw8fikUi0frZs2cP1tXV NQiFQuHfv3/VXF1d0Ww2m62vr899+PDhMBgMZguFQgsvLy9uY2Mj3svLa2VwcJAuFosVYmNjLywv L/9hMpmC3t7eYg6Hw7Gysjo6OjpaaGFh4ScSiYSRkZEtX79+dYVCocy7d++O79+/X53FYk0SCAQQ mUyeu3Dhgoy/v/+sjIyMqrm5Ob6/v39RWVlZW0dHR3///v3PwWBwp7GxsXxiYmKgoaHhxt27dyUE AkGVQqHME4lETxaLhT579uxAbm5uBBwOp2/fvl1dS0trc3V19WJISIh9UFCQBoPBEAoEAom9vT3y 5MmTIYWFhenq6upmJSUly3A4XBuHw62BwWAFGxsb9tGjR/W2bdsGOnfuXBcIBFLV0dHRX1hYWDI0 NATzeDxWenp6n5eXFyIkJCTp+PHjqwkJCcYxMTELISEhuOHh4RkWiyVlaGjY1NfXtxQfH78FEhQU FDAzMyPl5+dnTKfTKRwOh+vo6Khvbm6eDAKB2n7//o1JSkpiYDAYdmlpqcnw8PDI1NQUBQQCTf5z 57XX19ePEInEaVVVVY5IJIKKRCKGt7e3R0REBMrCwmK3trY2SFlZGe3i4uKuqanppqqq+ikrKys0 LCys5PXr15jq6urulpaWRXd3d5SUlBSLx+Ox+Hw+YG1tPXfq1Kk1KBTqefjwYdrw8HBHc3OzjKys rOzExMTakSNHBBQKZenZs2fMnp4e2UuXLsncuHEDCwKBas3Nzf36+/sHnz9/7jU6OkrDYrFtg4OD y+Hh4bbNzc1cBoMhPz4+fqm+vt579+7dERQKpdbPz8/M0NDQMjU1dcbU1BSUn5+P8/T0XGCxWIJD hw45EYlE0crKiohEIin39/fP02g0hpubmxsIBFIUCAQDMBjM+OXLl/VoNHpSU1OT8Pz58762tjZJ RkZGsrOz842DBw+GrqysjGIwGIvR0dG3WVlZrZGRkYY8Hk8Ki8Uu0mg0zuzsrOL58+eVoVAowd3d 3QAAACiDwSjR0tJSE4lE7aurq9qGhoboN2/e/FhdXUXT6XSympraypMnT25duHBhODMz83R8fDz8 69evJa2trQqbN2/WUFZWlktJSekwMDAgzM7OTohEIrW+vr4fnz9/Prpr167J8+fPvy4rK3t0586d 8+rq6mlWVlaXU1JSCg4cOBB24sQJXlZWFgWFQslwuVzwyZMn+0kkkoKBgYE5FAodPnv2rEJOTs4s AoGArK2tmZFIJJvq6upNRUVFBfX19crnz5/XaWpqEqJQKIyvry9tY2NDaGdnpzA7OyvZvn27iYeH h+3jx49nxsbGhtPS0go+fvzYaGBgoPLgwQOUra3toqqqqh6Px/uuoqKiqKKiMoPH45XNzc0x7u7u 8kVFRSAikSivrq4+rqWlBQ8JCTE6ePAg5datW5jBwcE1eXn5znfv3s12d3cTrl+/7jczM8MdHBzs bmlpkaXT6R1mZmZ79u3bpwmBQGCHDh36e/v2bTyVSoUqKyubq6mp9crIyMiur68j0Gj0uouLyyU+ nw+YmJhscDicVQwGM9De3u6JQCCszczMWL29vX0kEgm+efNml8HBwUEikahYXV39NC8vD3j+/Pkh GAymzWQyK7u6upQkEgnT19c3AgwGcy9dutS9b98+yqVLlxQfP37cTSAQcoODg/GfPn0igkCg2WfP nv1nYmJi2NXV9bW9vV2dy+W29vT0LGhpaa2bmZnBz58/Dw0NDSUZGhpira2ty/38/Gza29tXN23a tL2tra2Mz+dXk0gkVT09PcXy8vIBPB4vOn78OGZ9fV3Fw8ODALGwsDDw9/fX8/PzMxUKhaUnT56M io2N7YfBYGuLi4u8kydPbllZWenr7e3lhoWFucjKynZ8+fJFcevWrQg2mz0VGRnpOD4+jrp//z78 xo0b57q6uj6cOnUqeWNjY7mmpoZhbGyskpyc3KypqSn49OnTsImJiZyFhUUoAABze/bs8YfD4Sga jfY3ISHhABKJ5NjY2BgikUgBAACjxcXFzNraWrCjoyP60KFDcg4ODgb5+fnLs7OzwysrK+QTJ05o UqlUbmdnJ4xGo7Grqqq2o9HogczMTIMLFy5M7tq1y+TJkyddurq6G1paWpDLly9jrl27Nn/v3j2h s7PzZSMjoxAYDEa9efPm9x07dmzKy8vjgcHg/oSEhKXCwkL1hw8fmm7ZssVTVVWVXFhYuH7nzp2P vr6+SBKJlMLj8SgkEknS19c3tXXr1qMrKyvSV65c+XPz5k0pY2PjaKFQCB8aGurS1tYexuFwkqSk pC3r6+tl0tLSCv/9998vJSUlsxcvXiD7+/s5KSkpSh8/fuRoa2uzQkNDZclksoy6ujq6v7//zIsX L6RfvHhB2rt3ryAyMjLg6dOnzjo6OrX19fUrTU1N7NLS0lO2trYnvb29n7S2tl6jUCjNAwMDZfn5 +XwfH5+O0NBQ9/z8fGRUVJRgampK3d/ff2llZaVrcHBQtby8HDk9PS3l5eU1eOnSJRk+nz8uIyOT CIfD0aGhoYekpaX7AABotbW1VVJUVITp6uq64nA4YP/+/VPr6+urCARC6Obm1nr16lUEkUiUb2lp MamqqvKrrq72OXPmjEZgYCAKh8Op7Nq1K66np+ePUChcNzAwABsbG4tzc3PJ7969m4+OjrbB4/Fl x48fz52bm8vH4XAN8fHx/gMDA2/V1dWNZWVltxkaGnrp6emp2drahuFwuFEpKSlET09Pi5ycHNfS 0lKdTCaL09LSank8npmLi0tJbm6upo2Njayuri4eDofTFhcXqS4uLhQOhyNhsVjQuLi4k1QqtWpj Y6OdSqWOlJeXF9y6detgRkZGZWJioguJRBp59OiRYnR0NKazsxNJpVKXOzo6ahEIhACJRA7fvn3b FwQCPdLX11fS19dfefLkyRqJRBqPioqyX19fX8nLy4M8evRI2NPTY3b69Onfi4uLK2g0micWi9Wt ra23MpnMGRQKNX/jxo0sV1dXyerqakVzc7PWlStXGnR1dSMuX76sUlJSAg8NDe1VVFRci4mJcdLT 0zPR09ObePz4sTQMBpMKCgryb2trq6PT6bbh4eHI0tLSucDAwMClpSUOHo/HKSoqNigpKXF+/vyJ NTIyKi0qKuKpqakxyWQyOCsry+Pp06fDwcHBqqA/f/5k0el06tOnT403bdrUn5KSkiwSiZY2NjZ6 USiUg7+/f761tTUFiUTK2dra0goKCkzOnj0729vbywwKCronEAgag4ODK758+XLjn70X3tLScio/ P995x44dHH19/Q8kEsnl8ePHY3w+fyMyMtISh8N5Q6FQ2ODgYB0AACA9PT1XFArlsLi4mA0Gg41C QkJKAADQHh0dRfv7+w/fvHnT9MmTJ33m5uZSxsbGBAAAAC8vL5knT560fP36VcPMzEzO09NToKWl daK8vDzH3d1d6siRI5SoqCihq6urk4qKSjGdTn8kIyNzsrOzc5OOjo7z8vLy2O3btzt0dXXlo6Oj LVtbW8MCAwPTnz592p+Xlzf+8OFDMovFOgmFQpm3b9+mEIlE8PPnz/WkpaWp+vr6DKFQCHn48KFq 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 zPbt2/coKyvbnzlz5ktISIgsISFhs4KCwlRSUlL5wMDAptraWp0rV644oNHoeXl5eY2VlZXvpqam 1hwOZ2X79u1kNBpNSEhIaLOysurG4XAkExOT1cjISERWVha9pqbGKzAwULBlyxZFKyurPVAodFlF RUXf1NRUa3l5Wezk5HRxamqqpKioaN7KysocjUZbtLa2vjY3N7/w48eP3k+fPoFAIFCvj4+PdH5+ HlNXVzfT3d2N9fT01Dx//vy++fl5dRcXF/D27dtnORzOZ3V1devu7u74uro6vJeXF/7ChQsBPB6P amlpaYpGo8V4PJ7t5eX1T25u7qy7uzteIpHMcjgc2tzcnCA8PNwhMzOzcWFhYT02NlaByWR+ZbFY S0+ePLH18vKiWFlZKXZ1dbX5+Pis2NvbK66vr8NaWlpQPT09QqlUipicnOTPzMwgIRCInK6ubiuY QCBQXF1dUXfv3u0eHR2V3bhxA3Bxcem8f//+y5s3b3Z4eHi4JCQkBDGZzOKIiIjm+Pj44bCwsBqR SARqa2t7CgAAoKqqKpTJZPMEAkGgoKAwHxsbm7K2tpZHoVAEN27cUFtZWcnKzMx0q6mpMY2Jifl7 69atLaqqqjsfPXq08f37934ulztuY2NT293dbbq4uPi7tbU1hEAgQOPi4qxhMJiZsbGx/cOHDw0M DAwEf/780QaDwTIymWybl5e318HBgT4+Pv7X1NQ078mTJz/Onz9P+/nz55ynpyd7enrazNnZmd/c 3IyYnp5GAwAAXLt2jRgcHDx84cKFsdbW1oMkEkmIRqPlnZ2dlbS0tGhKSkrEqqqqGldXVxUOhwML DAw0+/Lli2FaWtqsUChkv337lsnj8Y4NDw9XJyUliYlEIjU7O1tOTU3NkEQi6VpZWZHy8/MbyWSy bHZ2VhIbG4ujUCgmampqZjQaDXfw4EEHHo/XraysfAmHw2Xo6OhUCgSCMDKZPHXhwoW26OhoTSUl JVJ6ejqMwWC0CYXCjzo6OnVsNnvh4MGDp+vq6r6AwWCguLj4OZVKvW1lZfWPQCDgfv36Vchms+Gx sbFaPB6PQSKRlmUyGainp0dPJpNxNjY2QMrKyiHW1tamXV1drtPT0/Xl5eWdNBqt1dvb+/bNmzdn v337hnZxcUHW1NTU6+npzQEAANjb23/q6uqKKioqypubm9OIjY01SU5OLvr58+fCmTNngvLy8oZR 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 "
+ width="256"
+ height="256"
+ id="image2715"
+ x="0"
+ y="0" />
+ </pattern>
+ <clipPath
+ id="clipPath6238"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ d="M 52.094352,312 C 49.758741,312 48,313.27843 48,315.94967 l 0,167.46562 C 48,487.36726 50.446761,490 53.771787,490 L 243.327,490 c 3.34438,0 4.673,-2.46074 4.673,-5.90535 l 0,-153.45622 c 0,-2.95096 -2.01067,-4.54661 -4.51602,-4.54661 l -93.98741,0 c -1.69284,0 -3.90443,-0.77514 -6.49302,-2.5614 l -13.0712,-9.01978 c -2.20925,-1.52449 -4.22518,-2.51056 -6.08975,-2.51056 L 52.094352,312 z"
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ id="path6241"
+ sodipodi:nodetypes="cccccccccsscc" />
+ </clipPath>
+ <linearGradient
+ id="linearGradient4347-6">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4349-3" />
+ <stop
+ id="stop16444"
+ offset="0.5"
+ style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4351-6" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter4375-3"
+ x="-0.012418499"
+ width="1.024837"
+ y="-0.35608697"
+ height="1.7121739"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0664062"
+ id="feGaussianBlur4377-0" />
+ </filter>
+ <linearGradient
+ id="linearGradient4347-6-5">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4349-3-4" />
+ <stop
+ id="stop16502"
+ offset="0.5"
+ style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4351-6-4" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter4375-3-0"
+ x="-0.012418499"
+ width="1.024837"
+ y="-0.35608697"
+ height="1.7121739"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0664062"
+ id="feGaussianBlur4377-0-0" />
+ </filter>
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#pattern2719-8"
+ id="pattern4229-8"
+ patternTransform="translate(-523,-583)" />
+ <pattern
+ patternUnits="userSpaceOnUse"
+ width="256"
+ height="256"
+ patternTransform="translate(-523,-333)"
+ id="pattern2719-8">
+ <image
+ xlink:href="data:image/png;base64,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 3NySOBxOkZub25pQKFyvq6tzsbW1nRoaGvIFAIAgFovXOjo6qvX09EAikQjAYDBq09PT9V+/fsXa 2dlJ/e9//+s+evSo0okTJ2YBAHD78ePH72PHjmUCAABMT0+nDQ0Nfe/p6ZHmcDjEHTvIwWjxAAAg AElEQVR2CDEYzLqvr6+GhobGOp1O92QwGJYsFuvu1taWjpSUlDufzwfNz8+v/vjxY+TixYsuKBRK BQKByAsEgjWJREIZGRkZxuPxgp07d6KysrLGvby8/jc7O1tAoVDgcDh8UVZWFnf06NH5ixcvStXW 1oqDgoKgtra2e9bX10cYDAYNh8PpUKlU2OPHj2vOnDkju3v37t0bGxsyqampT+fm5tZPnjwZQKfT +xsbGxWam5vF6enpBDwerzU5Odmvqqo6XlNTQzx37hylpKREWUdHhxwVFTV27do1opycnNjT09Mg Nze3mUKhED58+DAQEhJi0djYOHXr1i3Mly9f6jEYjJqNjY2zp6dn4/fv36WRSKSqhobGtpKSEnF1 dfUtDAY7OT8/T+fxeHo7duyAXb9+fTo3N1fGwcGhTEZGRhYGg/HOnz9vi0KhaN7e3rM5OTkK+vr6 HtevX/9+//79K+/evbvK4/H4ioqKKG9vb/+YmJjfly5dstm3bx/K19e36/nz508/fPjwLjc3t/L3 799vuFzuy+Hh4T/Xr193fvr0qYKBgQGuvr5+/NChQ8vnzp1T0NLSWhGJRNz19XVcbW2tho6Ozpfk 5OS/q6qq0m1sbKwXFxc/6ejo7LO2tqa+fPlSfXt7e+bKlSvmfD4fUVVVxadSqX8eP35M/fTpUxEA AEBVVVVEeHi4Vm9vrwIMBoNMT0/3ysvLb0KhUHcUCiWWk5Pby+Px7sFgsOOBgYEVGhoaW//8888h KBSqOzw8HD01NaVmbm5uqKys7BEcHOxrbGzs4unpCUxNTa2MjIwIXVxcjJqamqCNjY3Kjx496rK1 tb0UFRX1LDU1VZnD4bB4PN4ij8dTHx0dnQ4ODr4lFouB9vb2Aj09PXkZGZlgsVi8WF9ff3lkZAR/ 6tSpZyKRqO/Nmzdvb9++7bdnz56ypKQkaxqNhoDD4WJZWVkiAACAjIyMcHl5mamlpRX6H+W4+Ndf f73w8vLSPXjwoBGDwVg7fPjwgq2t7aS8vPyEtrb27r///hvQ1dUdxuPx2o8ePbIBS0tLS/P5/E4u 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 0ul0eS6Xq9/e3s4KDAws4HK5U2fOnEnLyso6p6SkRPX29ladmJgQsra21h0ZGdmanZ2VKCoqYmxs bICxWCxUSkoK0t7e3l1TU9MPhUK3a2pqaGw2W+rhw4e9N2/ebFdUVPytra0tmpWV5XD//v1vZmZm G2pqam1bW1vZ4+PjSCEhIRU6nT6FxWIJ29vbtX5+ft81NTUpVlZWNAMDAzEAAFb+obujIBAI+H/j uV5eXpSIiIj8/Pz8hrm5uY6/f/8az83NaauoqMifPXtWWkhIiBQdHb3c2Nh4ks/nO5NIJHxDQ4P+ 8vKyyr59+6zAYHCAubk5ZGtrS8vPz+9vfHy8upubG9XX13e2vr5+KTIy0vfgwYPpdXV1OqdOnTJS UFAIYzKZLBgMJrq+vh5mbm6+ZmlpKU2hUDiGhoYEa2truJ+fX9Dhw4eP7Ozs0J88eTLu4eFhee3a NYSnp2eWlZXVIQkJCcnGxkaRsbGxLhwOJ7W2tjbd3t7+QUtLK/jNmzdRMBiMb2pqKunq6jrBYDBA RUVFm1NTU+8gEAglOztbwcLCghAaGtr+9u1b3P3796d//vxZEBwcnPnr16/PCATi2MWLF1mlpaV7 t7a2hBMSEpwPHDgg0dHRYfLhw4dADw+PfRcvXuxWUVGJLC0tjQ0JCWl//Pix0ePHj8UNDAxEsFgs g0wmjwMAAKBQKCcmk1mVnJx8fteuXWIEAuEnGAwWXLx40fHLly99UCi0X0pKat3R0XE4LCzMgsVi WQgLC681NDTs7uvrQ+Xl5Y1AoVDIz58/Z728vC74+fn9JJFINFFRUbaQkJDko0eP/uBwOPyTJ084 SUlJ+C9fvuyIiYlN37t3zwUMBgPFxcVDk5OTTZqamhh/f/9vQ0NDeqmpqddiY2N3rK2tNRobG+XP nz+/PjExsXjixAldKSkpOovFmv3H9JOAwWCGSCTSAAKBAD09Pb1WVlaeCASC7+DgoOTv70+ora0l u7q6GomLi8/+i9J9ExISgN7e3hUkEtk7PT294Ozs3FdZWdmdn58fBAKB+KKioth79+6F3b9/32Zm ZoaJw+GU/uHQbRMTEyF6enp/bW1tk2ZmZq6vra3taGhoqO/evXtWTEwMyuPx1mpra4du3LjRuLq6 iklOTvb/+/evXmNjY//Y2NhCYWHhaTU1Nea7d+/uUiiUaxQK5Y6jo+NqUlKSlImJSXhubm6bjo6O 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 LB4/foxcX19nGBsb9+vo6ITS6fRZAwODvp6eHmNpaWnPrq6uD8HBwZ2rq6vE8+fPkw4ePGhYWVnJ sLKyYnR0dNC3trZgy8vLovfv3/dcXl5emp2dpaLR6CpJSUm5Hz9+9PT19RnGxcWZuLq6zmVnZ086 ODikgMFgMQAARO/du/cwNjZWhkwmI3Jzc8eDg4Nn19fXYfb29vshEIjw0aNHr548eZJAIpFUzczM WCIiIrJoNHp6bW1NXEVFRX1paYn84MGDqaCgIA0ikai5trb2+vbt279///6tNj4+fkRfX3+hsbFx kMfjTdHp9D0SEhKztbW1cpcvX2a2t7f7Z2dn50hKSsIwGEy9uLi4mYmJya7W1tYbVCrVdnl5WUlH Rwfh7u4OoFCowa6uLr309PRlDw8PkJ6eHvPjx4+wqqqqLRcXl2FtbW07CQmJKhMTk6/Ly8tpTCYT Iikpif9flVxTU9P2yspKt5+fn7Wnp+fz2tpa56qqKqkTJ06IXr9+vauzs3P72bNn8VpaWn8+fvw4 /+PHj/GoqCiPurq6Im9v70QoFEoAAIDv4uJS+PXrVwUUCoWNjY297urqKiEjI+OekZFBy8nJwTo7 Ow91dHRc5HK5o2lpaV/t7OwQOzs7QuBLly6tioiINBkYGPjCYLDQ/v5+TllZ2Y2+vj6csrLy1NDQ 0Lu4uLj61NTUr9nZ2XWysrIHbGxsfO7cuZOenZ1NunHjBnv37t3bPB5vrqKi4mRhYaHW/v37vcLD w9/SaDQql8ud6unpeXX9+vW+3NxcnZKSEvj8/PwdAADWAABYo1Ao99LT05tDQkKGwGCwrkAg2GAy meD09HTlwMBADxsbG+uXL19uDgwM3AGBQAqWlpZAfHy8qoeHx7ShoaH16OgoY319fRsMBnM3NjZq 4XB4DxwOl7t+/fqStrY26vbt25fodHpVU1NTroODA4vD4Uxzudypo0ePhh88eFB/Y2NjRVNT8w6d ThfS0dGRDAsLUzI3N1fJycmRn52dHSgtLU35/ft3dnJy8u+2tjZxZ2dnx6WlJcb79++nFxcXHfbu 3esvJCQk+/v3b+fOzs6d2tpaelRU1Fc+nw/e2dnhbG9v183OzrbweDzpvr4+6ObmpnBjY2NwZGRk FRgMvr22tpbO4XAmmEwm4ufPn+3t7e0yeXl53TY2NuIWFhaI3bt3W1dXVxdevXp1FgwGQ8FgsGZB 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 RoYlAACAvb39nrGxsVIIBIICAECgoaFBEQqFrNra2lI1NTVlNBotIhKJOw8dOpTu7u4+FRUV9Wxl ZaVjdXV1/c6dO53Z2dnBu3fvLpqZmcHj8Xi4vb396KFDh7T++++/+Xv37omnpqZu/j/pEQqF0yAQ CPDw8HgWFRXVOTQ05D08PCwGAGC4pKTkIggEAkZHRzP09fWvNDc33wsMDMTfu3ePam1tLRcZGanc 29u7V1VVNaOiokJWUVFxA4vFkh0dHafu37/fvX379q8AAADt7e0pm5ub0KWlJR09Pb3WxsZGLQaD IYyMjNTA4/E0sVgstbCwMMbhcPTIZLIuCoVa7uzsHPj06ZOGh4cHLzc3F8tisdpv3bpFTE5OHq6s rLRDIpE+k5OTNVJSUpL9+/e3x8XFyUZERFyfmJg4mJKSovPw4UOZtLQ0fl5enm9RUdEFPz+/oxAI RNbPz+/+58+ffX///j1gaWmp7e/v3wE5efJkBJ1OrxgZGQkNDQ1dDA4O9mUwGPMeHh5xMTExP6Oi osgIBIJIJpNh8fHxKxEREajS0tLVmJgYzYSEBImqqqotEomU2b17dzkYDG75+/fvX29v7x329vZe 2dnZVREREQ4AAMyrqaktxMfHh2xtbf1cXFzsRCKRqltbW/ICgWCCRCItjI+PbywvL0NPnDhxhc/n V2lpaaEFAsE0mUy2TEpKGhcKhVsUCsUfCoViuFwurbu7ey4oKKgai8UOuLq6OkxMTDRFRkYGicVi CY/HG4yNjQ3o6emBKigo8KBQqOTXr19FYDCYK5FIjDs6OupxOBz71KlTbEdHR5anp6cCi8WiP3r0 SFhdXd21urq6ODc3J9na2lrIyMiYq6+v73BxcbFIS0vjnjt3Try2toacm5tDeXh4/Jqbm3vPZDIx jo6Oyl1dXSqWlpYz169fn923b5/Yw8PDmkwmQx8/fix6//69Qn9/P5tKpcqpqqoqent7++Tk5Kyd PXtW/vTp02ZCoZDFZrOh27ZtOxAaGnqeQCDsDQkJ+bFjxw69lJSUBTweD6+vr++am5tTKCwshCYk JIwZGxvr6OnpmbBYrGUajQYIhcJNNBrdOT4+DkOhUErNzc3dAwMDoO3bt+tYWlq6cjicCTKZrBAV FfXL0tJSwmaz1Q0NDS0tLCym2Wx2l1gsNhAKheUdHR2Lp0+fnqZQKI5v3759hsFgaObm5sNPnz6l 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 MplZWlqKzM7O5sJgsF9ycnI7XV1dIQUFBTNRUVHG7969W0Wj0a8PHjyYikAgqBAIxHl7eztjeXlZ BgAAAIVCKaJQKIPu7u6LCAQCmJmZsZCSktri8/mr1tbWMY6OjlGNjY0vAACgg8Fg1OLi4ueEhISl Fy9eeLNYrOZ79+69j42NTRQTExM4ODj8dXJy6vn48aNjdHR02ZkzZ17JyMjkZmRkVMrKyroXFxez 5+bmBl++fBklLy+vDoVC11xdXa9LSUlp5ObmhvN4PFB+fn59Xl4eDIvFUmVlZUWdnJwkg4KCjjQ2 NoYTiUTC379/e5hMJjg2Njb43r17s21tbT2amprIb9++0X7+/Gm8srJie+3atdz4+Hi3rq6uKQAA gB07dtgeO3bs1/PnzzEbGxtYaWlpbktLy5q9vb3d6urqLQKBcKa/v3+oqqpqU09PjxgeHr755MkT KJfLFbq7u68UFRWBDQ0NRwkEAsfMzOxeQUHBGygUKoyMjHRXVlbuAYPBQHt7e2hAQMApPp+v9/Hj R/KePXuUaTSawrt37wYHBwfNfv/+Tb937573gwcPislkcr2pqakHDoebiY2NJdvb2+u9evUqvLu7 u9DExMSRzWbft7a29ty9ezc/KSlp19TUVNbMzMzq8vIyR1lZ2QqHw7WVl5fT/1leteTl5bfYbLb2 wsLCqqqqqoqUlJQFDAaDPH/+/EtLSwtkYWEBTSAQKu7eveslKSmJJhAI4jweT1BZWTnk5eVlQqVS qQoKCvv7+/sTaDQalEwmi+7Zs2fnkSNHBvPz8x3n5+dHFBUVVcfHx/vl5eWxAoFgC4VCEWtqauqO Hz8ujsFgpmZnZw39/Pxy9u7dK1NcXCxZVlamTafTjZSVld/Mz8/HX7hw4SKfzwc/fvz4yOLiIkVD QyMEAADg5s2bl3x8fExVVVVZEhISWlAoVI7NZg+Pjo4OqKqq4pBIpKZAIOAzmUwwCoUSjY6OfonD 4XQSEhIu/vz5083X1/dmc3Nzm7W1Na+6uloEiUSqqKurE1AolP4/tgTAYrEW6HT6PBqNVrS3t/9Z VlZWY2xsHAv+/PmzR0lJycnz58+LS0pKLq+vrytjsVh0YmLi9O/fv83CwsJ+rKysUK2srN78+vVL rqSkJPHhw4fq8fHxnyIiInQyMzNLampq5ufm5hq/f/9elpmZ2cPlcpWlpaUvT0xMNF2/fn2TwWCA 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 t8uXL+vKy8sbPXr06M/9+/d1QkJCnlpYWByEQCBAQkLCLgwG0zh27BhteHh4+vTp00KGhoZCIBAI YWZmNhEREREnKSnJFRER8R4YGKgQEhLi3rt3b0pSUlKSx+MtYTAYYXd3d3kajda2tLTE/vDhg5ZA IJhcWVn5KScnd2b//v1LkOjo6KNjY2PDVVVVetLS0tSZmRny48ePT+jp6c1NTU2xYTDY+smTJ8P3 7dunl5+f3+rq6mooISEhOHXqFHR9fV2dTqcLSUlJocPDw6f6+/urZ2dnJa5evUqRkJDYk5aW5kZF RUU5OzvnSEhIiGZkZNzV09Nr6Ovrk09LS7OMiYmZlpGRkVRXVxdfWlrizszM7JSVlWkbGxtT2tvb dxwcHOx0dXUV7t69u5eYmKjh4eExjUKh4CwWi/z8+XNsSUnJHp/P5+bn59Pu3r3LCwkJEcnNzZ17 +/YtZ3d3F5GZmWlKoVDWYTAYcOjQoYNsNlsagUCgYDCYsYKCwmp0dPS/jx490isuLqaoqalBDA0N M86fP28ZFRX1TE5OzhCFQjlZWVllLywsCFlaWrZmZmbOX758ORSHw/XfvXtXobq6euvUqVMBAAAA cDgcx+PxJqWlpTGampoYIpG47/79+3L29va8qampqubmZrCTk5MGiUTakZSUnJGXl4c/fPjQ2tPT Ez8yMsIRFhamcDgcITAYPG1paakwODgIu3XrltWVK1fwHz58EB0dHR0MCgraBwKB5ng83vbY2Jj0 /v37laBQqHx7e/uIiIhInby8/N6VK1d8WlpaYNnZ2epTU1NYeXl5WTk5ubH+/v6poKAgx7S0tNLS 0tJTLS0tK7m5uWYQCGR0cXFx6q+//mptaWnR9fX1RW5vb7Pn5+cJrq6uszExMb4gEKg8MzPTW1VV dVNaWvrdoUOHxNFotGpoaOj0iRMnFCwsLO4zmcxJYWFhqo6OzvWxsbG0hIQEGgqF2rG2ttYfGxub k5eX10tLS+OoqqrOJyYmyuvp6U1HRESoubi4cEdGRsy5XG5/aGio2djY2Pa+ffs2sVissqGhIU5L S+tgX1/fKwkJCQlJSUk1cXFxXn19/QAcDgcdOXIErqCgIOjr60NtbW2N29nZPY6NjV0wNDScLiws 7FZVVTU3NjYWY7FYHGtr69MQCGQtKSkJIyYmhlRQUNhmsViQyclJYyQSyTx58qSZqKjo/s7OzkYj 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 dEtLy+2EhIT7YDBYCQAA4MuXL5KfP3++amdn50Amky0vXLjAd3Fx0Z2dnd1VU1Ojk5SU5KelpVWG wWBWnj9/PnHt2jUDFxcXmb///psdGxurMD8/z0Aikfz6+noKBoMx6uzsxHR3d0+ePn36kI2NjSYM BqO3tLQkdXZ2HqLT6Yy+vj4ABAIB7e3tap8/f2aurq5q2NjYWHh4eLA+f/784+3btzxXV9fPdDrd PzIycurixYvShw4dAnt4eKwIBAIeAABAVlZW2M6dO+l5eXlfhULhfGtr6w8CgQCm0+k6FAplIDQ0 1CsuLo6zvb0twGAw8P7+/go+n29w8+bNU0pKSukcDucGnU6/NTMzIyUhIeFvZWW1tW/fvm0KhdJB JBL9o6KixDdv3iR4enpKDQ0Nnbl3757ElStXpNfX1/sdHBzcu7q60ufm5iCvXr3Sraqq2kMikT4o KChIo9FoNBwOx8bExEQKBIIqUE1NzSlVVVVeYWEhMTo6WqGtra3k7du30o8fPybhcLjA+fl5DzQa bcpisXbHxsZ2ZmZmmv78+bMzPDw8QEZGZjcAAICPj8/Zf/75x3h+fr4uLy/PsaioyPfZs2e5fzTj Rr29vdOZmZk9JiYmuPfv3z8EAAD8/fv3F7du3eLOz88jCgsLZ4hEopOMjIx7YWHhtfDw8PT/9c9j Y2PHZ2Zm1Gpra2vFYrFJW1ubTnt7O1FCQgL06NGjx2Aw2JzBYAwtLy+LhoeHlaKjoy0OHTok5eXl taSrq7vA5/Ph58+f98RgMJZ/ilTGy5cv95w7d+6tvr5+r4ODg0Z3dzfdxMTETU9PT7+oqOhBSEiI 19DQ0ISZmZmrnp5e1a9fv0BQKFS8srIiCAkJwWZnZ3ebmZlZlpWVleBwOGJTU5OMm5ubg7q6OsfX 13fZwcGhZ2ZmxltOTm59c3MTjcFg6r9+/fo2IiLivL29fZu9vb3PH296n7Kycgyfz597+PDhyMWL F30gEIhJcXHx2507dwpbW1ul/Pz83MBgMDAwMPBFS0tL99evXz0oFEqorq7O0dDQOCAUCnkAAABg MBjr6Oj4paGhoY3H443B4XD52dlZVwcHh6Xx8fGN+Ph4aRQKxTl27BgJg8EIHj58OOPn58fQ19fn SkpKJn348OHx9+/fmX19fQafPn1if/r0SWVgYGA6MzNzZ39/PwUEAsGsrKxcDh06lP/3339rotFo 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 7+fPn3lGRkaM4eHhgLm5OeXQ0FAsiUTyMTY2lj537px4bGxsoLGxcXFgYIA9NzdHEQqF2JGREYml pSXJtrY2ZTc3N6yXl1fsz58/JwUCwZaMjIysWCyek5OTU15bW2tXUlJi6OrqblVWVm5oaGgw9u3b J1NQUPD9+fPnr69cuZLHZrO/0en0HhgMJrO1tbXs4ODgoaGhIREfH9/v7e1tNDAwQOZyudtBQUET kZGRhiQSSaG+vr63pqaG5efnJ2hubh40MjKyFQgEC319fR93796tAYFAjHR1dc17enpK/vvvvwQA AIB37949v3Hjxgc3Nze5b9++Sbu5ua3q6emp8vn8nywWa6u3t/cjiUTyaW1tvV9VVbXZ19eHNTc3 by0rK7M8dOgQamxsbOD06dMYS0tLMwkJCa3/Wzq3bt0adnJyMpaXlzdZX1+/KRaL5aqrq39mZ2fv olKpm729vZRr167N8fl8eRUVlZ9VVVXxQUFBG3A4nDM/P/+7qamJsrW1xYPD4ZJPnjz5b2trqz4l JcVCTU2N6ePjM0Ymk3UdHR1Zm5ubUlZWVkMHDhww4/P5M/Ly8uZUKnXMz89vIy0tTRcEAnEwGIzs 6urqxMzMjIqmpmZ3dHS0gkgkGoiOjn4aERHBnp2dNayvrydevXp1BAwGK4vFYoDNZv/68eOHioGB wUBRUdFsV1cX5/379+jy8nIFBAJBFAgEGyKRSHt1dZWmra29IisrqykhIfFHSkrKSigUzl66dOlX WFjYnrKysq8kEmmAzWYj8/PzA2AwGLGysvLXzZs3iXV1dYOJiYnOSUlJtMXFxe87duzwnJqaKgSB QGsIBEI2NzcXdeLECeuampoXTk5O58LCwtjOzs76LBYLJC0tza+tre1aW1vbrK2tRd67d4/233// 2VVWVoq9vb2fycrKKpqYmEDs7e1HOjs7qS0tLepBQUG1qamp6tbW1oC5uTlDV1eXbGJiIuvq6mpJ IBD+Nzc314HFYncTCARhR0dHq4eHBy4iIkIJgUDoQyAQIQwGmz1z5kwDhUJZkJGR2aipqdn95csX CQkJCSAhIaHjn3/+waytrS2ZmZlh8vPzcf7+/v5QKBTBZDJfnjhxotfDw8MyJCQESaVSn3h7e/tQ qdTWysrKvLKysnv+/v6aaDSap6Cg4M3hcOa+ffvWV1xcfA4CgeAjIyMlgoODBXv37nVaW1tTu3// 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 L6RfvHhB2rt3ryAyMjLg6dOnzjo6OrX19fUrTU1N7NLS0lO2trYnvb29n7S2tl6jUCjNAwMDZfn5 +XwfH5+O0NBQ9/z8fGRUVJRgampK3d/ff2llZaVrcHBQtby8HDk9PS3l5eU1eOnSJRk+nz8uIyOT CIfD0aGhoYekpaX7AABotbW1VVJUVITp6uq64nA4YP/+/VPr6+urCARC6Obm1nr16lUEkUiUb2lp MamqqvKrrq72OXPmjEZgYCAKh8Op7Nq1K66np+ePUChcNzAwABsbG4tzc3PJ7969m4+OjrbB4/Fl x48fz52bm8vH4XAN8fHx/gMDA2/V1dWNZWVltxkaGnrp6emp2drahuFwuFEpKSlET09Pi5ycHNfS 0lKdTCaL09LSank8npmLi0tJbm6upo2Njayuri4eDofTFhcXqS4uLhQOhyNhsVjQuLi4k1QqtWpj Y6OdSqWOlJeXF9y6detgRkZGZWJioguJRBp59OiRYnR0NKazsxNJpVKXOzo6ahEIhACJRA7fvn3b FwQCPdLX11fS19dfefLkyRqJRBqPioqyX19fX8nLy4M8evRI2NPTY3b69Onfi4uLK2g0micWi9Wt ra23MpnMGRQKNX/jxo0sV1dXyerqakVzc7PWlStXGnR1dSMuX76sUlJSAg8NDe1VVFRci4mJcdLT 0zPR09ObePz4sTQMBpMKCgryb2trq6PT6bbh4eHI0tLSucDAwMClpSUOHo/HKSoqNigpKXF+/vyJ NTIyKi0qKuKpqakxyWQyOCsry+Pp06fDwcHBqqA/f/5k0el06tOnT403bdrUn5KSkiwSiZY2NjZ6 USiUg7+/f761tTUFiUTK2dra0goKCkzOnj0729vbywwKCronEAgag4ODK758+XLjn70X3tLScio/ P995x44dHH19/Q8kEsnl8ePHY3w+fyMyMtISh8N5Q6FQ2ODgYB0AACA9PT1XFArlsLi4mA0Gg41C QkJKAADQHh0dRfv7+w/fvHnT9MmTJ33m5uZSxsbGBAAAAC8vL5knT560fP36VcPMzEzO09NToKWl daK8vDzH3d1d6siRI5SoqCihq6urk4qKSjGdTn8kIyNzsrOzc5OOjo7z8vLy2O3btzt0dXXlo6Oj LVtbW8MCAwPTnz592p+Xlzf+8OFDMovFOgmFQpm3b9+mEIlE8PPnz/WkpaWp+vr6DKFQCHn48KFq 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 zPbt2/coKyvbnzlz5ktISIgsISFhs4KCwlRSUlL5wMDAptraWp0rV644oNHoeXl5eY2VlZXvpqam 1hwOZ2X79u1kNBpNSEhIaLOysurG4XAkExOT1cjISERWVha9pqbGKzAwULBlyxZFKyurPVAodFlF RUXf1NRUa3l5Wezk5HRxamqqpKioaN7KysocjUZbtLa2vjY3N7/w48eP3k+fPoFAIFCvj4+PdH5+ HlNXVzfT3d2N9fT01Dx//vy++fl5dRcXF/D27dtnORzOZ3V1devu7u74uro6vJeXF/7ChQsBPB6P amlpaYpGo8V4PJ7t5eX1T25u7qy7uzteIpHMcjgc2tzcnCA8PNwhMzOzcWFhYT02NlaByWR+ZbFY S0+ePLH18vKiWFlZKXZ1dbX5+Pis2NvbK66vr8NaWlpQPT09QqlUipicnOTPzMwgIRCInK6ubiuY QCBQXF1dUXfv3u0eHR2V3bhxA3Bxcem8f//+y5s3b3Z4eHi4JCQkBDGZzOKIiIjm+Pj44bCwsBqR SARqa2t7CgAAoKqqKpTJZPMEAkGgoKAwHxsbm7K2tpZHoVAEN27cUFtZWcnKzMx0q6mpMY2Jifl7 69atLaqqqjsfPXq08f37934ulztuY2NT293dbbq4uPi7tbU1hEAgQOPi4qxhMJiZsbGx/cOHDw0M DAwEf/780QaDwTIymWybl5e318HBgT4+Pv7X1NQ078mTJz/Onz9P+/nz55ynpyd7enrazNnZmd/c 3IyYnp5GAwAAXLt2jRgcHDx84cKFsdbW1oMkEkmIRqPlnZ2dlbS0tGhKSkrEqqqqGldXVxUOhwML DAw0+/Lli2FaWtqsUChkv337lsnj8Y4NDw9XJyUliYlEIjU7O1tOTU3NkEQi6VpZWZHy8/MbyWSy bHZ2VhIbG4ujUCgmampqZjQaDXfw4EEHHo/XraysfAmHw2Xo6OhUCgSCMDKZPHXhwoW26OhoTSUl JVJ6ejqMwWC0CYXCjzo6OnVsNnvh4MGDp+vq6r6AwWCguLj4OZVKvW1lZfWPQCDgfv36Vchms+Gx sbFaPB6PQSKRlmUyGainp0dPJpNxNjY2QMrKyiHW1tamXV1drtPT0/Xl5eWdNBqt1dvb+/bNmzdn v337hnZxcUHW1NTU6+npzQEAANjb23/q6uqKKioqypubm9OIjY01SU5OLvr58+fCmTNngvLy8oZR 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 "
+ width="256"
+ height="256"
+ id="image2715-4"
+ x="0"
+ y="0" />
+ </pattern>
+ <linearGradient
+ id="linearGradient4101-0">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4103-5" />
+ <stop
+ id="stop4109-6"
+ offset="0.60000002"
+ style="stop-color:#ffffff;stop-opacity:0.80588233;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4105-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4347-2">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4349-8" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4351-61" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter4375-19"
+ x="-0.012418499"
+ width="1.024837"
+ y="-0.35608697"
+ height="1.7121739"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.0664062"
+ id="feGaussianBlur4377-5" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter4379-0"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.90031864"
+ id="feGaussianBlur4381-6" />
+ </filter>
+ <linearGradient
+ id="linearGradient4324-3">
+ <stop
+ id="stop4326-9"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.65294117;"
+ offset="0.71109551"
+ id="stop4328-6" />
+ <stop
+ id="stop4330-3"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4314-1">
+ <stop
+ id="stop4316-3"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.44705883;"
+ offset="0.59644723"
+ id="stop4318-1" />
+ <stop
+ id="stop4320-4"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <clipPath
+ id="clipPath10943"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path10945"
+ d="m 122.25371,334.00973 128.40625,0 c 3.19684,0 5.34037,2.0241 5.34375,5.0625 l 0.125,121.71875 c 0,16.5 -3.66218,25.21875 -10.46875,25.21875 l -197.25,0 c -6.60581,0.59601 -7.36487,-12.58994 -7.5,-27.21875 l -0.90625,-99.46875 c -0.01871,-2.02557 2.11566,-5.0625 5.3125,-5.0625 l 52.28125,-0.0313 c 4.16844,-0.002 7.55716,-1.94026 9.46875,-4.78125 l 7.65625,-11.34375 c 1.61572,-2.40127 4.33318,-4.09375 7.53125,-4.09375 l 0,5e-5 z"
+ style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </clipPath>
+ <filter
+ color-interpolation-filters="sRGB"
+ id="filter11355"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur11357"
+ stdDeviation="0.93036145"
+ inkscape:collect="always" />
+ </filter>
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10672"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10674"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10676"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.2953105"
+ x2="25.054077"
+ y1="71.490677"
+ x1="25.054077"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,302.86722,183.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10678"
+ xlink:href="#linearGradient4989"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="185.04865"
+ x2="306.41373"
+ y1="195"
+ x1="306.25"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10680"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10682"
+ xlink:href="#linearGradient4347-6"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10684"
+ xlink:href="#linearGradient4775"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="9.8486481"
+ x2="14.955535"
+ y1="24.753948"
+ x1="14.955535"
+ gradientTransform="matrix(5.3662019,0,0,5.0873708,24.876041,281.34659)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10740"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <radialGradient
+ r="100"
+ fy="220.49879"
+ fx="70.155602"
+ cy="220.49879"
+ cx="70.155602"
+ gradientTransform="matrix(1.9941181,0,0,0.7228514,-59.398554,163.61214)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10742"
+ xlink:href="#linearGradient4156"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="253.56741"
+ x2="107.5"
+ y1="357"
+ x1="107.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10744"
+ xlink:href="#linearGradient4172"
+ inkscape:collect="always" />
+ <radialGradient
+ r="0.875"
+ fy="82.961891"
+ fx="50.125"
+ cy="82.961891"
+ cx="50.125"
+ gradientTransform="matrix(16.00781,0,3.4745063e-5,43.857143,-752.26937,-3567.8465)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10746"
+ xlink:href="#linearGradient3423"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="-145.74695"
+ x2="-132.00006"
+ y1="25.019457"
+ x1="-132.00006"
+ gradientTransform="translate(0,210)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10748"
+ xlink:href="#linearGradient4989"
+ inkscape:collect="always" />
+ <radialGradient
+ r="108.00213"
+ fy="315.18689"
+ fx="101.69793"
+ cy="315.18689"
+ cx="101.69793"
+ gradientTransform="matrix(1.4307264,0,0,0.4212967,-49.750565,212.94722)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10750"
+ xlink:href="#linearGradient4101-0"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(1.5869209,1.2598559e-7,-5.9772551e-8,0.7528981,-86.286523,85.899531)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10752"
+ xlink:href="#linearGradient4347-2"
+ inkscape:collect="always" />
+ <radialGradient
+ r="3.4687567"
+ fy="410.125"
+ fx="44.937492"
+ cy="410.125"
+ cx="44.937492"
+ gradientTransform="matrix(39.806771,0,0,18.279245,-1744.879,-7086.6502)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10754"
+ xlink:href="#linearGradient4324-3"
+ inkscape:collect="always" />
+ <radialGradient
+ r="4.4387207"
+ fy="400"
+ fx="250.09497"
+ cy="400"
+ cx="250.09497"
+ gradientTransform="matrix(19.019218,-0.3897633,0.3394152,16.562389,-4640.2818,-6129.4776)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10756"
+ xlink:href="#linearGradient4314-1"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="262.25562"
+ x2="-103.85963"
+ y1="-46.176041"
+ x1="-103.85963"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10758"
+ xlink:href="#linearGradient11579"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(1.5869209,1.2598559e-7,-5.9772551e-8,0.7528981,-86.286523,85.899531)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10760"
+ xlink:href="#linearGradient4347-2"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="68.858025"
+ x2="173.99998"
+ y1="236"
+ x1="173.99998"
+ gradientTransform="translate(3.3064506e-8,250)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11558"
+ xlink:href="#linearGradient4989"
+ inkscape:collect="always" />
+ <radialGradient
+ r="108.00213"
+ fy="315.18689"
+ fx="101.69793"
+ cy="315.18689"
+ cx="101.69793"
+ gradientTransform="matrix(1.4307264,0,0,0.4212967,-49.750565,212.94722)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11560"
+ xlink:href="#linearGradient4101"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(1.5869209,1.2598559e-7,-5.9772551e-8,0.7528981,-86.286523,85.899531)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11562"
+ xlink:href="#linearGradient4347"
+ inkscape:collect="always" />
+ <radialGradient
+ r="21.977741"
+ fy="75.999626"
+ fx="319.97961"
+ cy="75.999626"
+ cx="319.97961"
+ gradientTransform="matrix(3.406793,-0.03144387,0.00783616,0.8264826,-770.72023,23.248659)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11564"
+ xlink:href="#linearGradient5400"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="58.425179"
+ x2="322.3212"
+ y1="88.129036"
+ x1="322.3212"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11566"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="9.8486481"
+ x2="14.955535"
+ y1="24.753948"
+ x1="14.955535"
+ gradientTransform="matrix(5.3662019,0,0,5.0873708,24.876041,281.34659)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11598"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <radialGradient
+ r="100"
+ fy="220.49879"
+ fx="70.155602"
+ cy="220.49879"
+ cx="70.155602"
+ gradientTransform="matrix(1.9941181,0,0,0.7228514,-59.398554,163.61214)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11600"
+ xlink:href="#linearGradient4156"
+ inkscape:collect="always" />
+ <radialGradient
+ r="0.875"
+ fy="82.961891"
+ fx="50.125"
+ cy="82.961891"
+ cx="50.125"
+ gradientTransform="matrix(16.00781,0,3.4745063e-5,43.857143,-752.26937,-3567.8465)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11602"
+ xlink:href="#linearGradient3423"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="52.626183"
+ x2="318"
+ y1="69.892479"
+ x1="318"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11604"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="9.8486481"
+ x2="14.955535"
+ y1="24.753948"
+ x1="14.955535"
+ gradientTransform="matrix(5.3662019,0,0,5.0873708,24.876041,281.34659)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11659"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <radialGradient
+ r="100"
+ fy="220.49879"
+ fx="70.155602"
+ cy="220.49879"
+ cx="70.155602"
+ gradientTransform="matrix(1.9941181,0,0,0.7228514,-59.398554,163.61214)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11661"
+ xlink:href="#linearGradient4156"
+ inkscape:collect="always" />
+ <radialGradient
+ r="0.875"
+ fy="82.961891"
+ fx="50.125"
+ cy="82.961891"
+ cx="50.125"
+ gradientTransform="matrix(16.00781,0,3.4745063e-5,43.857143,-752.26937,-3567.8465)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11663"
+ xlink:href="#linearGradient3423"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="131.50726"
+ x2="320.87503"
+ y1="146.76187"
+ x1="320.87503"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11665"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="68.858025"
+ x2="173.99998"
+ y1="232.98026"
+ x1="173.99998"
+ gradientTransform="translate(3.3079858e-8,250)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11667"
+ xlink:href="#linearGradient4989"
+ inkscape:collect="always" />
+ <radialGradient
+ r="108.00213"
+ fy="315.18689"
+ fx="101.69793"
+ cy="315.18689"
+ cx="101.69793"
+ gradientTransform="matrix(1.4307264,0,0,0.4212967,-49.750565,212.94722)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11669"
+ xlink:href="#linearGradient4101"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(1.5869209,1.2598559e-7,-5.9772551e-8,0.7528981,-86.286523,85.899531)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11671"
+ xlink:href="#linearGradient4347"
+ inkscape:collect="always" />
+ <radialGradient
+ r="3.4687567"
+ fy="410.125"
+ fx="44.937492"
+ cy="410.125"
+ cx="44.937492"
+ gradientTransform="matrix(39.806771,0,0,18.279245,-1743.879,-7086.6502)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11673"
+ xlink:href="#linearGradient4324"
+ inkscape:collect="always" />
+ <radialGradient
+ r="4.4387207"
+ fy="400"
+ fx="250.09497"
+ cy="400"
+ cx="250.09497"
+ gradientTransform="matrix(19.023211,0,0,16.565866,-4507.5144,-6226.3464)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11675"
+ xlink:href="#linearGradient4314"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="135.5"
+ x2="318.99954"
+ y1="154.29935"
+ x1="318.99954"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11677"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="155.21907"
+ x2="305.5"
+ y1="149.1875"
+ x1="305.5"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11679"
+ xlink:href="#linearGradient4733"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="18.848219"
+ x2="24.866016"
+ y1="30.385054"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,301.93885,218.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11723"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(0,1)"
+ y2="221.37671"
+ x2="315.28769"
+ y1="232.33687"
+ x1="315.05203"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11725"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-476.40932,129.05018)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11727"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="-9.4961929"
+ x2="25.187782"
+ y1="50.897491"
+ x1="25.187782"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,301.86722,224.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11729"
+ xlink:href="#linearGradient4989"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="223.6768"
+ x2="314.46704"
+ y1="233.24265"
+ x1="314.49048"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11731"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="208.75"
+ x2="320.5625"
+ y1="184.625"
+ x1="312.4375"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11733"
+ xlink:href="#linearGradient4629"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(1.5869209,1.2598559e-7,-5.9772551e-8,0.7528981,-86.286523,85.899531)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11735"
+ xlink:href="#linearGradient4347-6-5"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5820-1-2-5"
+ inkscape:collect="always">
+ <stop
+ id="stop5822-0-2-6"
+ offset="0"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
+ <stop
+ id="stop5824-8-1-9"
+ offset="1"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" />
+ </linearGradient>
+ <radialGradient
+ r="5"
+ fy="51"
+ fx="239"
+ cy="51"
+ cx="239"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient7892-7"
+ xlink:href="#linearGradient5820-1-2-5"
+ inkscape:collect="always" />
+ <radialGradient
+ r="68.868492"
+ fy="178.16356"
+ fx="179.52461"
+ cy="178.16356"
+ cx="179.52461"
+ gradientTransform="matrix(1.30883,0.778447,-0.343019,0.576472,-3.48119,-69.9836)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient7894-2"
+ xlink:href="#linearGradient15762-5"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient15762-5">
+ <stop
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
+ offset="0"
+ id="stop15764-4" />
+ <stop
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
+ offset="1"
+ id="stop15766-7" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter15758-4"
+ x="-0.10140261"
+ width="1.2028052"
+ y="-0.10611111"
+ height="1.2122222"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="4.6353635"
+ id="feGaussianBlur15760-4" />
+ </filter>
+ <radialGradient
+ r="5"
+ fy="51"
+ fx="239"
+ cy="51"
+ cx="239"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient12066-6"
+ xlink:href="#linearGradient5820-1-2-5"
+ inkscape:collect="always" />
+ <radialGradient
+ r="5"
+ fy="51"
+ fx="239"
+ cy="51"
+ cx="239"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient12068-3"
+ xlink:href="#linearGradient5820-1-2-5"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5820-1-2-5"
+ id="radialGradient4143"
+ gradientUnits="userSpaceOnUse"
+ cx="239"
+ cy="51"
+ fx="239"
+ fy="51"
+ r="5" />
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3391"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3393"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3395"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3401"
+ xlink:href="#linearGradient4347-6"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3429"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3431"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3433"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3439"
+ xlink:href="#linearGradient4347-6"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3467"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3469"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3471"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3477"
+ xlink:href="#linearGradient4347-6"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3503"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3505"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3507"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3513"
+ xlink:href="#linearGradient4347-6"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3539"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3541"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3543"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.2953105"
+ x2="25.054077"
+ y1="71.490677"
+ x1="25.054077"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,302.86722,183.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3545"
+ xlink:href="#linearGradient4989"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="185.04865"
+ x2="306.41373"
+ y1="195"
+ x1="306.25"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3547"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3549"
+ xlink:href="#linearGradient4347-6"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3551"
+ xlink:href="#linearGradient4775"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4989-3">
+ <stop
+ id="stop4991-49"
+ offset="0"
+ style="stop-color:#f57900;stop-opacity:1" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0.06043659"
+ id="stop4993-02" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0.17753538"
+ id="stop4995-0" />
+ <stop
+ id="stop4997-196"
+ offset="0.89421868"
+ style="stop-color:#f57900;stop-opacity:1" />
+ <stop
+ style="stop-color:#ce5c00;stop-opacity:1"
+ offset="1"
+ id="stop4999-2" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11481-2">
+ <stop
+ id="stop11483-0"
+ offset="0"
+ style="stop-color:#a04600;stop-opacity:1" />
+ <stop
+ id="stop11485-7"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(101,-160)"
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3534-3"
+ xlink:href="#linearGradient4775-1"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4775-1"
+ inkscape:collect="always">
+ <stop
+ id="stop4777-1"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4779-9"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4989-3"
+ id="linearGradient3565"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,403.86722,23.04205)"
+ x1="25.054077"
+ y1="71.490677"
+ x2="25.054077"
+ y2="3.2953105" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-2"
+ id="linearGradient3567"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(101,-160)"
+ x1="306.25"
+ y1="195"
+ x2="306.41373"
+ y2="185.04865" />
+ <linearGradient
+ y2="3.2953105"
+ x2="25.054077"
+ y1="71.490677"
+ x1="25.054077"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,379.86722,23.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3618"
+ xlink:href="#linearGradient4989-3"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="185.04865"
+ x2="306.41373"
+ y1="195"
+ x1="306.25"
+ gradientTransform="translate(77,-160)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3620"
+ xlink:href="#linearGradient11481-2"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientTransform="translate(77,-160)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3622"
+ xlink:href="#linearGradient4775-1"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.2953105"
+ x2="25.054077"
+ y1="71.490677"
+ x1="25.054077"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,355.86722,23.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3628"
+ xlink:href="#linearGradient4989-3"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="185.04865"
+ x2="306.41373"
+ y1="195"
+ x1="306.25"
+ gradientTransform="translate(53,-160)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3630"
+ xlink:href="#linearGradient11481-2"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientTransform="translate(53,-160)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3632"
+ xlink:href="#linearGradient4775-1"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.2953105"
+ x2="25.054077"
+ y1="71.490677"
+ x1="25.054077"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,331.86722,23.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3638"
+ xlink:href="#linearGradient4989-3"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="185.04865"
+ x2="306.41373"
+ y1="195"
+ x1="306.25"
+ gradientTransform="translate(29,-160)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3640"
+ xlink:href="#linearGradient11481-2"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientTransform="translate(29,-160)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3642"
+ xlink:href="#linearGradient4775-1"
+ inkscape:collect="always" />
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:menu-tooltip="Render in shades of gray by reducing saturation to zero"
+ inkscape:menu="Color"
+ height="1"
+ width="1"
+ y="0"
+ x="0"
+ inkscape:label="Desaturate"
+ id="filter3318">
+ <feColorMatrix
+ values="0"
+ type="saturate"
+ id="feColorMatrix3320" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:menu-tooltip="Render in shades of gray by reducing saturation to zero"
+ inkscape:menu="Color"
+ height="1"
+ width="1"
+ y="0"
+ x="0"
+ inkscape:label="Desaturate"
+ id="filter3322">
+ <feColorMatrix
+ values="0"
+ type="saturate"
+ id="feColorMatrix3324" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:menu-tooltip="Render in shades of gray by reducing saturation to zero"
+ inkscape:menu="Color"
+ height="1"
+ width="1"
+ y="0"
+ x="0"
+ inkscape:label="Desaturate"
+ id="filter3326">
+ <feColorMatrix
+ values="0"
+ type="saturate"
+ id="feColorMatrix3328" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:menu-tooltip="Render in shades of gray by reducing saturation to zero"
+ inkscape:menu="Color"
+ height="1"
+ width="1"
+ y="0"
+ x="0"
+ inkscape:label="Desaturate"
+ id="filter3330">
+ <feColorMatrix
+ values="0"
+ type="saturate"
+ id="feColorMatrix3332" />
+ </filter>
+ <filter
+ color-interpolation-filters="sRGB"
+ inkscape:menu-tooltip="Render in shades of gray by reducing saturation to zero"
+ inkscape:menu="Color"
+ height="1"
+ width="1"
+ y="0"
+ x="0"
+ inkscape:label="Desaturate"
+ id="filter3334">
+ <feColorMatrix
+ values="0"
+ type="saturate"
+ id="feColorMatrix3336" />
+ </filter>
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4146"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4152"
+ xlink:href="#linearGradient4347-6"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4154"
+ xlink:href="#linearGradient4775"
+ inkscape:collect="always" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective22294" />
+ <radialGradient
+ r="4.5"
+ fy="197.3125"
+ fx="1534.875"
+ cy="197.3125"
+ cx="1534.875"
+ gradientTransform="matrix(1.7936036,0,0,1.7936036,-1218.0823,-156.58791)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient22282"
+ xlink:href="#linearGradient20940"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient20940"
+ inkscape:collect="always">
+ <stop
+ id="stop20942"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ id="stop20944"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ y2="204"
+ x2="1540.5205"
+ y1="196.31589"
+ x1="1540.5205"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22284"
+ xlink:href="#linearGradient20921"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient20921"
+ inkscape:collect="always">
+ <stop
+ id="stop20923"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ id="stop20925"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(65,-250)"
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22369"
+ xlink:href="#linearGradient4775"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-410.40932,-161.94982)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient22375"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22406"
+ xlink:href="#linearGradient4908"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22408"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient22410"
+ xlink:href="#linearGradient4613"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="3.2953105"
+ x2="25.054077"
+ y1="71.490677"
+ x1="25.054077"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,302.86722,183.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22412"
+ xlink:href="#linearGradient4989"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="185.04865"
+ x2="306.41373"
+ y1="195"
+ x1="306.25"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22414"
+ xlink:href="#linearGradient11481"
+ inkscape:collect="always" />
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient22416"
+ xlink:href="#linearGradient4347-6"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22418"
+ xlink:href="#linearGradient4775"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22406-182"
+ xlink:href="#linearGradient4908-336"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4908-336">
+ <stop
+ style="stop-color:#676767;stop-opacity:1"
+ offset="0"
+ id="stop22703" />
+ <stop
+ style="stop-color:#7a7a7a;stop-opacity:1"
+ offset="1"
+ id="stop22705" />
+ </linearGradient>
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22408-560"
+ xlink:href="#linearGradient11481-613"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient11481-613">
+ <stop
+ id="stop22709"
+ offset="0"
+ style="stop-color:#505050;stop-opacity:1" />
+ <stop
+ id="stop22711"
+ offset="1"
+ style="stop-color:#676767;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient22410-573"
+ xlink:href="#linearGradient4613-299"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4613-299">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop22715" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop22717" />
+ </linearGradient>
+ <linearGradient
+ y2="3.2953105"
+ x2="25.054077"
+ y1="71.490677"
+ x1="25.054077"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,302.86722,183.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22412-699"
+ xlink:href="#linearGradient4989-872"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4989-872">
+ <stop
+ id="stop22721"
+ offset="0"
+ style="stop-color:#7a7a7a;stop-opacity:1" />
+ <stop
+ style="stop-color:#9d9d9d;stop-opacity:1"
+ offset="0.06043659"
+ id="stop22723" />
+ <stop
+ style="stop-color:#9d9d9d;stop-opacity:1"
+ offset="0.17753538"
+ id="stop22725" />
+ <stop
+ id="stop22727"
+ offset="0.89421868"
+ style="stop-color:#7a7a7a;stop-opacity:1" />
+ <stop
+ style="stop-color:#676767;stop-opacity:1"
+ offset="1"
+ id="stop22729" />
+ </linearGradient>
+ <linearGradient
+ y2="185.04865"
+ x2="306.41373"
+ y1="195"
+ x1="306.25"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22414-11"
+ xlink:href="#linearGradient11481-235"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient11481-235">
+ <stop
+ id="stop22733"
+ offset="0"
+ style="stop-color:#505050;stop-opacity:1" />
+ <stop
+ id="stop22735"
+ offset="1"
+ style="stop-color:#676767;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient22416-778"
+ xlink:href="#linearGradient4347-6-854"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4347-6-854">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop22739" />
+ <stop
+ id="stop22741"
+ offset="0.5"
+ style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop22743" />
+ </linearGradient>
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient22418-492"
+ xlink:href="#linearGradient4775-482"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4775-482"
+ inkscape:collect="always">
+ <stop
+ id="stop22747"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop22749"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient20940"
+ id="radialGradient23472"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.7936036,0,0,1.7936036,-1218.0823,-156.58791)"
+ cx="1534.875"
+ cy="197.3125"
+ fx="1534.875"
+ fy="197.3125"
+ r="4.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient20921"
+ id="linearGradient23474"
+ gradientUnits="userSpaceOnUse"
+ x1="1540.5205"
+ y1="196.31589"
+ x2="1540.5205"
+ y2="204" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4908"
+ id="linearGradient3466"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ x1="24.866016"
+ y1="31.315151"
+ x2="24.866016"
+ y2="15.928718" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481"
+ id="linearGradient3468"
+ gradientUnits="userSpaceOnUse"
+ x1="311.83029"
+ y1="193.61093"
+ x2="314.99484"
+ y2="181.80061" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient3470"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ cx="306.10458"
+ cy="179.00713"
+ fx="306.10458"
+ fy="179.00713"
+ r="8.6093779" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4989"
+ id="linearGradient3472"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,302.86722,183.04205)"
+ x1="25.054077"
+ y1="71.490677"
+ x2="25.054077"
+ y2="3.2953105" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481"
+ id="linearGradient3474"
+ gradientUnits="userSpaceOnUse"
+ x1="306.25"
+ y1="195"
+ x2="306.41373"
+ y2="185.04865" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4347-6"
+ id="radialGradient3476"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ cx="147.01562"
+ cy="525.86011"
+ fx="147.01562"
+ fy="525.86011"
+ r="103.04688" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4775"
+ id="linearGradient3478"
+ gradientUnits="userSpaceOnUse"
+ x1="311.83408"
+ y1="184.76149"
+ x2="315.69806"
+ y2="202.0594" />
+ <inkscape:perspective
+ id="perspective3500"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10048"
+ id="radialGradient10112"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4481919,1.4653496e-7,-2.6752458e-7,2.643915,-280.568,-832.47254)"
+ cx="626"
+ cy="505.22311"
+ fx="626"
+ fy="505.22311"
+ r="30.535728" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10048">
+ <stop
+ style="stop-color:#f4e3d7;stop-opacity:1;"
+ offset="0"
+ id="stop10050" />
+ <stop
+ style="stop-color:#f4e3d7;stop-opacity:0;"
+ offset="1"
+ id="stop10052" />
+ </linearGradient>
+ <linearGradient
+ y2="15.928718"
+ x2="24.866016"
+ y1="31.315151"
+ x1="24.866016"
+ gradientTransform="matrix(0.3088951,0,0,0.2737476,302.93885,177.47817)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10672-8"
+ xlink:href="#linearGradient4908-7"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4908-7">
+ <stop
+ style="stop-color:#ce5c00;stop-opacity:1"
+ offset="0"
+ id="stop4910-2" />
+ <stop
+ style="stop-color:#f57900;stop-opacity:1"
+ offset="1"
+ id="stop4912-8" />
+ </linearGradient>
+ <linearGradient
+ y2="181.80061"
+ x2="314.99484"
+ y1="193.61093"
+ x1="311.83029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10674-2"
+ xlink:href="#linearGradient11481-9"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient11481-9">
+ <stop
+ id="stop11483-9"
+ offset="0"
+ style="stop-color:#a04600;stop-opacity:1" />
+ <stop
+ id="stop11485-6"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ r="8.6093779"
+ fy="179.00713"
+ fx="306.10458"
+ cy="179.00713"
+ cx="306.10458"
+ gradientTransform="matrix(2.5489229,0,0,0.5173029,-475.40932,88.050179)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10676-0"
+ xlink:href="#linearGradient4613-2"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4613-2">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4615-7" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4617-6" />
+ </linearGradient>
+ <linearGradient
+ y2="3.2953105"
+ x2="25.054077"
+ y1="71.490677"
+ x1="25.054077"
+ gradientTransform="matrix(0.2896846,0,0,0.1769029,302.86722,183.04205)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10678-1"
+ xlink:href="#linearGradient4989-32"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4989-32">
+ <stop
+ id="stop4991-1"
+ offset="0"
+ style="stop-color:#f57900;stop-opacity:1" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0.06043659"
+ id="stop4993-5" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0.17753538"
+ id="stop4995-9" />
+ <stop
+ id="stop4997-9"
+ offset="0.89421868"
+ style="stop-color:#f57900;stop-opacity:1" />
+ <stop
+ style="stop-color:#ce5c00;stop-opacity:1"
+ offset="1"
+ id="stop4999-1" />
+ </linearGradient>
+ <linearGradient
+ y2="185.04865"
+ x2="306.41373"
+ y1="195"
+ x1="306.25"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10680-4"
+ xlink:href="#linearGradient11481-9"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3532">
+ <stop
+ id="stop3534"
+ offset="0"
+ style="stop-color:#a04600;stop-opacity:1" />
+ <stop
+ id="stop3536"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ r="103.04688"
+ fy="525.86011"
+ fx="147.01562"
+ cy="525.86011"
+ cx="147.01562"
+ gradientTransform="matrix(0.950288,0.00603037,-0.09460436,0.2867035,57.057093,330.16613)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient10682-9"
+ xlink:href="#linearGradient4347-6-1"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4347-6-1">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4349-3-0" />
+ <stop
+ id="stop16444-7"
+ offset="0.5"
+ style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4351-6-5" />
+ </linearGradient>
+ <linearGradient
+ y2="202.0594"
+ x2="315.69806"
+ y1="184.76149"
+ x1="311.83408"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient10684-0"
+ xlink:href="#linearGradient4775-4"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient4775-4"
+ inkscape:collect="always">
+ <stop
+ id="stop4777-8"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4779-0"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10116"
+ id="radialGradient10122"
+ cx="719.81262"
+ cy="503.36945"
+ fx="719.81262"
+ fy="503.36945"
+ r="4.6624851"
+ gradientTransform="matrix(1,0,0,0.3364929,0,333.9892)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10116">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop10118" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop10120" />
+ </linearGradient>
+ <radialGradient
+ r="4.6624851"
+ fy="503.36945"
+ fx="719.81262"
+ cy="503.36945"
+ cx="719.81262"
+ gradientTransform="matrix(1,0,0,0.3364929,0,333.9892)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient3560"
+ xlink:href="#linearGradient10116"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10116"
+ id="radialGradient3595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.3364929,0,333.9892)"
+ cx="719.81262"
+ cy="503.36945"
+ fx="719.81262"
+ fy="503.36945"
+ r="4.6624851" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10048"
+ id="radialGradient3597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4481919,1.4653496e-7,-2.6752458e-7,2.643915,-280.568,-832.47254)"
+ cx="626"
+ cy="505.22311"
+ fx="626"
+ fy="505.22311"
+ r="30.535728" />
+ </defs>
+ <g
+ transform="translate(0,300)"
+ style="display:inline"
+ inkscape:label="artwork:sparkleshare"
+ id="layer17"
+ inkscape:groupmode="layer">
+ <g
+ style="display:none"
+ inkscape:label="baseplate"
+ id="layer18"
+ inkscape:groupmode="layer">
+ <rect
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/process-syncing-sparkleshare-24.png"
+ y="16"
+ x="331"
+ width="120"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="24x24"
+ id="rect3589"
+ height="24" />
+ <rect
+ height="48"
+ id="rect4698"
+ inkscape:label="48x48"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ width="48"
+ x="321"
+ y="-200" />
+ <rect
+ height="32"
+ id="rect4700"
+ inkscape:label="32x32"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ width="32"
+ x="328"
+ y="-124" />
+ <rect
+ height="22"
+ id="rect4702"
+ inkscape:label="22x22"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ width="22"
+ x="328"
+ y="-73" />
+ <rect
+ height="16"
+ id="rect4704"
+ inkscape:label="16x16"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ width="16"
+ x="328"
+ y="-31" />
+ <rect
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/folder-sparkleshare-24.png"
+ height="24"
+ id="rect4706"
+ inkscape:label="24x24"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ width="24"
+ x="327"
+ y="-74" />
+ <rect
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/hicolor/256x256/places/folder-sparkleshare.png"
+ height="256"
+ id="rect4708"
+ inkscape:label="256x256"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ width="256"
+ x="45"
+ y="-222" />
+ <text
+ id="text4710"
+ inkscape:label="context"
+ style="font-size:18.30070686px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;display:inline;enable-background:new;font-family:Bitstream Vera Sans"
+ x="45.970734"
+ xml:space="preserve"
+ y="-228.48639"><tspan
+ id="tspan4712"
+ sodipodi:role="line"
+ x="45.970734"
+ y="-228.48639">places</tspan></text>
+ <text
+ id="text4714"
+ inkscape:label="icon-name"
+ sodipodi:linespacing="125%"
+ style="font-size:18.30070686px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;display:inline;enable-background:new;font-family:Droid Sans;-inkscape-font-specification:Droid Sans Bold"
+ x="166.9707"
+ xml:space="preserve"
+ y="-228.48639"><tspan
+ id="tspan4716"
+ sodipodi:role="line"
+ x="166.9707"
+ y="-228.48639">sparkleshare</tspan></text>
+ <rect
+ y="-73"
+ x="358"
+ width="22"
+ style="fill:#ededed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="22x22"
+ id="rect22378"
+ height="22" />
+ <rect
+ y="-74"
+ x="357"
+ width="24"
+ style="fill:#ededed;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="24x24"
+ id="rect22380"
+ height="24"
+ inkscape:export-filename="/home/hbons/github/sparkleshare/data/icons/sparkleshare-syncing-error-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+ <g
+ style="display:inline"
+ inkscape:label="small sizes"
+ id="layer20"
+ inkscape:groupmode="layer">
+ <image
+ y="-31"
+ x="354"
+ id="image6006"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAB1JREFU OI1jfK+p+Z+BAsBEieZRA0YNGDVgMBkAAGPfAmCG9D3bAAAAAElFTkSuQmCC "
+ height="16"
+ width="16"
+ style="opacity:0"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g5147"
+ transform="translate(51,-250)"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path5149"
+ d="m 305.53125,220.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,10.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 10.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-8.3125 -0.0312,-1.125 -5.9375,0 -2.28125,-2.03125 -3.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 z"
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 309.78125,224.5 c -0.2554,0 -0.45965,0.13987 -0.59375,0.34375 -0.43264,0.54853 -1.12354,1.65625 -1.65625,1.65625 l -4.01072,0 -0.0205,5.59375 c 0,1.33756 0.65057,2.40625 1.46875,2.40625 l 12.0625,0 c 0.81819,0 1.46875,-1.06869 1.46875,-2.40625 l 0.0509,-7.59375 z"
+ id="path5153"
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.71595326999999997;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999987999999995;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3-0);enable-background:new"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ id="path5157"
+ sodipodi:nodetypes="csccsccsccscc"
+ transform="matrix(0.06533091,0,0,0.2941173,301.14534,90.449312)"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(25,-250)"
+ id="g10370"
+ style="display:inline;enable-background:new">
+ <path
+ style="fill:url(#linearGradient11723);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient11725);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 304.53125,220.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,10.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 12.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-8.3125 c -6e-5,-0.62129 -0.50371,-1.12494 -1.125,-1.125 l -5.84375,0 c -0.3334,0 -0.20853,0.0527 -0.40625,-0.21875 l -0.96875,-1.34375 c -0.2098,-0.29211 -0.54661,-0.46632 -0.90625,-0.46875 l -4.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 l 0,0 z"
+ id="path10372"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient11727);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 304.625,221.4375 c -0.10325,0.0115 -0.15688,0.0836 -0.15625,0.1875 l 0,10.34375 c 10e-6,0.11468 0.0728,0.18749 0.1875,0.1875 l 12.71875,0 c 0.11468,-1e-5 0.18749,-0.0728 0.1875,-0.1875 l 0,-8.3125 c -10e-6,-0.11468 -0.0728,-0.18749 -0.1875,-0.1875 l -5.84375,0 c -0.0587,0 -0.0805,-0.001 -0.15625,0 -0.0757,0.001 -0.29559,0.0325 -0.5625,-0.125 -0.26691,-0.15754 -0.34468,-0.32772 -0.375,-0.375 -0.0303,-0.0473 -0.0322,-0.0522 -0.0625,-0.0937 l -0.96875,-1.34375 c -0.0355,-0.0494 -0.0954,-0.0933 -0.15625,-0.0937 l -4.59375,0 c -0.0104,1.7e-4 -0.0208,1.7e-4 -0.0313,0 l 0,0 5e-5,-1e-4 0,0 z"
+ id="path10374"
+ sodipodi:nodetypes="cccccccccsssccccccc" />
+ <path
+ sodipodi:nodetypes="cccccccccccc"
+ id="path10377"
+ d="m 309.78125,222.5 c -0.2554,0 -0.45965,0.13987 -0.59375,0.34375 -0.43264,0.54853 -1.12354,1.65625 -1.65625,1.65625 l -2.6875,0 c -0.83807,0 -1.34374,0.5428 -1.34375,1.46875 l 0,6.125 c 0,1.33756 0.65057,2.40625 1.46875,2.40625 l 12.0625,0 c 0.81819,0 1.46875,-1.06869 1.46875,-2.40625 l 0,-8.90625 c 0,-0.37505 -0.29595,-0.6875 -0.65625,-0.6875 l -8.0625,0 z"
+ style="fill:url(#linearGradient11729);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient11731);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccscccccc"
+ id="path10379"
+ d="m 310.9375,183.5 c -0.74659,0.74659 -1.60864,2 -2.40625,2 l -2.6875,0 c -0.20314,0 -0.22418,0.0344 -0.25,0.0625 -0.0258,0.0281 -0.0937,0.12531 -0.0937,0.40625 l 0,7.53125 13,0 0,-10 -7.5625,0 -5e-5,0 z"
+ style="opacity:0.40639271;fill:none;stroke:url(#linearGradient11733);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ transform="translate(-1,40)" />
+ <path
+ transform="matrix(0.06533091,0,0,0.2941173,301.14534,90.449312)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path10381"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.71595327;fill:url(#radialGradient11735);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3-0);enable-background:new" />
+ </g>
+ <g
+ id="g10383"
+ style="opacity:0.7;display:inline;enable-background:new"
+ transform="matrix(1.0414202,0,0,0.9247512,11.22481,-241.96829)">
+ <rect
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)"
+ id="rect10385"
+ width="230"
+ height="20"
+ x="15"
+ y="201"
+ rx="8.1534395"
+ ry="10"
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)" />
+ <rect
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new"
+ id="rect10387"
+ width="230"
+ height="20"
+ x="15"
+ y="201"
+ rx="8.1534395"
+ ry="10"
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)" />
+ </g>
+ <g
+ transform="translate(25,-250)"
+ id="g10389"
+ style="display:inline;enable-background:new">
+ <g
+ transform="matrix(0.2037037,0,0,0.2079395,289.85183,-11.137991)"
+ clip-path="url(#clipPath4061)"
+ id="g10391"
+ style="display:inline;enable-background:new">
+ <path
+ sodipodi:nodetypes="cccccccccsscc"
+ id="path10393"
+ style="fill:url(#linearGradient11598);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="M 52.094352,312 C 49.758741,312 48,313.27843 48,315.94967 l 0,167.46562 C 48,487.36726 50.446761,490 53.771787,490 L 243.327,490 c 3.34438,0 4.673,-2.46074 4.673,-5.90535 l 0,-147.52177 c 0,-2.95096 -2.01067,-4.54661 -4.51602,-4.54661 l -93.98741,0 c -1.69284,0 -4.43377,-0.2055 -6.49302,-2.5614 l -13.0712,-14.95423 c -1.75748,-2.01066 -4.22518,-2.51056 -6.08975,-2.51056 L 52.094352,312 z" />
+ <path
+ id="path10396"
+ d="m 122.25,348.80909 c -3.19807,0 -5.91553,1.72373 -7.53125,4.125 l -7.65625,11.34375 c -1.91159,2.84099 -5.30031,4.7797 -9.46875,4.78125 l -52.25,0 c -3.196847,0 -5.39241,3.03742 -5.34375,5.0625 l 0.40625,16.6875 214.3125,0 L 256,353.87159 c 0.10424,-3.03661 -2.14692,-5.06249 -5.34375,-5.0625 l -128.40625,0 0,0 z"
+ style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4123);enable-background:new" />
+ <path
+ sodipodi:nodetypes="ccccccccccccccccc"
+ id="path10398"
+ d="M 52.09375,313 C 49.758138,313 48,314.26626 48,316.9375 l 0,2 C 48,316.26626 49.758138,315 52.09375,315 l 70.75,0 c 1.86457,0 4.33628,0.48933 6.09375,2.5 L 142,332.46875 c 2.05925,2.3559 4.80716,2.56249 6.5,2.5625 l 94.96875,0 c 2.50535,0 4.53125,1.58029 4.53125,4.53125 l 0,-2 c 0,-2.95096 -2.0259,-4.53125 -4.53125,-4.53125 l -94.96875,0 c -1.69284,-10e-6 -4.44075,-0.2066 -6.5,-2.5625 L 128.9375,315.5 c -1.75747,-2.01067 -4.22918,-2.5 -6.09375,-2.5 l -70.75,0 0,0 0,0 z"
+ style="opacity:0.53881279;fill:url(#radialGradient11600);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new" />
+ <rect
+ style="opacity:0.45;fill:url(#radialGradient11602);fill-opacity:1;stroke:none;display:inline;filter:url(#filter3458);enable-background:new"
+ id="rect10400"
+ width="1.75"
+ height="52.75"
+ x="49.25"
+ y="57"
+ rx="0.875"
+ ry="0.875"
+ transform="matrix(0.7734591,0,0,1,10.90714,260)" />
+ </g>
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.03125"
+ inkscape:original="M 300.34375 52.5 C 299.86497 52.499999 299.5 52.753456 299.5 53.3125 L 299.5 88.375 C 299.5 89.202084 300.00587 89.75 300.6875 89.75 L 339.53125 89.75 C 340.21684 89.750004 340.5 89.252149 340.5 88.53125 L 340.5 57.40625 C 340.50001 56.788666 340.0761 56.46875 339.5625 56.46875 L 320.3125 56.46875 C 319.96548 56.468751 319.40853 56.414881 318.96875 55.9375 L 316.28125 53.03125 C 315.90591 52.62383 315.44474 52.5 315.0625 52.5 L 300.34375 52.5 z "
+ style="opacity:0.1;fill:none;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;display:inline;enable-background:new"
+ id="path10402"
+ d="m 300.53125,53.53125 0,34.84375 c 0,0.203294 0.0697,0.285216 0.0937,0.3125 0.024,0.02728 -0.002,0.03125 0.0625,0.03125 l 38.75,0 c 0.009,-0.02998 0.0312,-0.0363 0.0312,-0.1875 l 0,-31.03125 -19.15625,0 c -0.45375,10e-7 -1.38619,-0.106948 -2.09375,-0.875 l -2.6875,-2.90625 c -0.16068,-0.174415 -0.30923,-0.1875 -0.46875,-0.1875 l -14.53125,0 z"
+ transform="translate(-1.7e-5,1.000001)" />
+ <path
+ sodipodi:nodetypes="cccccccccsscc"
+ id="path10404"
+ style="fill:none;stroke:url(#linearGradient11604);stroke-width:1;display:inline;enable-background:new"
+ d="m 300.33932,53.5 c -0.4788,0 -0.83934,0.267554 -0.83934,0.826598 l 0,34.047697 c 0,0.82708 0.50158,1.378067 1.18321,1.378067 l 38.85883,0 c 0.6856,0 0.95797,-0.51499 0.95797,-1.235889 l 0,-30.09476 c 0,-0.617585 -0.41219,-0.951527 -0.92579,-0.951527 l -19.26742,0 c -0.34703,0 -0.89129,-0.05868 -1.33107,-0.536058 l -2.6796,-2.908694 c -0.37533,-0.40742 -0.86615,-0.525417 -1.24839,-0.525417 L 300.33932,53.5 z" />
+ </g>
+ <g
+ transform="matrix(0.9558116,0,0,0.96875,39.13997,-247.125)"
+ id="g10406"
+ style="display:inline;enable-background:new">
+ <g
+ transform="matrix(0.2037037,0,0,0.1948034,289.85183,-4.0923458)"
+ clip-path="none"
+ id="g10408"
+ style="display:inline;enable-background:new">
+ <path
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ sodipodi:nodetypes="czzszczzcczzc"
+ id="path10410"
+ d="m 42.874334,352.72477 52.26746,-0.0193 c 4.168441,-0.002 7.220916,-2.2103 9.481656,-4.78283 l 11.31178,-12.87182 c 1.91084,-2.17436 4.3437,-4.11535 7.54177,-4.11535 l 128.41869,0 c 3.19684,0 5.30677,2.02582 5.32808,5.06425 l 0.95575,136.27379 c 0.0219,3.12528 -2.16724,15.87165 -10.68719,15.87165 l -200.933269,0 c -3.28819,0 -8.727261,-8.8895 -8.734608,-12.01492 L 37.546254,357.78902 c -0.0048,-2.02573 2.13123,-5.06425 5.32808,-5.06425 z"
+ style="fill:url(#linearGradient11558);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible"
+ clip-path="none" />
+ <path
+ sodipodi:nodetypes="ccccccccccccccccc"
+ id="path10412"
+ d="m 123.25,335 c -3.19807,0 -5.91553,1.72373 -7.53125,4.125 l -7.65625,11.34375 c -1.91159,2.84099 -5.30031,4.7797 -9.46875,4.78125 l -53.25,0 c -3.196847,0 -5.39241,2.03742 -5.34375,4.0625 l 0.03125,1.65625 c 0.181474,-2.00765 2.290875,-3.71875 5.3125,-3.71875 l 53.25,0 c 4.16844,-0.002 7.55716,-1.94026 9.46875,-4.78125 L 115.71875,341.125 C 117.33447,338.72373 120.05193,337 123.25,337 l 127.40625,0 c 2.87974,10e-6 5.0005,1.64142 5.3125,4.1875 L 256,340.0625 c 0.10424,-3.03661 -2.14692,-5.06249 -5.34375,-5.0625 L 123.25,335 z"
+ style="fill:url(#radialGradient11560);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ transform="matrix(1,0,0,3.7326208,0,-1328.7491)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path10414"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.71984432;fill:url(#radialGradient11562);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375);enable-background:new" />
+ <g
+ transform="translate(-1.6529028e-8,10)"
+ style="display:inline;filter:url(#filter4379);enable-background:new"
+ id="g10416" />
+ </g>
+ <path
+ inkscape:href="#path9590"
+ d="m 314.625,61.5625 c -0.27285,0 -0.50707,0.158006 -0.71875,0.4375 l -1.59375,2.09375 c -0.60305,0.796162 -1.61151,1.374564 -2.8125,1.375 l -10.875,0 c -0.004,0 0.002,-0.0034 -0.0312,0.03125 -0.0333,0.03464 -0.0317,0.123018 -0.0312,-0.0625 l -0.0312,5.3125 c -0.0122,3.836667 -0.0453,9.007017 0.15625,13.1875 0.1008,2.090242 0.25866,3.940133 0.5,5.1875 0.11807,0.610227 0.26774,1.086687 0.375,1.3125 l 40.875,0 c 0.0692,-0.120363 0.17803,-0.372313 0.28125,-0.78125 0.22371,-0.886297 0.38957,-2.317828 0.5,-4.09375 0.22087,-3.551845 0.22025,-8.514723 0.21875,-13.96875 l 0,-10.03125 c -0.003,-0.0017 0.0133,0 -0.0625,0 l -26.75,0 z"
+ id="path10418"
+ style="opacity:0.82101165;fill:none;stroke:url(#radialGradient11564);stroke-width:1.03922105;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ xlink:href="#path9590"
+ inkscape:original="M 314.625 60.5 C 313.95873 60.5 313.4218 60.869352 313.0625 61.34375 L 311.46875 63.4375 C 311.04365 63.998727 310.36842 64.405935 309.5 64.40625 L 298.625 64.40625 C 297.95899 64.40625 297.501 65.024372 297.5 65.4375 L 297.46875 70.75 C 297.44435 78.41335 297.29487 91.499996 299.25 91.5 L 340.6875 91.5 C 342.51804 91.5 342.503 82.500987 342.5 71.59375 L 342.5 61.53125 C 342.49982 60.911558 342.041 60.5 341.375 60.5 L 314.625 60.5 z "
+ inkscape:radius="-1.0645162"
+ sodipodi:type="inkscape:offset" />
+ <path
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ sodipodi:nodetypes="czzszczzcczzcc"
+ id="path10420"
+ d="m 298.61018,64.417305 10.88905,-0.0039 c 0.86843,-3.14e-4 1.55025,-0.414219 1.97535,-0.975446 l 1.58957,-2.098608 C 313.42345,60.864954 313.96909,60.5 314.63536,60.5 l 26.75388,0 c 0.66601,0 1.10984,0.41315 1.11002,1.032842 l 0.003,10.065117 c 0.003,10.907239 0.0259,19.902045 -1.80464,19.902045 l -41.4476,0 c -1.95512,0 -1.79114,-13.079445 -1.76674,-20.742795 l 0.0169,-5.307065 c 10e-4,-0.41313 0.44401,-1.032839 1.11002,-1.032839 l -2e-5,0 0,0 0,0 z"
+ style="fill:none;stroke:url(#linearGradient11566);stroke-width:1.03922105;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </g>
+ <g
+ transform="translate(-425,-550)"
+ id="g11614"
+ style="display:inline;enable-background:new">
+ <g
+ transform="matrix(0.706897,0,0,0.5961355,542.31854,400.81413)"
+ style="opacity:0.7;display:inline;enable-background:new"
+ id="g10422">
+ <rect
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ ry="10"
+ rx="8.1534395"
+ y="201"
+ x="15"
+ height="20"
+ width="230"
+ id="rect10424"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)" />
+ <rect
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ ry="10"
+ rx="8.1534395"
+ y="201"
+ x="15"
+ height="20"
+ width="230"
+ id="rect10426"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g10428"
+ transform="translate(450,300)">
+ <g
+ style="display:inline;enable-background:new"
+ id="g10430"
+ clip-path="url(#clipPath6238)"
+ transform="matrix(0.1312745,0,0,0.134047,299.57123,88.831494)">
+ <path
+ d="M 52.094352,312 C 49.758741,312 48,313.27843 48,315.94967 l 0,167.46562 C 48,487.36726 50.446761,490 53.771787,490 L 243.327,490 c 3.34438,0 4.673,-2.46074 4.673,-5.90535 l 0,-153.45622 c 0,-2.95096 -2.01067,-4.54661 -4.51602,-4.54661 l -93.98741,0 c -1.69284,0 -3.90443,-0.77514 -6.49302,-2.5614 l -13.0712,-9.01978 c -2.20925,-1.52449 -4.22518,-2.51056 -6.08975,-2.51056 L 52.094352,312 z"
+ style="fill:url(#linearGradient11659);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path10432"
+ sodipodi:nodetypes="cccccccccsscc" />
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4123);enable-background:new"
+ d="m 122.25,325.64846 c -3.19807,0 -5.91553,1.72373 -7.53125,4.125 l -7.65625,5.28244 c -1.91159,2.84099 -5.30031,4.7797 -9.46875,4.78125 l -52.25,0 c -3.196847,0 -5.39241,3.03742 -5.34375,5.0625 l 0.40625,16.6875 214.3125,6.06131 L 256,330.71096 c 0.10424,-3.03661 -2.14692,-5.06249 -5.34375,-5.0625 l -128.40625,0 0,0 z"
+ id="path10434"
+ transform="translate(0,20)" />
+ <path
+ style="opacity:0.53881279;fill:url(#radialGradient11661);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ d="m 52.09375,315.09814 c -2.335612,0 -4.09375,1.26626 -4.09375,3.9375 l 0,2 c 0,-2.67124 1.758138,-3.9375 4.09375,-3.9375 l 70.75,0 c 1.86457,0 4.33628,0.48933 6.09375,2.5 L 142,329.20497 c 2.05925,2.3559 4.80716,2.56249 6.5,2.5625 l 94.96875,0 c 2.50535,0 4.53125,1.58029 4.53125,4.53125 l 0,-2 c 0,-2.95096 -2.0259,-4.53125 -4.53125,-4.53125 l -94.96875,0 c -1.69284,-10e-6 -4.44075,-0.2066 -6.5,-2.5625 l -13.0625,-9.60683 c -1.75747,-2.01067 -4.22918,-2.5 -6.09375,-2.5 l -70.75,0 0,0 0,0 z"
+ id="path10436"
+ sodipodi:nodetypes="cccccccccccccccccc" />
+ <rect
+ transform="matrix(0.7734591,0,0,1,10.90714,260)"
+ ry="0.875"
+ rx="0.875"
+ y="57"
+ x="49.25"
+ height="52.75"
+ width="1.75"
+ id="rect10438"
+ style="opacity:0.45;fill:url(#radialGradient11663);fill-opacity:1;stroke:none;display:inline;filter:url(#filter3458);enable-background:new" />
+ </g>
+ <path
+ d="m 306.5,131.5 0,22 25,0 0,-19.96875 -12.3125,0 c -0.48404,-2e-5 -0.98403,-0.19311 -1.46875,-0.5625 l -1.75,-1.34375 C 315.77961,131.48088 315.67019,131.5 315.75,131.5 l -9.25,0 z"
+ id="path10440"
+ style="opacity:0.1;fill:none;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;display:inline;enable-background:new"
+ inkscape:original="M 306.0625 130.5 C 305.74722 130.5 305.5 130.67087 305.5 131.03125 L 305.5 153.625 C 305.50001 154.15817 305.83236 154.5 306.28125 154.5 L 331.875 154.5 C 332.32648 154.49999 332.5 154.18347 332.5 153.71875 L 332.5 133.15625 C 332.49999 132.75812 332.21322 132.53125 331.875 132.53125 L 319.1875 132.53125 C 318.95896 132.53124 318.64861 132.44364 318.3125 132.1875 L 316.5625 130.84375 C 316.27564 130.62517 316.00171 130.5 315.75 130.5 L 306.0625 130.5 z "
+ inkscape:radius="-1"
+ sodipodi:type="inkscape:offset" />
+ <path
+ d="m 306.05274,130.5 c -0.31529,0 -0.55273,0.17248 -0.55273,0.53286 l 0,22.5933 c 0,0.53317 0.33031,0.88836 0.7792,0.88836 l 25.58995,0 c 0.45149,0 0.63086,-0.33199 0.63086,-0.79671 l 0,-20.57539 c 0,-0.39812 -0.27144,-0.61339 -0.60966,-0.61339 l -12.68831,0 c -0.22853,0 -0.54045,-0.0894 -0.87656,-0.34557 l -1.76462,-1.34474 c -0.28685,-0.21859 -0.57039,-0.33871 -0.8221,-0.33871 l -9.68603,-1e-5 z"
+ style="fill:none;stroke:url(#linearGradient11665);stroke-width:1;display:inline;enable-background:new"
+ id="path10442"
+ sodipodi:nodetypes="cccccccccsscc" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g10444"
+ transform="translate(450,300)">
+ <g
+ style="display:inline;enable-background:new"
+ id="g10446"
+ clip-path="none"
+ transform="matrix(0.1312745,0,0,0.1170808,299.57123,96.847539)">
+ <path
+ clip-path="none"
+ style="fill:url(#linearGradient11667);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 42.874334,349.70503 52.26746,-0.0193 c 4.168441,-0.002 6.937896,-2.56732 9.481656,-4.78283 l 11.31178,-9.85208 c 2.15005,-1.8726 4.3437,-4.11535 7.54177,-4.11535 l 128.41869,0 c 3.19684,0 5.41595,2.02713 5.32808,5.06425 l -4.25113,146.93647 c -0.0904,3.12393 -2.19213,5.20897 -5.48031,5.20897 l -200.933269,0 c -3.28819,0 -5.394204,-2.08482 -5.48031,-5.20895 L 37.546254,354.76928 c -0.05581,-2.0249 2.13123,-5.06425 5.32808,-5.06425 l 0,0 z"
+ id="path10448"
+ sodipodi:nodetypes="czzszczzcczzc"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true" />
+ <path
+ style="fill:url(#radialGradient11669);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 123.25,335 c -3.19807,0 -5.91553,1.72373 -7.53125,4.125 l -9.67618,7.94654 c -1.91159,2.84099 -5.30031,4.7797 -9.468748,4.78125 l -51.230072,0 c -3.196847,0 -5.39241,2.03742 -5.34375,4.0625 l 0.03125,1.65625 c 0.181474,-2.00765 2.290875,-3.71875 5.3125,-3.71875 l 51.230072,0 c 4.168438,-0.002 7.557158,-1.94026 9.468748,-4.78125 l 9.67618,-7.94654 C 117.33447,338.72373 120.05193,337 123.25,337 l 127.40625,0 c 2.87974,10e-6 5.0005,1.64142 5.3125,4.1875 L 256,340.0625 c 0.10424,-3.03661 -2.14692,-5.06249 -5.34375,-5.0625 L 123.25,335 z"
+ id="path10450"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+ <path
+ style="opacity:0.71595327;fill:url(#radialGradient11671);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375);enable-background:new"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ id="path10452"
+ sodipodi:nodetypes="csccsccsccscc"
+ transform="matrix(1.017001,0,0,4.3339602,-2.4994124,-1619.2922)" />
+ <g
+ id="g10454"
+ style="display:inline;filter:url(#filter4379);enable-background:new"
+ transform="translate(0,10)">
+ <path
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path10456"
+ d="m 44.34375,346.71875 c -0.813781,0 -1.501984,0.39781 -2.0625,1 -0.560516,0.60219 -0.81462,1.44302 -0.8125,1.53125 L 44.375,470.71875 c 0.0243,1.01121 0.33196,1.63225 0.78125,2.0625 0.44929,0.43025 1.131902,0.75 2.25,0.75 l 1,0 c -1.118098,0 -1.80071,-0.31975 -2.25,-0.75 -0.44929,-0.43025 -0.756951,-1.05129 -0.78125,-2.0625 L 42.46875,349.25 c -0.0021,-0.0882 0.251984,-0.92906 0.8125,-1.53125 0.560516,-0.60219 1.248719,-1 2.0625,-1 l -1,0 0,0 0,0 z"
+ style="fill:url(#radialGradient11673);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ id="path10458"
+ d="m 250.65625,326.46875 c 1.07508,0 1.78919,0.34909 2.21875,0.75 0.42956,0.40091 0.68674,0.86171 0.65625,1.75 l -4.875,141.71875 c -0.0355,1.03344 -0.3727,1.66724 -0.8125,2.09375 -0.4398,0.42651 -1.06966,0.75 -2.1875,0.75 l 1,0 c 1.11784,0 1.7477,-0.32349 2.1875,-0.75 0.4398,-0.42651 0.77703,-1.06031 0.8125,-2.09375 l 4.875,-141.71875 c 0.0305,-0.88829 -0.22669,-1.34909 -0.65625,-1.75 -0.42956,-0.40091 -1.14367,-0.75 -2.21875,-0.75 l -1,0 0,0 0,0 z"
+ style="fill:url(#radialGradient11675);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </g>
+ </g>
+ <path
+ style="fill:none;stroke:url(#linearGradient11677);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 305.21545,137.519 7.01739,-0.002 c 0.55965,-1.9e-4 0.94333,-0.30684 1.273,-0.59786 l 1.02439,-0.9043 c 0.27864,-0.24597 0.58319,-0.51443 1.01256,-0.51443 l 17.24139,0 c 0.42921,0 0.71564,0.2532 0.71535,0.63304 l -0.0123,15.88179 c -0.002,2.0258 -0.93512,2.48518 -1.37659,2.48518 l -26.48283,0 c -0.44148,0 -1.14409,-0.47913 -1.14204,-2.46362 l 0.0144,-13.88436 c 2.6e-4,-0.25321 0.28614,-0.63303 0.71534,-0.63303 l -6e-5,-4.1e-4 z"
+ id="path10460"
+ sodipodi:nodetypes="czzszczzcczzc"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1"
+ inkscape:original="M 315.53125 135.5 C 315.10188 135.5 314.80988 135.75403 314.53125 136 L 313.5 136.90625 C 313.17033 137.19727 312.77839 137.53106 312.21875 137.53125 L 305.21875 137.53125 C 304.78955 137.53125 304.50025 137.90305 304.5 138.15625 L 304.5 152.03125 C 304.49795 154.01574 305.18352 154.49999 305.625 154.5 L 332.125 154.5 C 332.56647 154.5 333.49841 154.0258 333.5 152 L 333.5 136.125 C 333.50029 135.74516 333.21046 135.5 332.78125 135.5 L 315.53125 135.5 z "
+ style="opacity:0.3;fill:none;stroke:url(#linearGradient11679);stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="path10462"
+ d="m 315.53125,136.5 c -0.0349,0 -0.0689,0.007 -0.34375,0.25 l -1.03125,0.90625 c -0.34006,0.3002 -0.98039,0.87468 -1.9375,0.875 l -6.71875,0 0,13.5 c -9.1e-4,0.87701 0.16607,1.33186 0.25,1.46875 l 26.375,0 c -0.27462,0 0.37365,0.21923 0.375,-1.5 l 0,-15.5 -16.96875,0 z" />
+ </g>
+ </g>
+ <g
+ style="opacity:0.9;display:inline;enable-background:new"
+ id="g10348"
+ transform="matrix(0.4665583,0,0,0.7923004,188.99015,-124.99549)">
+ <path
+ sodipodi:nodetypes="ccsccsc"
+ id="path10352"
+ d="m 42.556256,201 186.555464,0 C 237.91383,201 245,205.46 245,211 c 0,5.54 -7.08617,10 -15.88828,10 l -186.555464,0 c -8.80211,0 -15.888285,-4.46 -15.888285,-10 0,-5.54 7.086175,-10 15.888285,-10 l 0,0 z"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)"
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)" />
+ <path
+ sodipodi:nodetypes="ccsccsc"
+ id="path10354"
+ d="m 30.156563,201 211.354847,0 c 8.39673,0 15.15656,4.46 15.15656,10 0,5.54 -6.75983,10 -15.15656,10 L 30.156563,221 C 21.759827,221 15,216.54 15,211 c 0,-5.54 6.759827,-10 15.156563,-10 l 0,0 z"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new"
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)" />
+ </g>
+ <g
+ transform="translate(25,-250)"
+ style="display:inline;enable-background:new"
+ id="g10356">
+ <path
+ sodipodi:nodetypes="ccccccccccccccc"
+ id="path10358"
+ d="m 306.53125,179.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,13.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 14.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-11.3125 c -6e-5,-0.62129 -0.50371,-1.12494 -1.125,-1.125 l -6.84375,0 c -0.3334,0 -0.20853,0.0527 -0.40625,-0.21875 l -0.96875,-1.34375 c -0.2098,-0.29211 -0.54661,-0.46632 -0.90625,-0.46875 l -5.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 l 0,0 z"
+ style="fill:url(#linearGradient10672);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient10674);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccccccccssscccccc"
+ id="path10360"
+ d="m 306.625,180.4375 c -0.10325,0.0115 -0.15688,0.0836 -0.15625,0.1875 l 0,13.34375 c 10e-6,0.11468 0.0728,0.18749 0.1875,0.1875 l 14.71875,0 c 0.11468,-1e-5 0.18749,-0.0728 0.1875,-0.1875 l 0,-11.3125 c -10e-6,-0.11468 -0.0728,-0.18749 -0.1875,-0.1875 l -6.84375,0 c -0.0587,0 -0.0805,-0.001 -0.15625,0 -0.0757,0.001 -0.29559,0.0325 -0.5625,-0.125 -0.26691,-0.15754 -0.34468,-0.32772 -0.375,-0.375 -0.0303,-0.0473 -0.0322,-0.0522 -0.0625,-0.0937 l -0.96875,-1.34375 c -0.0355,-0.0494 -0.0954,-0.0933 -0.15625,-0.0937 l -5.59375,0 c -0.0104,1.7e-4 -0.0208,1.7e-4 -0.0313,0 l 0,0 5e-5,-1e-4 z"
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient10676);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
+ <path
+ d="m 305.84985,185.48915 4.68974,0 c 0.5327,0 1.21512,-1.08469 1.64776,-1.63322 0.1341,-0.20388 0.34688,-0.35593 0.60228,-0.35593 3.57008,0.006 7.14057,-0.0156 10.71038,0.0141 l 0,9.30895 c 0,3.20283 -1.29007,3.67699 -1.65038,3.67699 l -15.69924,0 c -0.36031,0 -1.65038,-0.40781 -1.65038,-3.67699 l 0,-7.34245 c 0,0 1.34984,0.009 1.34984,0.009 l 0,0 0,0 0,-3e-5 z"
+ id="path10363"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true"
+ sodipodi:nodetypes="cccccccccccccc"
+ style="fill:url(#linearGradient10678);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient10680);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ transform="matrix(0.08661176,0,0,0.263645,301.19179,67.063667)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path10366"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.71595327;fill:url(#radialGradient10682);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3);enable-background:new" />
+ <path
+ sodipodi:nodetypes="cssccsccccccc"
+ id="path10368"
+ d="m 312.9375,184.5 c -0.17581,0.22664 -0.44781,0.6386 -0.78125,1.03125 -0.17236,0.20297 -0.35508,0.41053 -0.59375,0.59375 -0.23867,0.18322 -0.5515,0.375 -1.03125,0.375 l -4.6875,0 c -0.20314,0 -0.22418,0.0344 -0.25,0.0625 -0.0258,0.0281 -0.0937,0.12531 -0.0937,0.40625 l 0,5.84375 c 0,3.00491 1.06986,2.68751 0.65625,2.6875 l 15.6875,0 c -0.53644,0 0.65626,0.24559 0.65625,-2.6875 l 0,-8.3125 -9.5625,0 -5e-5,0 z"
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient10684);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path5717-2"
+ d="m 336.37623,-23.985396 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,10e-6 z"
+ style="fill:none;stroke:#c66f11;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path5717"
+ d="m 336.37623,-24.985396 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,10e-6 z"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 361.96673,-24.985396 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 -0.77058,-0.02023 -1.35701,-0.05941 -2.10293,-0.02679 z"
+ id="path5179"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccc"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g5833-3"
+ style="display:inline;enable-background:new"
+ transform="translate(-1571.6885,-889.09618)">
+ <path
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 1910.9687,825.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ id="path5717-2-7"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ <path
+ style="fill:none;stroke:#fde8d0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ id="path5717-0"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ </g>
+ <g
+ id="g5833-3-4-4"
+ style="stroke:#c36e11;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ transform="matrix(2.2593567,0,0,2.2593567,-3972.3217,-2045.7357)">
+ <path
+ style="fill:none;stroke:#c36e11;stroke-width:0.88520771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 -0.1586,0.0802 -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 -0.1586,-0.0802 -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 0,0 z"
+ id="path5717-0-9-7"
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc" />
+ </g>
+ <g
+ id="g5833-3-4"
+ style="stroke:#fde2c0;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ transform="matrix(2.2593567,0,0,2.2593567,-3972.3217,-2046.7357)">
+ <path
+ style="fill:none;stroke:#fde2c0;stroke-width:0.88520771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 -0.1586,0.0802 -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 -0.1586,-0.0802 -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 0,0 z"
+ id="path5717-0-9"
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc" />
+ </g>
+ <path
+ style="fill:none;stroke:#bb660b;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 344.28928,-110.20757 c -0.2567,0.0331 -0.4832,0.23499 -0.5466,0.48632 l -1.0927,3.28267 c 0,0 -0.1467,0.0739 -0.2423,0.12249 l -3.3395,0 c -0.1867,0 -0.3689,0.0973 -0.4859,0.24315 -0.2462,0.27585 -0.1844,0.76528 0.1207,0.97266 l 2.7325,2.00616 0.058,0.2918 -1.032,3.22178 c -0.1435,0.50286 0.5294,1.00823 0.9715,0.72947 l 2.7322,-2.00598 0.3497,0 2.7325,2.00598 c 0.2376,0.15564 0.5781,0.12845 0.7891,-0.0603 0.1789,-0.16536 0.2534,-0.43555 0.1827,-0.66879 l -1.0323,-3.22178 c -0.098,-0.0194 0.038,-0.19453 0.058,-0.29178 l 2.7321,-2.00618 c 0.3061,-0.20736 0.3667,-0.6968 0.1207,-0.97264 -0.1161,-0.14585 -0.2991,-0.23713 -0.4857,-0.24316 l -3.4004,0 c 0,0 -0.153,-0.0774 -0.2422,-0.12249 l -1.0323,-3.28265 c -0.031,-0.11485 -0.095,-0.22216 -0.1826,-0.30405 -0.1283,-0.12447 -0.3079,-0.19259 -0.4857,-0.18286 l 0.021,2e-4 -9e-4,1e-5 4e-4,-3e-5 z"
+ id="path5717-0-9-4-5"
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc" />
+ <g
+ id="g5833-3-4-9"
+ style="stroke:#fde8d0;stroke-width:0.98213547;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ transform="matrix(1.5272842,0,0,1.5272842,-2574.303,-1370.1525)">
+ <path
+ style="fill:none;stroke:#fde8d0;stroke-width:0.98213547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 1910.9687,824.30299 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c 0,0 -0.096,0.0484 -0.1586,0.0802 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c 0,0 -0.1002,-0.0507 -0.1586,-0.0802 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,10e-6 0,0 z"
+ id="path5717-0-9-4"
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc" />
+ </g>
+ <g
+ transform="matrix(0.4665583,0,0,0.7923004,192.99015,-34.99549)"
+ id="g3367"
+ style="opacity:0.9;display:inline;enable-background:new">
+ <path
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)"
+ d="m 42.556256,201 186.555464,0 C 237.91383,201 245,205.46 245,211 c 0,5.54 -7.08617,10 -15.88828,10 l -186.555464,0 c -8.80211,0 -15.888285,-4.46 -15.888285,-10 0,-5.54 7.086175,-10 15.888285,-10 l 0,0 z"
+ id="path3369"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new"
+ d="m 30.156563,201 211.354847,0 c 8.39673,0 15.15656,4.46 15.15656,10 0,5.54 -6.75983,10 -15.15656,10 L 30.156563,221 C 21.759827,221 15,216.54 15,211 c 0,-5.54 6.759827,-10 15.156563,-10 l 0,0 z"
+ id="path3371"
+ sodipodi:nodetypes="ccsccsc" />
+ </g>
+ <g
+ id="g3373"
+ style="display:inline;enable-background:new"
+ transform="translate(29,-160)">
+ <path
+ style="fill:url(#linearGradient3391);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3393);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 306.53125,179.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,13.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 14.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-11.3125 c -6e-5,-0.62129 -0.50371,-1.12494 -1.125,-1.125 l -6.84375,0 c -0.3334,0 -0.20853,0.0527 -0.40625,-0.21875 l -0.96875,-1.34375 c -0.2098,-0.29211 -0.54661,-0.46632 -0.90625,-0.46875 l -5.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 l 0,0 z"
+ id="path3375"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient3395);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 306.625,180.4375 c -0.10325,0.0115 -0.15688,0.0836 -0.15625,0.1875 l 0,13.34375 c 10e-6,0.11468 0.0728,0.18749 0.1875,0.1875 l 14.71875,0 c 0.11468,-1e-5 0.18749,-0.0728 0.1875,-0.1875 l 0,-11.3125 c -10e-6,-0.11468 -0.0728,-0.18749 -0.1875,-0.1875 l -6.84375,0 c -0.0587,0 -0.0805,-0.001 -0.15625,0 -0.0757,0.001 -0.29559,0.0325 -0.5625,-0.125 -0.26691,-0.15754 -0.34468,-0.32772 -0.375,-0.375 -0.0303,-0.0473 -0.0322,-0.0522 -0.0625,-0.0937 l -0.96875,-1.34375 c -0.0355,-0.0494 -0.0954,-0.0933 -0.15625,-0.0937 l -5.59375,0 c -0.0104,1.7e-4 -0.0208,1.7e-4 -0.0313,0 l 0,0 5e-5,-1e-4 z"
+ id="path3377"
+ sodipodi:nodetypes="cccccccccssscccccc" />
+ <path
+ style="opacity:0.71595327;fill:url(#radialGradient3401);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3);enable-background:new"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ id="path3381"
+ sodipodi:nodetypes="csccsccsccscc"
+ transform="matrix(0.08661176,0,0,0.263645,301.19179,67.063667)" />
+ </g>
+ <path
+ style="fill:url(#linearGradient3638);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3640);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ sodipodi:nodetypes="cczcccccccc"
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ id="path3634"
+ d="m 339.53959,25.48915 c 0.5327,0 1.21512,-1.08469 1.64776,-1.63322 0.1341,-0.20388 0.34688,-0.35593 0.60228,-0.35593 l 10.06,0 c 0,0 0.65038,-0.0105 0.65038,-0.0105 l 0,9.33354 c 0,3.20283 -1.29007,3.67699 -1.65038,3.67699 l -15.69924,0 c -0.36031,0 -1.65038,-0.40781 -1.65038,-3.67699 l 0,-7.3086 6.03958,-0.0253 z" />
+ <g
+ transform="translate(-1567.6885,-799.09618)"
+ style="display:inline;enable-background:new"
+ id="g3385">
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3387"
+ d="m 1910.9687,825.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3389"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ style="fill:none;stroke:#fde8d0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </g>
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient3642);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 341.9375,24.5 c -0.17581,0.22664 -0.44781,0.6386 -0.78125,1.03125 -0.17236,0.20297 -0.35508,0.41053 -0.59375,0.59375 -0.23867,0.18322 -0.5515,0.375 -1.03125,0.375 l -4.6875,0 c -0.20314,0 -0.22418,0.0344 -0.25,0.0625 -0.0258,0.0281 -0.0937,0.12531 -0.0937,0.40625 l 0,5.84375 c 0,3.00491 1.06986,2.68751 0.65625,2.6875 l 15.6875,0 c -0.53644,0 0.65626,0.24559 0.65625,-2.6875 l 0,-8.3125 -9.5625,0 -5e-5,0 z"
+ id="path3636"
+ sodipodi:nodetypes="cssccsccccccc" />
+ <g
+ style="opacity:0.9;display:inline;enable-background:new"
+ id="g3405"
+ transform="matrix(0.4665583,0,0,0.7923004,216.99015,-34.99549)">
+ <path
+ sodipodi:nodetypes="ccsccsc"
+ id="path3407"
+ d="m 42.556256,201 186.555464,0 C 237.91383,201 245,205.46 245,211 c 0,5.54 -7.08617,10 -15.88828,10 l -186.555464,0 c -8.80211,0 -15.888285,-4.46 -15.888285,-10 0,-5.54 7.086175,-10 15.888285,-10 l 0,0 z"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)"
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)" />
+ <path
+ sodipodi:nodetypes="ccsccsc"
+ id="path3409"
+ d="m 30.156563,201 211.354847,0 c 8.39673,0 15.15656,4.46 15.15656,10 0,5.54 -6.75983,10 -15.15656,10 L 30.156563,221 C 21.759827,221 15,216.54 15,211 c 0,-5.54 6.759827,-10 15.156563,-10 l 0,0 z"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new"
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)" />
+ </g>
+ <g
+ transform="translate(53,-160)"
+ style="display:inline;enable-background:new"
+ id="g3411">
+ <path
+ sodipodi:nodetypes="ccccccccccccccc"
+ id="path3413"
+ d="m 306.53125,179.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,13.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 14.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-11.3125 c -6e-5,-0.62129 -0.50371,-1.12494 -1.125,-1.125 l -6.84375,0 c -0.3334,0 -0.20853,0.0527 -0.40625,-0.21875 l -0.96875,-1.34375 c -0.2098,-0.29211 -0.54661,-0.46632 -0.90625,-0.46875 l -5.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 l 0,0 z"
+ style="fill:url(#linearGradient3429);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3431);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccccccccssscccccc"
+ id="path3415"
+ d="m 306.625,180.4375 c -0.10325,0.0115 -0.15688,0.0836 -0.15625,0.1875 l 0,13.34375 c 10e-6,0.11468 0.0728,0.18749 0.1875,0.1875 l 14.71875,0 c 0.11468,-1e-5 0.18749,-0.0728 0.1875,-0.1875 l 0,-11.3125 c -10e-6,-0.11468 -0.0728,-0.18749 -0.1875,-0.1875 l -6.84375,0 c -0.0587,0 -0.0805,-0.001 -0.15625,0 -0.0757,0.001 -0.29559,0.0325 -0.5625,-0.125 -0.26691,-0.15754 -0.34468,-0.32772 -0.375,-0.375 -0.0303,-0.0473 -0.0322,-0.0522 -0.0625,-0.0937 l -0.96875,-1.34375 c -0.0355,-0.0494 -0.0954,-0.0933 -0.15625,-0.0937 l -5.59375,0 c -0.0104,1.7e-4 -0.0208,1.7e-4 -0.0313,0 l 0,0 5e-5,-1e-4 z"
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient3433);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
+ <path
+ transform="matrix(0.08661176,0,0,0.263645,301.19179,67.063667)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path3419"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.71595327;fill:url(#radialGradient3439);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3);enable-background:new" />
+ </g>
+ <path
+ d="m 363.53959,25.48915 c 0.5327,0 1.21512,-1.08469 1.64776,-1.63322 0.1341,-0.20388 0.34688,-0.35593 0.60228,-0.35593 l 10.06,0 c 0,0 0.65038,-0.0105 0.65038,-0.0105 l 0,9.33354 c 0,3.20283 -1.29007,3.67699 -1.65038,3.67699 l -15.69924,0 c -0.36031,0 -1.65038,-0.40781 -1.65038,-3.67699 l 0,-7.3086 6.03958,-0.0253 z"
+ id="path3624"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true"
+ sodipodi:nodetypes="cczcccccccc"
+ style="fill:url(#linearGradient3628);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3630);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3425"
+ d="m 368.25206,26.980758 c -0.16799,-0.02255 -0.34544,0.06673 -0.42812,0.214939 l -1.24741,1.890927 c -0.0282,0.03198 -0.051,0.06677 -0.0687,0.105557 -0.0318,-0.02828 -0.0671,-0.05091 -0.1053,-0.06911 l -2.11209,-0.565934 c -0.11804,-0.03163 -0.24976,-9.75e-4 -0.34847,0.07146 -0.20245,0.132734 -0.24637,0.452731 -0.0885,0.635596 l 1.38816,1.731845 -0.0127,0.194385 -1.19865,1.862717 c -0.17601,0.293703 0.16393,0.727363 0.49081,0.62599 l 2.06788,-0.805674 0.2212,0.05927 1.3882,1.731729 c 0.12392,0.138701 0.34383,0.179198 0.50931,0.09558 0.14114,-0.07427 0.23406,-0.232524 0.22886,-0.392024 l -0.10689,-2.212537 c -0.0585,-0.02883 0.0571,-0.116559 0.0862,-0.174705 l 2.06792,-0.8058 c 0.22871,-0.07928 0.35,-0.378542 0.24113,-0.594694 -0.0487,-0.111916 -0.14894,-0.200646 -0.26595,-0.236089 l -2.15054,-0.576235 c -0.0439,0.0014 -0.0835,-0.0013 -0.12575,0.0072 -0.002,-0.04393 0.002,-0.0839 -0.007,-0.125744 l -0.0966,-2.251039 c 1.4e-4,-0.07781 -0.0222,-0.15655 -0.064,-0.223251 -0.06,-0.100464 -0.16209,-0.173981 -0.27618,-0.197955 l 0.0135,0.0037 -5.8e-4,-1.45e-4 z"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cssccsccccccc"
+ id="path3626"
+ d="m 365.9375,24.5 c -0.17581,0.22664 -0.44781,0.6386 -0.78125,1.03125 -0.17236,0.20297 -0.35508,0.41053 -0.59375,0.59375 -0.23867,0.18322 -0.5515,0.375 -1.03125,0.375 l -4.6875,0 c -0.20314,0 -0.22418,0.0344 -0.25,0.0625 -0.0258,0.0281 -0.0937,0.12531 -0.0937,0.40625 l 0,5.84375 c 0,3.00491 1.06986,2.68751 0.65625,2.6875 l 15.6875,0 c -0.53644,0 0.65626,0.24559 0.65625,-2.6875 l 0,-8.3125 -9.5625,0 -5e-5,0 z"
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient3632);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3427"
+ d="m 368.25206,25.980758 c -0.16799,-0.02255 -0.34544,0.06673 -0.42812,0.214939 l -1.24741,1.890927 c -0.0282,0.03198 -0.051,0.06677 -0.0687,0.105557 -0.0318,-0.02828 -0.0671,-0.05091 -0.1053,-0.06911 l -2.11209,-0.565934 c -0.11804,-0.03163 -0.24976,-9.75e-4 -0.34847,0.07146 -0.20245,0.132734 -0.24637,0.452731 -0.0885,0.635596 l 1.38816,1.731845 -0.0127,0.194385 -1.19865,1.862717 c -0.17601,0.293703 0.16393,0.727363 0.49081,0.62599 l 2.06788,-0.805674 0.2212,0.05927 1.3882,1.731729 c 0.12392,0.138701 0.34383,0.179198 0.50931,0.09558 0.14114,-0.07427 0.23406,-0.232524 0.22886,-0.392024 l -0.10689,-2.212537 c -0.0585,-0.02883 0.0571,-0.116559 0.0862,-0.174705 l 2.06792,-0.8058 c 0.22871,-0.07928 0.35,-0.378542 0.24113,-0.594694 -0.0487,-0.111916 -0.14894,-0.200646 -0.26595,-0.236089 l -2.15054,-0.576235 c -0.0439,0.0014 -0.0835,-0.0013 -0.12575,0.0072 -0.002,-0.04393 0.002,-0.0839 -0.007,-0.125744 l -0.0966,-2.251039 c 1.4e-4,-0.07781 -0.0222,-0.15655 -0.064,-0.223251 -0.06,-0.100464 -0.16209,-0.173981 -0.27618,-0.197955 l 0.0135,0.0037 -5.8e-4,-1.45e-4 z"
+ style="fill:none;stroke:#fde8d0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <g
+ transform="matrix(0.4665583,0,0,0.7923004,240.99015,-34.99549)"
+ id="g3445"
+ style="opacity:0.9;display:inline;enable-background:new">
+ <path
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)"
+ d="m 42.556256,201 186.555464,0 C 237.91383,201 245,205.46 245,211 c 0,5.54 -7.08617,10 -15.88828,10 l -186.555464,0 c -8.80211,0 -15.888285,-4.46 -15.888285,-10 0,-5.54 7.086175,-10 15.888285,-10 l 0,0 z"
+ id="path3447"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new"
+ d="m 30.156563,201 211.354847,0 c 8.39673,0 15.15656,4.46 15.15656,10 0,5.54 -6.75983,10 -15.15656,10 L 30.156563,221 C 21.759827,221 15,216.54 15,211 c 0,-5.54 6.759827,-10 15.156563,-10 l 0,0 z"
+ id="path3449"
+ sodipodi:nodetypes="ccsccsc" />
+ </g>
+ <g
+ id="g3451"
+ style="display:inline;enable-background:new"
+ transform="translate(77,-160)">
+ <path
+ style="fill:url(#linearGradient3467);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3469);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 306.53125,179.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,13.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 14.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-11.3125 c -6e-5,-0.62129 -0.50371,-1.12494 -1.125,-1.125 l -6.84375,0 c -0.3334,0 -0.20853,0.0527 -0.40625,-0.21875 l -0.96875,-1.34375 c -0.2098,-0.29211 -0.54661,-0.46632 -0.90625,-0.46875 l -5.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 l 0,0 z"
+ id="path3453"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient3471);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 306.625,180.4375 c -0.10325,0.0115 -0.15688,0.0836 -0.15625,0.1875 l 0,13.34375 c 10e-6,0.11468 0.0728,0.18749 0.1875,0.1875 l 14.71875,0 c 0.11468,-1e-5 0.18749,-0.0728 0.1875,-0.1875 l 0,-11.3125 c -10e-6,-0.11468 -0.0728,-0.18749 -0.1875,-0.1875 l -6.84375,0 c -0.0587,0 -0.0805,-0.001 -0.15625,0 -0.0757,0.001 -0.29559,0.0325 -0.5625,-0.125 -0.26691,-0.15754 -0.34468,-0.32772 -0.375,-0.375 -0.0303,-0.0473 -0.0322,-0.0522 -0.0625,-0.0937 l -0.96875,-1.34375 c -0.0355,-0.0494 -0.0954,-0.0933 -0.15625,-0.0937 l -5.59375,0 c -0.0104,1.7e-4 -0.0208,1.7e-4 -0.0313,0 l 0,0 5e-5,-1e-4 z"
+ id="path3455"
+ sodipodi:nodetypes="cccccccccssscccccc" />
+ <path
+ style="opacity:0.71595327;fill:url(#radialGradient3477);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3);enable-background:new"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ id="path3459"
+ sodipodi:nodetypes="csccsccsccscc"
+ transform="matrix(0.08661176,0,0,0.263645,301.19179,67.063667)" />
+ </g>
+ <path
+ style="fill:url(#linearGradient3618);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3620);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ sodipodi:nodetypes="cczcccccccc"
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ id="path3614"
+ d="m 387.53959,25.48915 c 0.5327,0 1.21512,-1.08469 1.64776,-1.63322 0.1341,-0.20388 0.34688,-0.35593 0.60228,-0.35593 l 10.06,0 c 0,0 0.65038,-0.0105 0.65038,-0.0105 l 0,9.33354 c 0,3.20283 -1.29007,3.67699 -1.65038,3.67699 l -15.69924,0 c -0.36031,0 -1.65038,-0.40781 -1.65038,-3.67699 l 0,-7.3086 6.03958,-0.0253 z" />
+ <path
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 393.23868,27.305591 c -0.15643,-0.06526 -0.35094,-0.02495 -0.46916,0.09681 l -1.69431,1.503642 c -0.0355,0.02359 -0.0666,0.0513 -0.0937,0.08418 -0.0234,-0.03555 -0.0516,-0.06654 -0.0838,-0.09401 l -1.89364,-1.0933 c -0.10584,-0.0611 -0.241,-0.06558 -0.3551,-0.02116 -0.2299,0.07581 -0.35515,0.373539 -0.24999,0.591033 l 0.89263,2.032116 -0.0626,0.184474 -1.63991,1.489013 c -0.24603,0.238141 -0.0299,0.745007 0.31207,0.731691 l 2.20594,-0.243015 0.19832,0.114502 0.8927,2.032014 c 0.0838,0.166048 0.28573,0.262082 0.46721,0.224142 0.15556,-0.03521 0.28627,-0.164021 0.32253,-0.319432 l 0.4694,-2.164812 c -0.049,-0.04299 0.0853,-0.09781 0.12848,-0.146442 l 2.20601,-0.243126 c 0.24144,-0.01738 0.43605,-0.275057 0.38683,-0.512021 -0.0181,-0.120707 -0.0919,-0.232358 -0.19578,-0.296878 l -1.92812,-1.113201 c -0.0428,-0.01001 -0.0803,-0.02287 -0.12333,-0.02559 0.009,-0.04295 0.0236,-0.08052 0.0258,-0.123272 l 0.48931,-2.199338 c 0.0203,-0.07512 0.0191,-0.156962 -0.004,-0.232209 -0.032,-0.112569 -0.11154,-0.210004 -0.21554,-0.26269 l 0.0121,0.0071 -5.3e-4,-2.9e-4 z"
+ id="path3463"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient3622);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 389.9375,24.5 c -0.17581,0.22664 -0.44781,0.6386 -0.78125,1.03125 -0.17236,0.20297 -0.35508,0.41053 -0.59375,0.59375 -0.23867,0.18322 -0.5515,0.375 -1.03125,0.375 l -4.6875,0 c -0.20314,0 -0.22418,0.0344 -0.25,0.0625 -0.0258,0.0281 -0.0937,0.12531 -0.0937,0.40625 l 0,5.84375 c 0,3.00491 1.06986,2.68751 0.65625,2.6875 l 15.6875,0 c -0.53644,0 0.65626,0.24559 0.65625,-2.6875 l 0,-8.3125 -9.5625,0 -5e-5,0 z"
+ id="path3616"
+ sodipodi:nodetypes="cssccsccccccc" />
+ <path
+ style="fill:none;stroke:#fde8d0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 393.23868,26.305591 c -0.15643,-0.06526 -0.35094,-0.02495 -0.46916,0.09681 l -1.69431,1.503642 c -0.0355,0.02359 -0.0666,0.0513 -0.0937,0.08418 -0.0234,-0.03555 -0.0516,-0.06654 -0.0838,-0.09401 l -1.89364,-1.0933 c -0.10584,-0.0611 -0.241,-0.06558 -0.3551,-0.02116 -0.2299,0.07581 -0.35515,0.373539 -0.24999,0.591033 l 0.89263,2.032116 -0.0626,0.184474 -1.63991,1.489013 c -0.24603,0.238141 -0.0299,0.745007 0.31207,0.731691 l 2.20594,-0.243015 0.19832,0.114502 0.8927,2.032014 c 0.0838,0.166048 0.28573,0.262082 0.46721,0.224142 0.15556,-0.03521 0.28627,-0.164021 0.32253,-0.319432 l 0.4694,-2.164812 c -0.049,-0.04299 0.0853,-0.09781 0.12848,-0.146442 l 2.20601,-0.243126 c 0.24144,-0.01738 0.43605,-0.275057 0.38683,-0.512021 -0.0181,-0.120707 -0.0919,-0.232358 -0.19578,-0.296878 l -1.92812,-1.113201 c -0.0428,-0.01001 -0.0803,-0.02287 -0.12333,-0.02559 0.009,-0.04295 0.0236,-0.08052 0.0258,-0.123272 l 0.48931,-2.199338 c 0.0203,-0.07512 0.0191,-0.156962 -0.004,-0.232209 -0.032,-0.112569 -0.11154,-0.210004 -0.21554,-0.26269 l 0.0121,0.0071 -5.3e-4,-2.9e-4 z"
+ id="path3465"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ <g
+ style="opacity:0.9;display:inline;enable-background:new"
+ id="g3481"
+ transform="matrix(0.4665583,0,0,0.7923004,264.99015,-34.99549)">
+ <path
+ sodipodi:nodetypes="ccsccsc"
+ id="path3483"
+ d="m 42.556256,201 186.555464,0 C 237.91383,201 245,205.46 245,211 c 0,5.54 -7.08617,10 -15.88828,10 l -186.555464,0 c -8.80211,0 -15.888285,-4.46 -15.888285,-10 0,-5.54 7.086175,-10 15.888285,-10 l 0,0 z"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)"
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)" />
+ <path
+ sodipodi:nodetypes="ccsccsc"
+ id="path3485"
+ d="m 30.156563,201 211.354847,0 c 8.39673,0 15.15656,4.46 15.15656,10 0,5.54 -6.75983,10 -15.15656,10 L 30.156563,221 C 21.759827,221 15,216.54 15,211 c 0,-5.54 6.759827,-10 15.156563,-10 l 0,0 z"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new"
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)" />
+ </g>
+ <g
+ transform="translate(101,-160)"
+ style="display:inline;enable-background:new"
+ id="g3487">
+ <path
+ sodipodi:nodetypes="ccccccccccccccc"
+ id="path3489"
+ d="m 306.53125,179.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,13.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 14.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-11.3125 c -6e-5,-0.62129 -0.50371,-1.12494 -1.125,-1.125 l -6.84375,0 c -0.3334,0 -0.20853,0.0527 -0.40625,-0.21875 l -0.96875,-1.34375 c -0.2098,-0.29211 -0.54661,-0.46632 -0.90625,-0.46875 l -5.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 l 0,0 z"
+ style="fill:url(#linearGradient3503);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3505);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccccccccssscccccc"
+ id="path3491"
+ d="m 306.625,180.4375 c -0.10325,0.0115 -0.15688,0.0836 -0.15625,0.1875 l 0,13.34375 c 10e-6,0.11468 0.0728,0.18749 0.1875,0.1875 l 14.71875,0 c 0.11468,-1e-5 0.18749,-0.0728 0.1875,-0.1875 l 0,-11.3125 c -10e-6,-0.11468 -0.0728,-0.18749 -0.1875,-0.1875 l -6.84375,0 c -0.0587,0 -0.0805,-0.001 -0.15625,0 -0.0757,0.001 -0.29559,0.0325 -0.5625,-0.125 -0.26691,-0.15754 -0.34468,-0.32772 -0.375,-0.375 -0.0303,-0.0473 -0.0322,-0.0522 -0.0625,-0.0937 l -0.96875,-1.34375 c -0.0355,-0.0494 -0.0954,-0.0933 -0.15625,-0.0937 l -5.59375,0 c -0.0104,1.7e-4 -0.0208,1.7e-4 -0.0313,0 l 0,0 5e-5,-1e-4 z"
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient3507);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
+ <path
+ transform="matrix(0.08661176,0,0,0.263645,301.19179,67.063667)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path3495"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.71595327;fill:url(#radialGradient3513);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3);enable-background:new" />
+ </g>
+ <path
+ d="m 411.53959,25.48915 c 0.5327,0 1.21512,-1.08469 1.64776,-1.63322 0.1341,-0.20388 0.34688,-0.35593 0.60228,-0.35593 l 10.06,0 c 0,0 0.65038,-0.0105 0.65038,-0.0105 l 0,9.33354 c 0,3.20283 -1.29007,3.67699 -1.65038,3.67699 l -15.69924,0 c -0.36031,0 -1.65038,-0.40781 -1.65038,-3.67699 l 0,-7.3086 6.03958,-0.0253 z"
+ id="path3526"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true"
+ sodipodi:nodetypes="cczcccccccc"
+ style="fill:url(#linearGradient3565);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3567);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3499"
+ d="m 418.15853,27.927989 c -0.13421,-0.103523 -0.33252,-0.11493 -0.47823,-0.02792 l -2.02575,1.013887 c -0.0404,0.0136 -0.0776,0.03231 -0.11229,0.05706 -0.0134,-0.0404 -0.0326,-0.07763 -0.0566,-0.112496 l -1.54615,-1.546157 c -0.0864,-0.08641 -0.21582,-0.12572 -0.33753,-0.112345 -0.24168,0.01372 -0.43972,0.268891 -0.39444,0.506192 l 0.33627,2.193903 -0.10822,0.161986 -1.96941,1.013836 c -0.29929,0.166349 -0.22171,0.711883 0.11206,0.787529 l 2.19367,0.336205 0.16193,0.161929 0.33635,2.193823 c 0.038,0.182079 0.20817,0.327104 0.39328,0.337427 0.15937,0.0063 0.31897,-0.08434 0.39422,-0.225071 l 1.0137,-1.969558 c -0.0362,-0.05421 0.10771,-0.0724 0.162,-0.108199 l 2.19377,0.336116 c 0.23771,0.0457 0.49238,-0.152827 0.50617,-0.394456 0.0138,-0.121278 -0.0286,-0.248226 -0.11227,-0.337433 l -1.57431,-1.574304 c -0.0388,-0.02075 -0.0716,-0.04287 -0.1125,-0.05664 0.0198,-0.03916 0.0436,-0.07167 0.0568,-0.112394 l 1.04186,-1.997755 c 0.039,-0.06731 0.0591,-0.14667 0.0562,-0.225332 -0.002,-0.117015 -0.0534,-0.231717 -0.14021,-0.309525 l 0.01,0.01 -4.3e-4,-4.17e-4 z"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cssccsccccccc"
+ id="path3528"
+ d="m 413.9375,24.5 c -0.17581,0.22664 -0.44781,0.6386 -0.78125,1.03125 -0.17236,0.20297 -0.35508,0.41053 -0.59375,0.59375 -0.23867,0.18322 -0.5515,0.375 -1.03125,0.375 l -4.6875,0 c -0.20314,0 -0.22418,0.0344 -0.25,0.0625 -0.0258,0.0281 -0.0937,0.12531 -0.0937,0.40625 l 0,5.84375 c 0,3.00491 1.06986,2.68751 0.65625,2.6875 l 15.6875,0 c -0.53644,0 0.65626,0.24559 0.65625,-2.6875 l 0,-8.3125 -9.5625,0 -5e-5,0 z"
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient3534-3);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3501"
+ d="m 418.15853,26.927989 c -0.13421,-0.103523 -0.33252,-0.11493 -0.47823,-0.02792 l -2.02575,1.013887 c -0.0404,0.0136 -0.0776,0.03231 -0.11229,0.05706 -0.0134,-0.0404 -0.0326,-0.07763 -0.0566,-0.112496 l -1.54615,-1.546157 c -0.0864,-0.08641 -0.21582,-0.12572 -0.33753,-0.112345 -0.24168,0.01372 -0.43972,0.268891 -0.39444,0.506192 l 0.33627,2.193903 -0.10822,0.161986 -1.96941,1.013836 c -0.29929,0.166349 -0.22171,0.711883 0.11206,0.787529 l 2.19367,0.336205 0.16193,0.161929 0.33635,2.193823 c 0.038,0.182079 0.20817,0.327104 0.39328,0.337427 0.15937,0.0063 0.31897,-0.08434 0.39422,-0.225071 l 1.0137,-1.969558 c -0.0362,-0.05421 0.10771,-0.0724 0.162,-0.108199 l 2.19377,0.336116 c 0.23771,0.0457 0.49238,-0.152827 0.50617,-0.394456 0.0138,-0.121278 -0.0286,-0.248226 -0.11227,-0.337433 l -1.57431,-1.574304 c -0.0388,-0.02075 -0.0716,-0.04287 -0.1125,-0.05664 0.0198,-0.03916 0.0436,-0.07167 0.0568,-0.112394 l 1.04186,-1.997755 c 0.039,-0.06731 0.0591,-0.14667 0.0562,-0.225332 -0.002,-0.117015 -0.0534,-0.231717 -0.14021,-0.309525 l 0.01,0.01 -4.3e-4,-4.17e-4 z"
+ style="fill:none;stroke:#fde8d0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <g
+ transform="matrix(0.4665583,0,0,0.7923004,288.99015,-34.99549)"
+ id="g3517"
+ style="opacity:0.9;display:inline;enable-background:new">
+ <path
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)"
+ d="m 42.556256,201 186.555464,0 C 237.91383,201 245,205.46 245,211 c 0,5.54 -7.08617,10 -15.88828,10 l -186.555464,0 c -8.80211,0 -15.888285,-4.46 -15.888285,-10 0,-5.54 7.086175,-10 15.888285,-10 l 0,0 z"
+ id="path3519"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new"
+ d="m 30.156563,201 211.354847,0 c 8.39673,0 15.15656,4.46 15.15656,10 0,5.54 -6.75983,10 -15.15656,10 L 30.156563,221 C 21.759827,221 15,216.54 15,211 c 0,-5.54 6.759827,-10 15.156563,-10 l 0,0 z"
+ id="path3521"
+ sodipodi:nodetypes="ccsccsc" />
+ </g>
+ <g
+ id="g3523"
+ style="display:inline;enable-background:new"
+ transform="translate(125,-160)">
+ <path
+ style="fill:url(#linearGradient3539);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3541);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 306.53125,179.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,13.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 14.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-11.3125 c -6e-5,-0.62129 -0.50371,-1.12494 -1.125,-1.125 l -6.84375,0 c -0.3334,0 -0.20853,0.0527 -0.40625,-0.21875 l -0.96875,-1.34375 c -0.2098,-0.29211 -0.54661,-0.46632 -0.90625,-0.46875 l -5.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 l 0,0 z"
+ id="path3525"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient3543);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 306.625,180.4375 c -0.10325,0.0115 -0.15688,0.0836 -0.15625,0.1875 l 0,13.34375 c 10e-6,0.11468 0.0728,0.18749 0.1875,0.1875 l 14.71875,0 c 0.11468,-1e-5 0.18749,-0.0728 0.1875,-0.1875 l 0,-11.3125 c -10e-6,-0.11468 -0.0728,-0.18749 -0.1875,-0.1875 l -6.84375,0 c -0.0587,0 -0.0805,-0.001 -0.15625,0 -0.0757,0.001 -0.29559,0.0325 -0.5625,-0.125 -0.26691,-0.15754 -0.34468,-0.32772 -0.375,-0.375 -0.0303,-0.0473 -0.0322,-0.0522 -0.0625,-0.0937 l -0.96875,-1.34375 c -0.0355,-0.0494 -0.0954,-0.0933 -0.15625,-0.0937 l -5.59375,0 c -0.0104,1.7e-4 -0.0208,1.7e-4 -0.0313,0 l 0,0 5e-5,-1e-4 z"
+ id="path3527"
+ sodipodi:nodetypes="cccccccccssscccccc" />
+ <path
+ style="fill:url(#linearGradient3545);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3547);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ sodipodi:nodetypes="cczcccccccc"
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ id="path3529"
+ d="m 310.53959,185.48915 c 0.5327,0 1.21512,-1.08469 1.64776,-1.63322 0.1341,-0.20388 0.34688,-0.35593 0.60228,-0.35593 l 10.06,0 c 0,0 0.65038,-0.0105 0.65038,-0.0105 l 0,9.33354 c 0,3.20283 -1.29007,3.67699 -1.65038,3.67699 l -15.69924,0 c -0.36031,0 -1.65038,-0.40781 -1.65038,-3.67699 l 0,-7.3086 6.03958,-0.0253 z" />
+ <path
+ style="opacity:0.71595327;fill:url(#radialGradient3549);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3);enable-background:new"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ id="path3531"
+ sodipodi:nodetypes="csccsccsccscc"
+ transform="matrix(0.08661176,0,0,0.263645,301.19179,67.063667)" />
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient3551);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 312.9375,184.5 c -0.17581,0.22664 -0.44781,0.6386 -0.78125,1.03125 -0.17236,0.20297 -0.35508,0.41053 -0.59375,0.59375 -0.23867,0.18322 -0.5515,0.375 -1.03125,0.375 l -4.6875,0 c -0.20314,0 -0.22418,0.0344 -0.25,0.0625 -0.0258,0.0281 -0.0937,0.12531 -0.0937,0.40625 l 0,5.84375 c 0,3.00491 1.06986,2.68751 0.65625,2.6875 l 15.6875,0 c -0.53644,0 0.65626,0.24559 0.65625,-2.6875 l 0,-8.3125 -9.5625,0 -5e-5,0 z"
+ id="path3533"
+ sodipodi:nodetypes="cssccsccccccc" />
+ </g>
+ <path
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 442.8614,28.823817 c -0.10285,-0.134731 -0.29145,-0.197076 -0.45471,-0.150743 l -2.21914,0.455037 c -0.0425,0.0027 -0.0833,0.01112 -0.12323,0.02605 -0.002,-0.04249 -0.0114,-0.08342 -0.0256,-0.123312 l -1.09329,-1.893646 c -0.0611,-0.105828 -0.17592,-0.177295 -0.29695,-0.195877 -0.23699,-0.0493 -0.49433,0.145921 -0.51201,0.386856 l -0.24301,2.20618 -0.14646,0.128457 -2.1647,0.46957 c -0.33215,0.08322 -0.39841,0.630243 -0.0956,0.789698 l 2.03191,0.892513 0.1145,0.198322 -0.24292,2.206124 c -0.0104,0.18571 0.11642,0.369836 0.29255,0.427717 0.15231,0.04733 0.32993,0.0011 0.43904,-0.11537 l 1.48892,-1.640082 c -0.0209,-0.06173 0.12278,-0.04206 0.18448,-0.06258 l 2.03203,0.892452 c 0.21778,0.105667 0.51516,-0.02018 0.59101,-0.250009 0.0447,-0.113574 0.0366,-0.24717 -0.0211,-0.354993 l -1.1132,-1.928122 c -0.0321,-0.03008 -0.0581,-0.05994 -0.094,-0.08383 0.0293,-0.0327 0.0607,-0.05794 0.084,-0.09386 l 1.52342,-1.66003 c 0.0551,-0.05492 0.0951,-0.126376 0.11261,-0.203109 0.0283,-0.113545 0.008,-0.237642 -0.0553,-0.335267 l 0.007,0.01225 -3.1e-4,-5.15e-4 z"
+ id="path3535"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ <path
+ style="fill:none;stroke:#fde8d0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 442.8614,27.823817 c -0.10285,-0.134731 -0.29145,-0.197076 -0.45471,-0.150743 l -2.21914,0.455037 c -0.0425,0.0027 -0.0833,0.01112 -0.12323,0.02605 -0.002,-0.04249 -0.0114,-0.08342 -0.0256,-0.123312 l -1.09329,-1.893646 c -0.0611,-0.105828 -0.17592,-0.177295 -0.29695,-0.195877 -0.23699,-0.0493 -0.49433,0.145921 -0.51201,0.386856 l -0.24301,2.20618 -0.14646,0.128457 -2.1647,0.46957 c -0.33215,0.08322 -0.39841,0.630243 -0.0956,0.789698 l 2.03191,0.892513 0.1145,0.198322 -0.24292,2.206124 c -0.0104,0.18571 0.11642,0.369836 0.29255,0.427717 0.15231,0.04733 0.32993,0.0011 0.43904,-0.11537 l 1.48892,-1.640082 c -0.0209,-0.06173 0.12278,-0.04206 0.18448,-0.06258 l 2.03203,0.892452 c 0.21778,0.105667 0.51516,-0.02018 0.59101,-0.250009 0.0447,-0.113574 0.0366,-0.24717 -0.0211,-0.354993 l -1.1132,-1.928122 c -0.0321,-0.03008 -0.0581,-0.05994 -0.094,-0.08383 0.0293,-0.0327 0.0607,-0.05794 0.084,-0.09386 l 1.52342,-1.66003 c 0.0551,-0.05492 0.0951,-0.126376 0.11261,-0.203109 0.0283,-0.113545 0.008,-0.237642 -0.0553,-0.335267 l 0.007,0.01225 -3.1e-4,-5.15e-4 z"
+ id="path3537"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ <g
+ transform="translate(-1509.9039,-883.6156)"
+ id="g5833-1"
+ style="display:inline;enable-background:new" />
+ <g
+ id="g3286"
+ style="display:inline;filter:url(#filter3330);enable-background:new"
+ transform="translate(65,-250)" />
+ <g
+ transform="matrix(0.4665583,0,0,0.7923004,218.99015,-124.99549)"
+ id="g3441"
+ style="opacity:0.9;display:inline;enable-background:new">
+ <path
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4496)"
+ d="m 42.556256,201 186.555464,0 C 237.91383,201 245,205.46 245,211 c 0,5.54 -7.08617,10 -15.88828,10 l -186.555464,0 c -8.80211,0 -15.888285,-4.46 -15.888285,-10 0,-5.54 7.086175,-10 15.888285,-10 l 0,0 z"
+ id="path3443"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ transform="matrix(0.1836956,0,0,0.157768,296.61958,56.633265)"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4508);enable-background:new"
+ d="m 30.156563,201 211.354847,0 c 8.39673,0 15.15656,4.46 15.15656,10 0,5.54 -6.75983,10 -15.15656,10 L 30.156563,221 C 21.759827,221 15,216.54 15,211 c 0,-5.54 6.759827,-10 15.156563,-10 l 0,0 z"
+ id="path3445"
+ sodipodi:nodetypes="ccsccsc" />
+ </g>
+ <g
+ id="g3447"
+ style="display:inline;enable-background:new"
+ transform="translate(55,-250)">
+ <path
+ style="fill:url(#linearGradient3466);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3468);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 306.53125,179.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,13.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 14.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-11.3125 c -6e-5,-0.62129 -0.50371,-1.12494 -1.125,-1.125 l -6.84375,0 c -0.3334,0 -0.20853,0.0527 -0.40625,-0.21875 l -0.96875,-1.34375 c -0.2098,-0.29211 -0.54661,-0.46632 -0.90625,-0.46875 l -5.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 l 0,0 z"
+ id="path3450"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient3470);stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 306.625,180.4375 c -0.10325,0.0115 -0.15688,0.0836 -0.15625,0.1875 l 0,13.34375 c 10e-6,0.11468 0.0728,0.18749 0.1875,0.1875 l 14.71875,0 c 0.11468,-1e-5 0.18749,-0.0728 0.1875,-0.1875 l 0,-11.3125 c -10e-6,-0.11468 -0.0728,-0.18749 -0.1875,-0.1875 l -6.84375,0 c -0.0587,0 -0.0805,-0.001 -0.15625,0 -0.0757,0.001 -0.29559,0.0325 -0.5625,-0.125 -0.26691,-0.15754 -0.34468,-0.32772 -0.375,-0.375 -0.0303,-0.0473 -0.0322,-0.0522 -0.0625,-0.0937 l -0.96875,-1.34375 c -0.0355,-0.0494 -0.0954,-0.0933 -0.15625,-0.0937 l -5.59375,0 c -0.0104,1.7e-4 -0.0208,1.7e-4 -0.0313,0 l 0,0 5e-5,-1e-4 z"
+ id="path3452"
+ sodipodi:nodetypes="cccccccccssscccccc" />
+ <path
+ style="fill:url(#linearGradient3472);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3474);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ sodipodi:nodetypes="cccccccccccccc"
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ id="path3454"
+ d="m 305.84985,185.48915 4.68974,0 c 0.5327,0 1.21512,-1.08469 1.64776,-1.63322 0.1341,-0.20388 0.34688,-0.35593 0.60228,-0.35593 3.57008,0.006 7.14057,-0.0156 10.71038,0.0141 l 0,9.30895 c 0,3.20283 -1.29007,3.67699 -1.65038,3.67699 l -15.69924,0 c -0.36031,0 -1.65038,-0.40781 -1.65038,-3.67699 l 0,-7.34245 c 0,0 1.34984,0.009 1.34984,0.009 l 0,0 0,0 0,-3e-5 z" />
+ <path
+ style="opacity:0.71595327;fill:url(#radialGradient3476);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3);enable-background:new"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ id="path3456"
+ sodipodi:nodetypes="csccsccsccscc"
+ transform="matrix(0.08661176,0,0,0.263645,301.19179,67.063667)" />
+ <path
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient3478);stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 312.9375,184.5 c -0.17581,0.22664 -0.44781,0.6386 -0.78125,1.03125 -0.17236,0.20297 -0.35508,0.41053 -0.59375,0.59375 -0.23867,0.18322 -0.5515,0.375 -1.03125,0.375 l -4.6875,0 c -0.20314,0 -0.22418,0.0344 -0.25,0.0625 -0.0258,0.0281 -0.0937,0.12531 -0.0937,0.40625 l 0,5.84375 c 0,3.00491 1.06986,2.68751 0.65625,2.6875 l 15.6875,0 c -0.53644,0 0.65626,0.24559 0.65625,-2.6875 l 0,-8.3125 -9.5625,0 -5e-5,0 z"
+ id="path3458"
+ sodipodi:nodetypes="cssccsccccccc" />
+ </g>
+ <g
+ transform="translate(-1541.6885,-889.09618)"
+ style="display:inline;enable-background:new"
+ id="g3460">
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3462"
+ d="m 1910.9687,825.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3464"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ style="fill:none;stroke:#fde8d0;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g5159"
+ transform="translate(-1548.6884,-835.09618)" />
+ <image
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle1.png"
+ style="opacity:0"
+ width="16"
+ height="16"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAB1JREFU OI1jfK+p+Z+BAsBEieZRA0YNGDVgMBkAAGPfAmCG9D3bAAAAAElFTkSuQmCC "
+ id="image6043"
+ x="374"
+ y="-31" />
+ <g
+ transform="translate(71,-250)"
+ id="g6045"
+ style="display:inline;enable-background:new"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle1.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 305.53125,220.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,10.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 10.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-8.3125 -0.0312,-1.125 -5.9375,0 -2.28125,-2.03125 -3.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 z"
+ id="path6047"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc"
+ id="path6049"
+ d="m 309.78125,224.5 c -0.2554,0 -0.45965,0.13987 -0.59375,0.34375 -0.43264,0.54853 -1.12354,1.65625 -1.65625,1.65625 l -4.01072,0 -0.0205,5.59375 c 0,1.33756 0.65057,2.40625 1.46875,2.40625 l 12.0625,0 c 0.81819,0 1.46875,-1.06869 1.46875,-2.40625 l 0.0509,-7.59375 z"
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.06533091,0,0,0.2941173,301.14534,90.449312)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path6051"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.71595327;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3-0);enable-background:new" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path6053"
+ d="m 382.93859,-24.866208 c -0.16799,-0.02255 -0.34544,0.06673 -0.42812,0.214939 l -1.24741,1.890927 c -0.0282,0.03198 -0.051,0.06677 -0.0687,0.105557 -0.0318,-0.02829 -0.0671,-0.05091 -0.1053,-0.06911 l -2.11209,-0.565934 c -0.11804,-0.03163 -0.24976,-9.75e-4 -0.34847,0.07146 -0.20245,0.132734 -0.24637,0.452731 -0.0885,0.635596 l 1.38816,1.731845 -0.0127,0.194385 -1.19865,1.862717 c -0.17601,0.293703 0.16393,0.727363 0.49081,0.62599 l 2.06788,-0.805674 0.2212,0.05927 1.3882,1.731729 c 0.12392,0.138701 0.34383,0.179198 0.50931,0.09558 0.14114,-0.07427 0.23406,-0.232524 0.22886,-0.392024 l -0.10689,-2.212537 c -0.0585,-0.02883 0.0571,-0.116559 0.0861,-0.174705 l 2.06792,-0.8058 c 0.22871,-0.07928 0.35,-0.378542 0.24113,-0.594694 -0.0487,-0.111916 -0.14894,-0.200646 -0.26595,-0.236089 l -2.15054,-0.576235 c -0.0439,0.0014 -0.0835,-0.0013 -0.12575,0.0072 -0.002,-0.04393 0.002,-0.0839 -0.007,-0.125744 l -0.0966,-2.251039 c 1.4e-4,-0.07781 -0.0222,-0.15655 -0.064,-0.223251 -0.06,-0.100464 -0.16209,-0.173981 -0.27618,-0.197955 l 0.0135,0.0037 -5.8e-4,-1.45e-4 z"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle1.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <image
+ y="-31"
+ x="394"
+ id="image6055"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAB1JREFU OI1jfK+p+Z+BAsBEieZRA0YNGDVgMBkAAGPfAmCG9D3bAAAAAElFTkSuQmCC "
+ height="16"
+ width="16"
+ style="opacity:0"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle2.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g6057"
+ transform="translate(91,-250)"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle2.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path6059"
+ d="m 305.53125,220.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,10.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 10.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-8.3125 -0.0312,-1.125 -5.9375,0 -2.28125,-2.03125 -3.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 z"
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 309.78125,224.5 c -0.2554,0 -0.45965,0.13987 -0.59375,0.34375 -0.43264,0.54853 -1.12354,1.65625 -1.65625,1.65625 l -4.01072,0 -0.0205,5.59375 c 0,1.33756 0.65057,2.40625 1.46875,2.40625 l 12.0625,0 c 0.81819,0 1.46875,-1.06869 1.46875,-2.40625 l 0.0509,-7.59375 z"
+ id="path6061"
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.71595327;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3-0);enable-background:new"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ id="path6063"
+ sodipodi:nodetypes="csccsccsccscc"
+ transform="matrix(0.06533091,0,0,0.2941173,301.14534,90.449312)"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 403.92521,-24.541362 c -0.15643,-0.06526 -0.35094,-0.02495 -0.46916,0.09681 l -1.69431,1.503642 c -0.0355,0.02359 -0.0665,0.05129 -0.0937,0.08418 -0.0234,-0.03556 -0.0516,-0.06654 -0.0838,-0.09401 l -1.89365,-1.093299 c -0.10583,-0.0611 -0.24099,-0.06558 -0.35509,-0.02117 -0.2299,0.07581 -0.35515,0.37354 -0.24999,0.591034 l 0.89263,2.032116 -0.0626,0.184474 -1.63991,1.489013 c -0.24603,0.238141 -0.0299,0.745007 0.31206,0.731691 l 2.20595,-0.243015 0.19832,0.114502 0.89269,2.032014 c 0.0838,0.166048 0.28574,0.262082 0.46722,0.224142 0.15555,-0.03521 0.28627,-0.164021 0.32253,-0.319432 l 0.4694,-2.164812 c -0.049,-0.04299 0.0853,-0.09781 0.12838,-0.146468 l 2.20601,-0.243126 c 0.24144,-0.01738 0.43605,-0.275057 0.38683,-0.512021 -0.0181,-0.120707 -0.0919,-0.232358 -0.19578,-0.296878 l -1.92812,-1.113201 c -0.0428,-0.01001 -0.0803,-0.02287 -0.12333,-0.02559 0.009,-0.04295 0.0237,-0.08052 0.0258,-0.123272 l 0.48931,-2.199338 c 0.0203,-0.07512 0.0191,-0.156962 -0.004,-0.232208 -0.0319,-0.11257 -0.11154,-0.210005 -0.21554,-0.262691 l 0.0121,0.0071 -5.3e-4,-2.9e-4 z"
+ id="path6065"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle2.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <image
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle3.png"
+ style="opacity:0"
+ width="16"
+ height="16"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAB1JREFU OI1jfK+p+Z+BAsBEieZRA0YNGDVgMBkAAGPfAmCG9D3bAAAAAElFTkSuQmCC "
+ id="image6067"
+ x="414"
+ y="-31" />
+ <g
+ transform="translate(111,-250)"
+ id="g6069"
+ style="display:inline;enable-background:new"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle3.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 305.53125,220.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,10.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 10.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-8.3125 -0.0312,-1.125 -5.9375,0 -2.28125,-2.03125 -3.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 z"
+ id="path6071"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc"
+ id="path6073"
+ d="m 309.78125,224.5 c -0.2554,0 -0.45965,0.13987 -0.59375,0.34375 -0.43264,0.54853 -1.12354,1.65625 -1.65625,1.65625 l -4.01072,0 -0.0205,5.59375 c 0,1.33756 0.65057,2.40625 1.46875,2.40625 l 12.0625,0 c 0.81819,0 1.46875,-1.06869 1.46875,-2.40625 l 0.0509,-7.59375 z"
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.06533091,0,0,0.2941173,301.14534,90.449312)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path6075"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.71595327;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3-0);enable-background:new" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path6077"
+ d="m 424.84506,-23.918951 c -0.13421,-0.103524 -0.33252,-0.11493 -0.47823,-0.02792 l -2.02575,1.013887 c -0.0404,0.0136 -0.0775,0.03233 -0.11229,0.05706 -0.0134,-0.0404 -0.0326,-0.07763 -0.0566,-0.112496 l -1.54616,-1.546158 c -0.0864,-0.08641 -0.2158,-0.125719 -0.33751,-0.112353 -0.24168,0.01372 -0.43972,0.268892 -0.39444,0.506193 l 0.33626,2.193903 -0.10821,0.161986 -1.96941,1.013836 c -0.29929,0.166349 -0.22171,0.711883 0.11205,0.787526 l 2.19368,0.336208 0.16193,0.161929 0.33634,2.19382 c 0.038,0.182079 0.20818,0.327107 0.39329,0.33743 0.15936,0.0062 0.31897,-0.08434 0.39422,-0.225071 l 1.0137,-1.969558 c -0.0362,-0.05421 0.1077,-0.0724 0.16191,-0.10825 l 2.19377,0.336116 c 0.23771,0.0457 0.49238,-0.152827 0.50617,-0.394455 0.0138,-0.121279 -0.0286,-0.248227 -0.11227,-0.337434 l -1.57431,-1.574304 c -0.0387,-0.02075 -0.0716,-0.04287 -0.1125,-0.05664 0.0198,-0.03916 0.0437,-0.07164 0.0568,-0.112394 l 1.04186,-1.997755 c 0.039,-0.06731 0.0591,-0.14667 0.0562,-0.225331 -0.002,-0.11699 -0.0534,-0.231718 -0.14021,-0.309526 l 0.01,0.01 -4.3e-4,-4.17e-4 z"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle3.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <image
+ y="-31"
+ x="434"
+ id="image6079"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAB1JREFU OI1jfK+p+Z+BAsBEieZRA0YNGDVgMBkAAGPfAmCG9D3bAAAAAElFTkSuQmCC "
+ height="16"
+ width="16"
+ style="opacity:0"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle4.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g6081"
+ transform="translate(131,-250)"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle4.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path6083"
+ d="m 305.53125,220.5 c -0.57203,0.064 -1.00351,0.54941 -1,1.125 l 0,10.34375 c 6e-5,0.62129 0.50371,1.12494 1.125,1.125 l 10.71875,0 c 0.62129,-6e-5 1.12494,-0.50371 1.125,-1.125 l 0,-8.3125 -0.0312,-1.125 -5.9375,0 -2.28125,-2.03125 -3.59375,0 c -0.0416,-0.002 -0.0834,-0.002 -0.125,0 z"
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999964;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 309.78125,224.5 c -0.2554,0 -0.45965,0.13987 -0.59375,0.34375 -0.43264,0.54853 -1.12354,1.65625 -1.65625,1.65625 l -4.01072,0 -0.0205,5.59375 c 0,1.33756 0.65057,2.40625 1.46875,2.40625 l 12.0625,0 c 0.81819,0 1.46875,-1.06869 1.46875,-2.40625 l 0.0509,-7.59375 z"
+ id="path6085"
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.71595327;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-3-0);enable-background:new"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ id="path6087"
+ sodipodi:nodetypes="csccsccsccscc"
+ transform="matrix(0.06533091,0,0,0.2941173,301.14534,90.449312)"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 445.54792,-23.023114 c -0.10284,-0.134733 -0.29144,-0.197076 -0.4547,-0.150744 l -2.21914,0.455037 c -0.0426,0.0027 -0.0832,0.01117 -0.12323,0.02605 -0.002,-0.04249 -0.0114,-0.08342 -0.0256,-0.123312 l -1.0933,-1.893649 c -0.0611,-0.105828 -0.17591,-0.177289 -0.29693,-0.195879 -0.237,-0.0493 -0.49433,0.145922 -0.51201,0.386856 l -0.24302,2.206178 -0.14645,0.12846 -2.16471,0.46957 c -0.33214,0.08322 -0.3984,0.630243 -0.0956,0.789692 l 2.03191,0.892518 0.11451,0.198322 -0.24293,2.206119 c -0.0104,0.18571 0.11643,0.369842 0.29256,0.427723 0.15232,0.04723 0.32993,0.0011 0.43904,-0.11537 l 1.48892,-1.640082 c -0.0209,-0.06173 0.12277,-0.04206 0.18441,-0.06266 l 2.03202,0.892452 c 0.21778,0.105667 0.51516,-0.02018 0.59102,-0.250008 0.0447,-0.113574 0.0366,-0.247171 -0.0211,-0.354993 l -1.11321,-1.928123 c -0.032,-0.03006 -0.0581,-0.05994 -0.094,-0.08383 0.0293,-0.0327 0.0608,-0.05789 0.084,-0.09386 l 1.52341,-1.66003 c 0.0551,-0.05492 0.095,-0.126376 0.11261,-0.203108 0.0283,-0.113521 0.008,-0.237643 -0.0553,-0.335268 l 0.007,0.01225 -3.1e-4,-5.14e-4 z"
+ id="path6089"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/SparkleShare/Mac/SparkleShare/idle4.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="fill:#fef0f0;fill-opacity:1;stroke:none"
+ id="rect6091"
+ width="3"
+ height="1"
+ x="363"
+ y="-23" />
+ <rect
+ y="-23"
+ x="358"
+ height="1"
+ width="3"
+ id="rect6093"
+ style="fill:#fef0f0;fill-opacity:1;stroke:none" />
+ <rect
+ y="-24"
+ x="361"
+ height="1"
+ width="2"
+ id="rect6095"
+ style="fill:#fef0f0;fill-opacity:1;stroke:none" />
+ <rect
+ y="-21"
+ x="364"
+ height="1"
+ width="1"
+ id="rect6099"
+ style="fill:#fef0f0;fill-opacity:1;stroke:none" />
+ <rect
+ style="fill:#fef0f0;fill-opacity:1;stroke:none"
+ id="rect6101"
+ width="1"
+ height="1"
+ x="359"
+ y="-21" />
+ <rect
+ style="fill:#fef0f0;fill-opacity:1;stroke:none"
+ id="rect6103"
+ width="2"
+ height="1"
+ x="361"
+ y="-19" />
+ <rect
+ y="-18"
+ x="364"
+ height="1"
+ width="1"
+ id="rect6105"
+ style="fill:#fef0f0;fill-opacity:1;stroke:none" />
+ <rect
+ style="fill:#fef0f0;fill-opacity:1;stroke:none"
+ id="rect6107"
+ width="1"
+ height="1"
+ x="359"
+ y="-18" />
+ <rect
+ style="fill:#fef0f0;fill-opacity:1;stroke:none"
+ id="rect6109"
+ width="1"
+ height="1"
+ x="365"
+ y="-22" />
+ <rect
+ y="-22"
+ x="358"
+ height="1"
+ width="1"
+ id="rect6111"
+ style="fill:#fef0f0;fill-opacity:1;stroke:none" />
+ <image
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/data/icons/error-active.png"
+ style="opacity:0"
+ width="16"
+ height="16"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAB1JREFU OI1jfK+p+Z+BAsBEieZRA0YNGDVgMBkAAGPfAmCG9D3bAAAAAElFTkSuQmCC "
+ id="image7289"
+ x="454"
+ y="-31" />
+ <g
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/Users/hbons/Code/SparkleShare/data/icons/error-active.png"
+ transform="translate(151,-250)"
+ id="g7291"
+ style="display:inline;enable-background:new">
+ <path
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999964;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Sans;-inkscape-font-specification:Sans"
+ d="M 456.46875 270 C 455.6467 270.092 455.02621 270.79783 455.03125 271.625 L 455.03125 276 L 454.53125 276 L 454.03125 276 L 454.03125 276.5 L 454 282.09375 C 454 282.84359 454.1756 283.5306 454.5 284.0625 C 454.8244 284.5944 455.34196 285 455.96875 285 L 468.03125 285 C 468.65804 285 469.1756 284.5944 469.5 284.0625 C 469.8244 283.5306 470 282.84359 470 282.09375 L 470.0625 274.5 L 470.0625 274 L 469.5625 274 L 469 274 L 469 273.65625 L 468.96875 272.53125 L 468.96875 272.03125 L 468.46875 272.03125 L 462.75 272.03125 L 460.59375 270.125 L 460.4375 270 L 460.25 270 L 456.6875 270 C 456.6775 269.99954 456.66585 270.00031 456.65625 270 C 456.61775 269.999 456.56975 269.999 456.53125 270 L 456.5 270 L 456.46875 270 z M 461 275 L 463 275 L 462.75 280 L 461.28125 280 L 461 275 z M 461 281 L 463 281 L 463 283 L 461 283 L 461 281 z "
+ transform="translate(-151,-50)"
+ id="path7293" />
+ </g>
+ </g>
+ <g
+ style="display:inline"
+ inkscape:label="hires"
+ id="layer21"
+ inkscape:groupmode="layer">
+ <g
+ transform="translate(25,-251)"
+ id="g10464"
+ style="opacity:0.8;display:inline;enable-background:new">
+ <rect
+ style="opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter4458)"
+ id="rect10466"
+ width="230"
+ height="20"
+ x="15"
+ y="201"
+ rx="8.1534395"
+ ry="10"
+ transform="matrix(0.9130435,0,0,0.3000013,28.304348,171.69973)" />
+ <rect
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;filter:url(#filter4454);enable-background:new"
+ id="rect10468"
+ width="230"
+ height="20"
+ x="15"
+ y="201"
+ rx="8.1534395"
+ ry="10"
+ transform="matrix(0.9130435,0,0,0.3000013,28.304348,171.69973)" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g10470"
+ transform="matrix(1,0,0,1.0053576,25,-491.56441)">
+ <g
+ transform="translate(0,-20)"
+ clip-path="url(#clipPath4061)"
+ id="g10472"
+ style="display:inline;enable-background:new">
+ <path
+ sodipodi:nodetypes="cccccccccsscc"
+ id="path10474"
+ style="fill:url(#linearGradient10740);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="M 52.094352,312 C 49.758741,312 48,313.27843 48,315.94967 l 0,167.46562 C 48,487.36726 50.446761,490 53.771787,490 L 243.327,490 c 3.34438,0 4.673,-2.46074 4.673,-5.90535 l 0,-147.52177 c 0,-2.95096 -2.01067,-4.54661 -4.51602,-4.54661 l -93.98741,0 c -1.69284,0 -4.43377,-0.2055 -6.49302,-2.5614 l -13.0712,-14.95423 c -1.75748,-2.01066 -4.22518,-2.51056 -6.08975,-2.51056 L 52.094352,312 z" />
+ <path
+ transform="translate(0,20)"
+ id="path10476"
+ d="m 122.25,324 c -3.19807,0 -5.91553,1.72373 -7.53125,4.125 l -7.65625,11.34375 c -1.91159,2.84099 -5.30031,4.7797 -9.46875,4.78125 l -52.25,0 c -3.196847,0 -5.39241,3.03742 -5.34375,5.0625 L 40.40625,366 254.71875,366 256,329.0625 c 0.10424,-3.03661 -2.14692,-5.06249 -5.34375,-5.0625 L 122.25,324 z"
+ style="opacity:0.7123288;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4123);enable-background:new" />
+ <path
+ sodipodi:nodetypes="ccccccccccccccccc"
+ id="path10478"
+ d="M 52.09375,313 C 49.758138,313 48,314.26626 48,316.9375 l 0,2 C 48,316.26626 49.758138,315 52.09375,315 l 70.75,0 c 1.86457,0 4.33628,0.48933 6.09375,2.5 L 142,332.46875 c 2.05925,2.3559 4.80716,2.56249 6.5,2.5625 l 94.96875,0 c 2.50535,0 4.53125,1.58029 4.53125,4.53125 l 0,-2 c 0,-2.95096 -2.0259,-4.53125 -4.53125,-4.53125 l -94.96875,0 c -1.69284,-10e-6 -4.44075,-0.2066 -6.5,-2.5625 L 128.9375,315.5 c -1.75747,-2.01067 -4.22918,-2.5 -6.09375,-2.5 l -70.75,0 0,0 0,0 z"
+ style="opacity:0.53881279;fill:url(#radialGradient10742);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccccccccsscc"
+ id="path10480"
+ style="fill:none;stroke:url(#linearGradient10744);stroke-width:1.99466383;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter4065);enable-background:new"
+ d="M 51.094352,311 C 48.758741,311 47,312.27843 47,314.94967 l 0,168.46562 C 47,487.36726 49.446761,490 52.771787,490 L 244.327,490 c 3.34438,0 4.673,-2.46074 4.673,-5.90535 l 0,-148.52177 c 0,-2.95096 -2.01067,-4.54661 -4.51602,-4.54661 l -94.98741,0 c -1.69284,0 -4.43377,-0.2055 -6.49302,-2.5614 l -13.0712,-14.95423 c -1.75748,-2.01066 -4.22518,-2.51056 -6.08975,-2.51056 L 51.094352,311 z" />
+ <rect
+ style="opacity:0.45;fill:url(#radialGradient10746);fill-opacity:1;stroke:none;display:inline;filter:url(#filter3458);enable-background:new"
+ id="rect10482"
+ width="1.75"
+ height="52.75"
+ x="49.25"
+ y="57"
+ rx="0.875"
+ ry="0.875"
+ transform="matrix(0.7734591,0,0,1,10.90714,260)" />
+ </g>
+ <path
+ transform="translate(0,-20)"
+ sodipodi:nodetypes="cccccccccsscc"
+ id="path10484"
+ style="opacity:0.02999998;fill:url(#pattern2719);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ d="M 52.094352,312 C 49.758741,312 48,313.27843 48,315.94967 l 0,167.46562 C 48,487.36726 50.446761,490 53.771787,490 L 243.327,490 c 3.34438,0 4.673,-2.46074 4.673,-5.90535 l 0,-147.52177 c 0,-2.95096 -2.01067,-4.54661 -4.51602,-4.54661 l -93.98741,0 c -1.69284,0 -4.43377,-0.2055 -6.49302,-2.5614 l -13.0712,-14.95423 c -1.75748,-2.01066 -4.22518,-2.51056 -6.08975,-2.51056 L 52.094352,312 z" />
+ <g
+ transform="translate(-0.06621,-11.009727)"
+ clip-path="url(#clipPath10943)"
+ id="g10486"
+ style="display:inline;enable-background:new">
+ <path
+ transform="translate(280.06621,251.00973)"
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path10488"
+ d="m -157.8125,83 128.40625,0 c 3.19684,0 5.34037,2.0241 5.34375,5.0625 l 0.125,121.71875 c 1e-6,16.5 -3.66218,25.21875 -10.46875,25.21875 l -197.25,0 c -6.60581,0.59601 -7.36487,-12.58994 -7.5,-27.21875 l -0.90625,-99.46875 c -0.0187,-2.02557 2.11566,-5.0625 5.3125,-5.0625 l 52.28125,-0.0313 c 4.16844,-0.002 7.55716,-1.94026 9.46875,-4.78125 l 7.65625,-11.34375 C -163.72803,84.69248 -161.01057,83 -157.8125,83 z"
+ style="fill:url(#linearGradient10748);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ sodipodi:nodetypes="czzszczzcczzc"
+ id="path10490"
+ d="m 45.328878,104.25703 52.267458,-0.0193 c 4.168444,-0.002 7.570074,-1.94184 9.481664,-4.78283 l 7.62996,-11.33956 c 1.61572,-2.40127 4.3437,-4.11535 7.54177,-4.11535 l 128.41869,0 c 3.19684,0 5.43232,2.02764 5.32808,5.06425 l -4.86477,141.72679 C 251.02452,233.91443 248.9396,236 245.65142,236 l -197.251449,0 c -3.288187,0 -5.405233,-2.08455 -5.480311,-5.20895 L 40.000799,109.32128 c -0.04866,-2.02507 2.131232,-5.06425 5.328079,-5.06425 z"
+ style="opacity:0.02999998;fill:url(#pattern4229-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ transform="translate(0,250)" />
+ <path
+ sodipodi:nodetypes="ccccccccccccccccc"
+ id="path10492"
+ d="m 123.25,335 c -3.19807,0 -5.91553,1.72373 -7.53125,4.125 l -7.65625,11.34375 c -1.91159,2.84099 -5.30031,4.7797 -9.46875,4.78125 l -53.25,0 c -3.196847,0 -5.39241,2.03742 -5.34375,4.0625 l 0.03125,1.65625 c 0.181474,-2.00765 2.290875,-3.71875 5.3125,-3.71875 l 53.25,0 c 4.16844,-0.002 7.55716,-1.94026 9.46875,-4.78125 L 115.71875,341.125 C 117.33447,338.72373 120.05193,337 123.25,337 l 127.40625,0 c 2.87974,10e-6 5.0005,1.64142 5.3125,4.1875 L 256,340.0625 c 0.10424,-3.03661 -2.14692,-5.06249 -5.34375,-5.0625 L 123.25,335 z"
+ style="fill:url(#radialGradient10750);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ transform="matrix(1,0,0,2.3217391,0,-646.63913)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path10494"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.34188035;fill:url(#radialGradient10752);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-19);enable-background:new" />
+ <g
+ transform="translate(0,9.9999995)"
+ style="display:inline;filter:url(#filter4379-0);enable-background:new"
+ id="g10496">
+ <path
+ style="fill:url(#radialGradient10754);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 43.34375,346.71875 c -0.813781,0 -1.501984,0.39781 -2.0625,1 -0.560516,0.60219 -0.81462,1.44302 -0.8125,1.53125 L 43.375,470.71875 c 0.0243,1.01121 0.33196,1.63225 0.78125,2.0625 0.44929,0.43025 1.131902,0.75 2.25,0.75 l 1,0 c -1.118098,0 -1.80071,-0.31975 -2.25,-0.75 -0.44929,-0.43025 -0.756951,-1.05129 -0.78125,-2.0625 L 41.46875,349.25 c -0.0021,-0.0882 0.251984,-0.92906 0.8125,-1.53125 0.560516,-0.60219 1.248719,-1 2.0625,-1 l -1,0 0,0 0,0 0,0 z"
+ id="path10498"
+ sodipodi:nodetypes="csccsccsccscc" />
+ <path
+ style="fill:url(#radialGradient10756);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 251.14956,324.47269 c 1.07486,-0.022 1.79597,0.31235 2.23365,0.70438 0.43769,0.39202 0.70426,0.84746 0.69197,1.73619 l -1.97032,141.78888 c -0.0143,1.03395 -0.33847,1.67453 -0.76943,2.10996 -0.43097,0.43543 -1.05407,0.77176 -2.17168,0.79466 l 0.99979,-0.0205 c 1.11761,-0.0229 1.74071,-0.35923 2.17168,-0.79466 0.43096,-0.43543 0.75514,-1.07601 0.76943,-2.10996 l 1.97032,-141.78888 c 0.0123,-0.88873 -0.25428,-1.34417 -0.69197,-1.73619 -0.43768,-0.39202 -1.15879,-0.72641 -2.23365,-0.70438 l -0.99979,0.0205 0,0 z"
+ id="path10500" />
+ </g>
+ <path
+ transform="translate(280.06621,251.00973)"
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path10502"
+ d="m -157.8125,83 128.40625,0 c 3.19684,0 5.34037,2.0241 5.34375,5.0625 l 0.125,121.71875 c 1e-6,16.5 -3.66218,25.21875 -10.46875,25.21875 l -197.25,0 c -6.60581,0.59601 -7.36487,-12.58994 -7.5,-27.21875 l -0.90625,-99.46875 c -0.0187,-2.02557 2.11566,-5.0625 5.3125,-5.0625 l 52.28125,-0.0313 c 4.16844,-0.002 7.55716,-1.94026 9.46875,-4.78125 l 7.65625,-11.34375 C -163.72803,84.69248 -161.01057,83 -157.8125,83 z"
+ style="fill:none;stroke:url(#linearGradient10758);stroke-width:1.99466383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter11355);enable-background:new" />
+ </g>
+ <path
+ transform="matrix(1,0,0,0.7217391,-0.06621,122.65114)"
+ sodipodi:nodetypes="csccsccsccscc"
+ id="path10504"
+ d="m 250.0625,476.75 c -0.0458,1.33554 -0.49131,2.35705 -1.21875,3.0625 -0.72744,0.70545 -1.76871,1.125 -3.1875,1.125 l -197.25,0 c -1.418904,0 -2.480488,-0.44927 -3.21875,-1.15625 -0.738262,-0.70698 -1.186879,-1.70494 -1.21875,-3.03125 l 0,3 c 0.03187,1.32631 0.480488,2.32427 1.21875,3.03125 0.738262,0.70698 1.799846,1.15625 3.21875,1.15625 l 197.25,0 c 1.41879,0 2.46006,-0.41955 3.1875,-1.125 0.72744,-0.70545 1.17291,-1.72696 1.21875,-3.0625 l 0,-3 z"
+ style="opacity:0.3;fill:url(#radialGradient10760);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4375-19);enable-background:new" />
+ </g>
+ <g
+ transform="translate(-397.002,-265.89567)"
+ id="g7670">
+ <path
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc"
+ id="path5717-0-9-5-0"
+ d="m 569.6321,136.60228 c -1.8678,0.24167 -3.5157,1.71451 -3.9769,3.54822 l -7.9492,23.95046 -1.7625,0.89368 -24.294,0 c -1.3579,0 -2.6831,0.70979 -3.5342,1.77407 -1.7911,2.01255 -1.342,5.58346 0.8777,7.09649 l 19.8777,14.63704 0.4228,2.12898 -7.5075,23.50619 c -1.044,3.66885 3.8509,7.3561 7.0675,5.3223 l 19.8756,-14.63571 2.5444,0 19.8777,14.63571 c 1.7284,1.13544 4.2055,0.93713 5.7406,-0.43994 1.3013,-1.20646 1.8432,-3.17782 1.3288,-4.8796 l -7.5094,-23.50619 c -0.7113,-0.14154 0.2801,-1.41925 0.4228,-2.12888 l 19.8751,-14.63715 c 2.2268,-1.51287 2.6678,-5.08382 0.8779,-7.09637 -0.8444,-1.06418 -2.1756,-1.7301 -3.5328,-1.77409 l -24.7367,0 -1.7619,-0.89367 -7.5096,-23.95036 c -0.2213,-0.83794 -0.689,-1.62085 -1.3288,-2.21836 -0.9333,-0.90818 -2.2399,-1.40516 -3.5332,-1.33413 l 0.1573,8.6e-4 0,1.1e-4 -0.009,3.4e-4 z"
+ style="fill:none;stroke:#d77711;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc"
+ id="path5717-0-9-5"
+ d="m 569.6321,135.60228 c -1.8678,0.24167 -3.5157,1.71451 -3.9769,3.54822 l -7.9492,23.95046 -1.7625,0.89368 -24.294,0 c -1.3579,0 -2.6831,0.70979 -3.5342,1.77407 -1.7911,2.01255 -1.342,5.58346 0.8777,7.09649 l 19.8777,14.63704 0.4228,2.12898 -7.5075,23.50619 c -1.044,3.66885 3.8509,7.3561 7.0675,5.3223 l 19.8756,-14.63571 2.5444,0 19.8777,14.63571 c 1.7284,1.13544 4.2055,0.93713 5.7406,-0.43994 1.3013,-1.20646 1.8432,-3.17782 1.3288,-4.8796 l -7.5094,-23.50619 c -0.7113,-0.14154 0.2801,-1.41925 0.4228,-2.12888 l 19.8751,-14.63715 c 2.2268,-1.51287 2.6678,-5.08382 0.8779,-7.09637 -0.8444,-1.06418 -2.1756,-1.7301 -3.5328,-1.77409 l -24.7367,0 -1.7619,-0.89367 -7.5096,-23.95036 c -0.2213,-0.83794 -0.689,-1.62085 -1.3288,-2.21836 -0.9333,-0.90818 -2.2399,-1.40516 -3.5332,-1.33413 l 0.1573,8.6e-4 0,1.1e-4 -0.009,3.4e-4 z"
+ style="fill:none;stroke:#fbc98d;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </g>
+ </g>
+ <g
+ transform="translate(24.91295,-32.612698)"
+ id="g4864">
+ <path
+ transform="matrix(2.7092,0,0,2.7092,-468.22285,-205.6789)"
+ d="m 244,51 c 0,2.761424 -2.23858,5 -5,5 -2.76142,0 -5,-2.238576 -5,-5 0,-2.761424 2.23858,-5 5,-5 2.76142,0 5,2.238576 5,5 z"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="51"
+ sodipodi:cx="239"
+ id="path14841-3"
+ style="opacity:0.45783099;fill:url(#radialGradient4143);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.507975,0,0,0.507975,58.548148,-92.738895)"
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path14843-0"
+ sodipodi:cx="239"
+ sodipodi:cy="51"
+ sodipodi:rx="5"
+ sodipodi:ry="5"
+ d="m 244,51 c 0,2.761424 -2.23858,5 -5,5 -2.76142,0 -5,-2.238576 -5,-5 0,-2.761424 2.23858,-5 5,-5 2.76142,0 5,2.238576 5,5 z" />
+ <path
+ transform="matrix(3.8092,0,0,3.8092,-726.49787,-264.7792)"
+ d="m 244,51 c 0,2.761424 -2.23858,5 -5,5 -2.76142,0 -5,-2.238576 -5,-5 0,-2.761424 2.23858,-5 5,-5 2.76142,0 5,2.238576 5,5 z"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="51"
+ sodipodi:cx="239"
+ id="path14849-7"
+ style="opacity:0.45783099;fill:url(#radialGradient7892-7);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.714225,0,0,0.714225,14.155148,-105.9829)"
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path14851-8"
+ sodipodi:cx="239"
+ sodipodi:cy="51"
+ sodipodi:rx="5"
+ sodipodi:ry="5"
+ d="m 244,51 c 0,2.761424 -2.23858,5 -5,5 -2.76142,0 -5,-2.238576 -5,-5 0,-2.761424 2.23858,-5 5,-5 2.76142,0 5,2.238576 5,5 z" />
+ <path
+ sodipodi:type="star"
+ style="fill:none;stroke:url(#radialGradient7894-2);stroke-width:11.49779987;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter15758-4)"
+ id="path14984-6"
+ sodipodi:sides="5"
+ sodipodi:cx="157.25"
+ sodipodi:cy="187.61218"
+ sodipodi:r1="57.682449"
+ sodipodi:r2="23.586105"
+ sodipodi:arg1="0.5417155"
+ sodipodi:arg2="1.1714918"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 206.67379,217.35364 -40.25404,-8.01083 -22.18276,34.4648 -4.82043,-40.75934 -39.632833,-10.44685 37.274853,-17.17984 -2.31168,-40.92131 27.85756,30.14162 38.20413,-14.84391 -20.05793,35.80838 z"
+ inkscape:transform-center-x="0.042578782"
+ inkscape:transform-center-y="-4.4264044"
+ transform="matrix(0.795516,0.351305,-0.351384,0.795695,88.379148,-256.9333)" />
+ <path
+ style="opacity:0.56223204;color:#000000;fill:#fdeddd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 135.06415,-25.260715 c 0,0 6.625,-3.125 12.625,0.125 l 21,15.25 c 3.875,2.125 9.5,-1.25 10.375,-4.875 0,0 -6.25,0.75 -8.5,-2.75 l -19.5,-14.75 c -1.625,-1.25 -4.25,-1.25 -6.25,-0.25 z"
+ id="path11982-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path11986-8"
+ d="m 126.76138,-10.228385 c -3.125,-1 -4.44279,-3.02729 -2.88943,-8.81716 l 3.92665,-12.82661 c 0.46212,-4.39519 0.2966,-7.85179 -5.25988,-11.00768 0,0 -0.75133,6.08163 -2.2258,10.03988 l -4.31672,13.4356 c -0.30418,5.80015 4.7754,9.8299 10.76518,9.17597 z"
+ style="opacity:0.56223204;color:#000000;fill:#fde6cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ inkscape:connector-curvature="0"
+ id="path12005-4"
+ d="m 143.09007,-80.304705 c 0,0 -3.59929,6.37976 -10.37392,7.19639 l -23.7013,0.19632 c -5.89034,0.006 -9.404132,7.38683 -7.27253,12.85056 0,0 0.66626,-4.72505 7.77552,-4.79485 l 24.5633,-0.48717 c 2.04857,0.0806 4.1905,-1.43692 5.24435,-3.40907 z"
+ style="opacity:0.56223204;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:0.56223204;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 142.998,-99.121645 c 0,0 2.26003,1.34292 5.63167,7.27542 l 3.70793,12.16311 c 2.16374,3.8535 4.09997,7.29893 10.45829,6.6619 0,0 -4.81661,-15.45027 -7.5324,-23.08512 -3.10481,-4.908615 -7.96832,-4.716455 -12.26549,-3.01531 z"
+ id="path12007-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <g
+ transform="translate(307.13515,-213.3706)"
+ id="g12056-1">
+ <path
+ transform="matrix(3.8092,0,0,3.8092,-1042.5,0.95285)"
+ d="m 244,51 c 0,2.761424 -2.23858,5 -5,5 -2.76142,0 -5,-2.238576 -5,-5 0,-2.761424 2.23858,-5 5,-5 2.76142,0 5,2.238576 5,5 z"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="51"
+ sodipodi:cx="239"
+ id="path12058-4"
+ style="opacity:0.45783099;fill:url(#radialGradient12066-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.714225,0,0,0.714225,-301.847,159.749)"
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path12060-9"
+ sodipodi:cx="239"
+ sodipodi:cy="51"
+ sodipodi:rx="5"
+ sodipodi:ry="5"
+ d="m 244,51 c 0,2.761424 -2.23858,5 -5,5 -2.76142,0 -5,-2.238576 -5,-5 0,-2.761424 2.23858,-5 5,-5 2.76142,0 5,2.238576 5,5 z" />
+ <path
+ transform="matrix(1.8092,0,0,1.8092,-568.584,103.68)"
+ d="m 244,51 c 0,2.761424 -2.23858,5 -5,5 -2.76142,0 -5,-2.238576 -5,-5 0,-2.761424 2.23858,-5 5,-5 2.76142,0 5,2.238576 5,5 z"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="51"
+ sodipodi:cx="239"
+ id="path12062-2"
+ style="opacity:0.45783099;fill:url(#radialGradient12068-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.339225,0,0,0.339225,-216.807,179.101)"
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path12064-0"
+ sodipodi:cx="239"
+ sodipodi:cy="51"
+ sodipodi:rx="5"
+ sodipodi:ry="5"
+ d="m 244,51 c 0,2.761424 -2.23858,5 -5,5 -2.76142,0 -5,-2.238576 -5,-5 0,-2.761424 2.23858,-5 5,-5 2.76142,0 5,2.238576 5,5 z" />
+ </g>
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.7;fill:url(#radialGradient3595);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="path10114"
+ sodipodi:cx="719.81262"
+ sodipodi:cy="503.36945"
+ sodipodi:rx="4.6624851"
+ sodipodi:ry="1.5688932"
+ d="m 724.47511,503.36945 c 0,0.86647 -2.08747,1.56889 -4.66249,1.56889 -2.57502,0 -4.66248,-0.70242 -4.66248,-1.56889 0,-0.86648 2.08746,-1.5689 4.66248,-1.5689 2.57502,0 4.66249,0.70242 4.66249,1.5689 z"
+ transform="matrix(1.0723917,0,0,0.9560854,-396.92109,-533.76418)" />
+ <use
+ style="display:inline;enable-background:new"
+ x="0"
+ y="0"
+ xlink:href="#g3326"
+ id="use3340"
+ transform="translate(30.005404,-2.1073909e-4)"
+ width="500"
+ height="400" />
+ <path
+ style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 375.00541,-62.500211 c -2.48684,0 -4.5,2.01334 -4.5,4.5 0,2.48666 2.01316,4.5 4.5,4.5 1.21264,0 2.31542,-0.4705 3.125,-1.25 0.21559,-0.54791 0.375,-1.33367 0.375,-2.4375 l 0,-3.59375 c -0.82499,-1.03534 -2.0732,-1.71875 -3.5,-1.71875 z"
+ id="path10363-4" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g10100"
+ transform="matrix(0.5628517,0,0,0.5628102,-38.411986,-278.4635)">
+ <path
+ transform="matrix(0.2807028,0,0,0.2807031,558.78002,246.93785)"
+ d="m 654.5,522.125 c 0,15.74012 -12.75988,28.5 -28.5,28.5 -15.74012,0 -28.5,-12.75988 -28.5,-28.5 0,-15.74012 12.75988,-28.5 28.5,-28.5 15.74012,0 28.5,12.75988 28.5,28.5 z"
+ sodipodi:ry="28.5"
+ sodipodi:rx="28.5"
+ sodipodi:cy="522.125"
+ sodipodi:cx="626"
+ id="path10102"
+ style="fill:#ef2929;fill-opacity:1;fill-rule:nonzero;stroke:#cc0000;stroke-width:6.32958412;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ sodipodi:type="arc" />
+ <rect
+ ry="0.22198991"
+ rx="0.16647698"
+ y="391.72409"
+ x="729.17267"
+ height="3.5518386"
+ width="10.654527"
+ id="rect10104"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ transform="matrix(0.2180752,0,0,0.2180738,597.98489,279.63816)"
+ d="m 654.5,522.125 c 0,15.74012 -12.75988,28.5 -28.5,28.5 -15.74012,0 -28.5,-12.75988 -28.5,-28.5 0,-15.74012 12.75988,-28.5 28.5,-28.5 15.74012,0 28.5,12.75988 28.5,28.5 z"
+ sodipodi:ry="28.5"
+ sodipodi:rx="28.5"
+ sodipodi:cy="522.125"
+ sodipodi:cx="626"
+ id="path10106"
+ style="opacity:0.7;fill:none;stroke:url(#radialGradient3597);stroke-width:8.14736748;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ sodipodi:type="arc" />
+ </g>
+ </g>
+ <g
+ transform="translate(81,-71)"
+ id="g3695" />
+</svg>
diff --git a/data/sparkleshare-mist.svg b/data/sparkleshare-mist.svg
new file mode 100644
index 0000000..bc6aedd
--- /dev/null
+++ b/data/sparkleshare-mist.svg
@@ -0,0 +1,2099 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="400"
+ id="svg11300"
+ inkscape:export-filename="/home/jimmac/Desktop/git-folders.png"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-ydpi="90.000000"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="sparkleshare-mist.svg"
+ sodipodi:version="0.32"
+ style="display:inline;enable-background:new"
+ version="1.0"
+ width="500">
+ <title
+ id="title6349">Mist SparkleShare</title>
+ <sodipodi:namedview
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ fill="#f57900"
+ gridtolerance="10000"
+ guidetolerance="10000"
+ height="300px"
+ id="base"
+ inkscape:current-layer="svg11300"
+ inkscape:cx="365.69334"
+ inkscape:cy="125.81134"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:showpageshadow="false"
+ inkscape:snap-bbox="false"
+ inkscape:snap-nodes="false"
+ inkscape:window-height="694"
+ inkscape:window-width="990"
+ inkscape:window-x="409"
+ inkscape:window-y="69"
+ inkscape:zoom="8"
+ objecttolerance="10000"
+ pagecolor="#ffffff"
+ showgrid="false"
+ stroke="#ef2929"
+ width="400px"
+ showguides="false"
+ inkscape:guide-bbox="true"
+ inkscape:snap-global="true"
+ inkscape:window-maximized="0"
+ inkscape:bbox-paths="false"
+ inkscape:bbox-nodes="false">
+ <inkscape:grid
+ empspacing="4"
+ visible="true"
+ type="xygrid"
+ spacingy="1px"
+ spacingx="1px"
+ id="grid5883"
+ enabled="true"
+ snapvisiblegridlinesonly="true" />
+ <sodipodi:guide
+ id="guide3715"
+ position="642.75,472.25"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide3717"
+ position="660,462.5"
+ orientation="1,0" />
+ <sodipodi:guide
+ id="guide3719"
+ position="435.75,446.25"
+ orientation="1,0" />
+ <sodipodi:guide
+ id="guide3721"
+ position="587.5,364"
+ orientation="0,1" />
+ <sodipodi:guide
+ id="guide3734"
+ position="647.5,328"
+ orientation="1,0" />
+ <sodipodi:guide
+ id="guide3736"
+ position="448,311"
+ orientation="1,0" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="1004.7987,432.04224"
+ id="guide2995" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="314,177"
+ id="guide5127" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="321,93"
+ id="guide5129" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="692,250"
+ id="guide3538" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="316.69545,807.95789"
+ id="guide8344" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid8407"
+ visible="true"
+ enabled="false"
+ empspacing="2"
+ spacingx="0.5px"
+ spacingy="0.5px"
+ snapvisiblegridlinesonly="true" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="631.44636,847.46748"
+ id="guide8504" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="735.5,745"
+ id="guide9483" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="624,1021.5"
+ id="guide9523" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="544.5,1037.5"
+ id="guide9525" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="1590.9903,663.97327"
+ id="guide10342" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="396.5,539.5"
+ id="guide11568" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="440,508"
+ id="guide11570" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="1590.9903,663.97327"
+ id="guide6085" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata85">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:title>Mist SparkleShare</dc:title>
+ <dc:subject>
+ <rdf:Bag />
+ </dc:subject>
+ <dc:description />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei, Hylke Bons, </dc:title>
+ </cc:Agent>
+ </dc:rights>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs3">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4720">
+ <path
+ sodipodi:nodetypes="csssccccccccs"
+ id="path4722"
+ d="m -83.010409,80 c -1.968306,0 -3.194312,0.19561 -5.998699,3 l -17.992192,18 c -2.14991,2.14991 -3.73016,3 -5.9987,3 l -75,0 c -3.324,0 -6,2.676 -6,6 l 0,132 c 0,3.324 2.676,6 6,6 l 212.000003,0 c 3.323994,0 5.999996,-2.676 5.999996,-6 l 0,-156 c 0,-3.324 -2.676002,-6 -5.999996,-6 l -107.010412,0 z"
+ style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4573"
+ id="linearGradient4407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-230,0)"
+ x1="164"
+ y1="103"
+ x2="172"
+ y2="183" />
+ <linearGradient
+ id="linearGradient4573">
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0"
+ id="stop4575" />
+ <stop
+ style="stop-color:#f57900;stop-opacity:1"
+ offset="1"
+ id="stop4577" />
+ </linearGradient>
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#pattern15740"
+ id="pattern15742"
+ patternTransform="matrix(1,0,0,1.0107439,-1032.0662,-596.6729)" />
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#pattern15738"
+ id="pattern15740"
+ patternTransform="translate(-533,-333)" />
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#pattern15736"
+ id="pattern15738"
+ patternTransform="translate(-543,-333)" />
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#pattern4229-8-8"
+ id="pattern15736"
+ patternTransform="translate(-533,-333)" />
+ <pattern
+ patternTransform="translate(-523,-583)"
+ id="pattern4229-8-8"
+ xlink:href="#pattern2719-8-5"
+ inkscape:collect="always" />
+ <pattern
+ id="pattern2719-8-5"
+ patternTransform="translate(-523,-333)"
+ height="256"
+ width="256"
+ patternUnits="userSpaceOnUse">
+ <image
+ y="0"
+ x="0"
+ id="image2715-4-0"
+ height="256"
+ width="256"
+ xlink:href="data:image/png;base64,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 3NySOBxOkZub25pQKFyvq6tzsbW1nRoaGvIFAIAgFovXOjo6qvX09EAikQjAYDBq09PT9V+/fsXa 2dlJ/e9//+s+evSo0okTJ2YBAHD78ePH72PHjmUCAABMT0+nDQ0Nfe/p6ZHmcDjEHTvIwWjxAAAg AElEQVR2CDEYzLqvr6+GhobGOp1O92QwGJYsFuvu1taWjpSUlDufzwfNz8+v/vjxY+TixYsuKBRK BQKByAsEgjWJREIZGRkZxuPxgp07d6KysrLGvby8/jc7O1tAoVDgcDh8UVZWFnf06NH5ixcvStXW 1oqDgoKgtra2e9bX10cYDAYNh8PpUKlU2OPHj2vOnDkju3v37t0bGxsyqampT+fm5tZPnjwZQKfT +xsbGxWam5vF6enpBDwerzU5Odmvqqo6XlNTQzx37hylpKREWUdHhxwVFTV27do1opycnNjT09Mg Nze3mUKhED58+DAQEhJi0djYOHXr1i3Mly9f6jEYjJqNjY2zp6dn4/fv36WRSKSqhobGtpKSEnF1 dfUtDAY7OT8/T+fxeHo7duyAXb9+fTo3N1fGwcGhTEZGRhYGg/HOnz9vi0KhaN7e3rM5OTkK+vr6 HtevX/9+//79K+/evbvK4/H4ioqKKG9vb/+YmJjfly5dstm3bx/K19e36/nz508/fPjwLjc3t/L3 799vuFzuy+Hh4T/Xr193fvr0qYKBgQGuvr5+/NChQ8vnzp1T0NLSWhGJRNz19XVcbW2tho6Ozpfk 5OS/q6qq0m1sbKwXFxc/6ejo7LO2tqa+fPlSfXt7e+bKlSvmfD4fUVVVxadSqX8eP35M/fTpUxEA AEBVVVVEeHi4Vm9vrwIMBoNMT0/3ysvLb0KhUHcUCiWWk5Pby+Px7sFgsOOBgYEVGhoaW//8888h KBSqOzw8HD01NaVmbm5uqKys7BEcHOxrbGzs4unpCUxNTa2MjIwIXVxcjJqamqCNjY3Kjx496rK1 tb0UFRX1LDU1VZnD4bB4PN4ij8dTHx0dnQ4ODr4lFouB9vb2Aj09PXkZGZlgsVi8WF9ff3lkZAR/ 6tSpZyKRqO/Nmzdvb9++7bdnz56ypKQkaxqNhoDD4WJZWVkiAACAjIyMcHl5mamlpRX6H+W4+Ndf f73w8vLSPXjwoBGDwVg7fPjwgq2t7aS8vPyEtrb27r///hvQ1dUdxuPx2o8ePbIBS0tLS/P5/E4u l9tHp9NzV1dXKWg0Wt3Y2Dh5dnYWg8FgpBgMhiyXy4WMj49/v3Tp0oXW1tbys2fPxsHhcL2MjIzG 2NhYMYvFYqqqqkJu3LhRWF1dPWBpadlJIpGeKSkp4V1dXZ8fP348CIfDeQmFQoXKysqnbm5uSRUV FY9+/PhxIzg4eOHcuXNrdDp93sTERMjlcsfKy8svzM3NZZuamgLt7e3TFy9eZEChUEBLS0t9z549 daqqqpyGhgbHW7du7d3e3va4ePHiV5FIpLK4uHifw+H0LSwsbG9vb+8YHR3lXr58eby9vX0+MzNz 8+LFi0OnT58GGxkZfUhLS8ttbW1tAQCA7Orq+jw0NLRCVlaWeePGjUQejwficDiLQqFwFQwGS+Bw +M6bN29WQaFQiY+PT5G2tjZmfHw8U1FRkX/o0KESLBYrPTU1JRsYGKjU1tbGq66ulhIIBIL5+fks BAIxBwKBkOvr6zl9fX3LHh4ehn5+fr4RERG/QCCQBIfD8dPT0xNoNFq/SCQa1NTU/CEQCGiampqu FAplUCKRgGpqaojr6+uzFArFS0VFBRETE1O9vLwMtbGx0a6vr1+dmJhAuLq63ltdXf1TXFyMFYvF vL6+PlUwGMwgEAh8Ozs7pV27drEpFMqx6upq1Y2NDTgAAICzs/NKZmbmruHhYdb58+d5tra2wcPD w/z/Hp+kLywsWDIYDM6TJ0/8iUQiqrKycrympsbX1NT0JhgMRqSnp9s9f/68QEFBQZfNZsPs7e0D Y2JiqhISEgzk5eXlkpKStp8/f/70woULiRKJpP3QoUP4uLg4/7KyMgafz3eLjo6W2traghIIhPd/ /vxpt7e33x4dHUUVFRVpmpmZ6fb399Pk5eVZeXl5Hl5eXj+Ki4tJKysr9bKysvt1dXVZ29vb0lJS UlQikagWHh4+m5KS0iUUCgUEAgEbFRWlc+HChf3/obA7lZSUsFwud0VOTi7a2to6WSQSeSgpKekg EAg9AAAAMBi818jIqPrjx4+OKSkpPlwud+s/JkLKz88v5tOnTxMAAIj5fH60rq4u6+rVq9q3bt3y GBkZIcbGxkrl5ORUenl5FTOZTBiJROrq6OiwCAsLw8nLyyspKyur8ng81N69e09xuVyav79/NovF gpJIpI7Z2dnMjY2Nn25ubp/8/PwcPn36FKKurj45MDCw5uPj8+b69es6bW1toK2trbbq6mq6mpqa WVlZWcHevXsp3d3dpRsbGzcBABCDQCAgNDRU48iRIx7379+v2bVr1zAajV7+66+/6MePH7+yf/9+ 5d+/f8s1NDSIk5KSNgoLC3+BhEJhHwgEIrLZ7IGrV6/+4PP5sJSUFL2mpqZNR0dH4pMnTyacnJw2 NzY2QIcOHfqLy+VuyMnJGX369Omjo6MjncViQeXk5BSHhoYo6+vrOCwWO2htbR0jJyfn1t/f/8DY 2DhYKBRSUlNTkyIiIpJycnLG1tbWGLdv3zZ5/vz5uLm5Oc7V1fX0vn37dj948CBaW1vboK+vr0FR URFGIBBM+Hw+DYlEWlhbWz+5dOmSfGdn52ZOTo6al5fX/MOHDy2VlJT2j4yM3Ll165bK27dvNUdH R6t///49b2dnp/9fqWajrq6u+927d5Lfv38XUiiUJ//88w9ITU2tIjg4OEVPTw83OjrKKigoyLx4 8WL+f/3vytXV1bmkpCTQ27dv3YeHhxtMTEwihELhZzAYrPPixYuvERERxvLy8oYzMzOVa2trm1gs djM7O1vz2rVrJKFQOPn48eOayspKBwwGw7l7965TR0fHYlhYGLqsrIwLBoM5w8PDAI1GQ/X19U00 NTXtv3//foq7u7t+f3//nwMHDnD6+/ulHRwcpBYWFtxCQkJWMzIysMrKylAWi0UvKioaUFRUhEVE RGSKRKIFAACAgoKCd8+ePUMQicQ1Nzc3SxaLJX7w4IEpGAwWvXnz5qFQKPTCYDCiiYkJztmzZ+MO Hz78XFFRUeTu7i6iUqnwmzdvAkQicainpycXAACxn59fsoqKyqi1tfVmVVWVan5+ftba2trvxsbG qsXFRWJsbGyMi4uLT319fd3KysqDjY0NkYaGhh6HwwH+/PkzgMVikQgEArq1tcV0c3M7NjU1VbW1 tQVVVFSUJRAIMggEwjkuLi7jyZMn+4hEYnVnZ+cKEolcVlRUTBYKhdNTU1PtioqKOJFIBJqZmSkw MjLas7S0BMvPz2+fn5/HXLp0SSIUClnKysr+Z8+e/WxpaakQFRUV5OzsnHjv3j27xcVFpRcvXgw/ e/aMu3v37r3Xr19fuHfvnpJEIgEtLy97X7t27e6pU6eQcnJyaAaDsZmQkMCVl5cH8/l8eVtbW1pC QgJpbm7OZXNzs7Crq4vHYDB4fD4fAQAAYG1trbeyssJ++fIlNTEx0VxJSYlPp9MzS0pKlH78+KHO 4/FGmExm8L59+5itra3Q9PR0vqKiIh+FQuFWV1epAoEA3tLSsjIwMED49esXvK+vL5ZCoTxRU1M7 v729/YFOp1OkpaXV6uvru/Pz8w0OHz487O/vH9Hc3DxJJpOhZ8+e/fb69Wu/yMjICiMjI9zPnz+V dXV1RU+fPiXv3bv3J4vFCoyMjKQ0NjZusVgszPT09PTg4KBPXV3dm56eHpmzZ8/GRUREfC4pKXEC bW9vV6BQKC+xWLzs7+//PDk5WTA1NSW1traGdHFxGUhNTWUSiUS+i4sLob6+fu3Jkycv6XR6c1FR 0VcbGxttAwOD+93d3a9ramo2QkJCtDIyMgr19PTgtra23mZmZsLt7W17EAgkc//+/UQbGxstHA7X ikAgDsBgMKScnJxwdHR02dXV9bSZmdkJJpPpSaVS8UeOHLn46NGjJ9HR0dNXr14V0Gi0GSUlJezz 58/HpKSkSObm5jQQCLTt7+//F4fDGVVSUkr4LytNxcXFPRkaGhLu2rWLHx8fj4RAILJbW1sqcnJy h3p7ewvPnj07QSAQENnZ2TY/f/5stLKycjUzM8MGBgZefPfuXXZzc3ONqqoqp7GxkRkdHR3K5/MV wWAwDgAAMAAAwNOnT6+am5sLdXV1iQoKCh5///13JgAAwPv37xc7OzstWlpaZHfs2KEqKysrrKio GJubmyuRlZX1cXR0NIqNjS18//69z6NHj6rv379/XSKRAEwmcwMMBgNtbW3tOjo6g11dXTwcDjeq paWlTCAQ0ENDQ4q6urq78vPzs+FwODgiIuLg4ODg0sePH397e3vvcXV1tXjx4kVLe3v72K1btzCa mpohBw8eTASBQNorKyvmN2/erKiurlbX0NAYPHbsWDGTyazatWvXgImJybhQKNSOi4vrBoFAxK6u rmkVFRVZe3t7r6CgoKHS0lJDCAQiAYPBWvfu3bvx8+dPdwaDoVpVVSV/9erV7r6+voHV1VX+yMjI ru3t7XVzc3NqRUUFjkgkehQWFo4ikUhReHi4gUQi4WdkZDweHx+XuXbtmicAAICcnJwhGAyWwGAw fYFAsLy9vZ2DxWL9AABYg8PhvmKxeLqysrLD2dnZhk6nj9+8eXM5ISGh7+jRo6Tr16+3dXZ2Ijw8 PHSlpKR0u7u7lzgcznRISIgVBoPxKSwstPPy8nqJx+N3U6nU8n///Xfg5cuX0h8/foTp6Oiwnz59 ClpcXJTk5OSoh4eHrwcHBw84OjqS1NXVnbq6utIfPnxoU1BQEGNnZ3dVRUWFKJFItmg0mjg9PV2l vLz8B41G4169ejW8q6urwc/P7xyDwRi5dOlS2/LysqahoSHlxo0b+9BoNAmNRi/V19dP/vz5k3Hq 1ClpGAw2AIVCdeBwOP73798NVlZWhlAoFKGgoLD727dv57W0tGxYLBYUAoHwNjY22n19fe///Pnz k5yc3KS5ufleMpk8HxcXtxYZGam+urqKdnNzg9fU1Azu379fzsTEpDcwMFADBoPVmpmZBSKRyAk0 Gi1ubW2dio2NtbCxsaEdOHBgXFdXdz8SiczGYDBOO3fudGxra8OAv3379jksLCxgaWnp5+LiIlJf X38JDofTNDU1Uenp6Wa+vr4UHo8n9vT0/N/jx49L5ubm3nl6epZHRER8pVAoqMzMzEwNDY3txMRE fwUFBYX/evR6c3NzFYuLixI2mz34zz//vGxpaZmQkpISbm1t7VxbW1uAQqFDbDZ7e2hoaMbd3T04 MjJyHYFAsBYXFysvXbrkHxcXN4JCoXgAAEzy+XwxGo2mqaqqwh0cHKgcDkeeTCbjeTxenZycnM7A wMDF/zLQ9Pz8vGxsbCw1MDBQm8lkSkpKSgAmkwlNS0t7ZWZmFhwTE6OSl5fn5ejo2KelpYVpbW1t qKys7CYSiScgEAi0vb2dgUKhQMPDw3JCoVCfxWLl/99phsfjdZ89e/Y8mUy2/PnzJ2J9ff1ZQUEB 7/Tp0355eXkmy8vLCuXl5bylpSX+/Px8p4eHhyYEAgm7ePGiFg6HU0hNTbXIz89vUlNTs25tbc0D gUBAb2/vz+np6Z9isRgEBoPJTCZzOjo6eoVMJstBIBAAi8VKHThwoDgqKuqYiYmJ2fT0dMPHjx9/ JycnO6DR6Mn6+vqXHR0dwKFDh/g+Pj4zMBhM4ufnh/3169f+L1++4BwdHePPnTundOzYsTwHB4dU KSkpj2/fvhkePXpUbnl5GUyhUOhv377lAACgSiAQeBsbG82JiYn87OzsKQAAAH9//x+BgYEnc3Jy 1p8+fTqMRCJ/7du3jycrKzs1ODjoQKPREIuLi8S7d+9a7Nix4/j8/Pzv4OBg/Xv37qFqa2vHRCIR vK+vz3zXrl20tLS0TjqdLiwoKHgDAoEAZ2fnUiQSaQKFQr0gEAhvfX39/6Qxqt7e3hEjIyOVDAYD Mj4+ThsfH9/569cv1KlTp/aTSCRTY2NjEplM1tna2uKIRKJ1LpcLnpqaStu3b18yCoWSAQAAwOFw 0ltbWxRfX9/Z8vLyrqmpKXRSUpLW58+fnbe3t8GKioodFAqFwefzt2dnZ6ufPn1q9vnzZyMej1ej oKCwIS8vP6+qqgo+ePDgVnp6eouUlNTyixcv3iorK5vv2bPn7N27dz9SKJQmc3NzSH5+PuL27ds2 SUlJJTweb47NZhNevXo1/+jRI/2rV6+u43A49Y2NDQKfzx/S19dX7uvry33w4MGD2traq1AoVC07 O5ve2Ng419TURNXW1iYFBASEi8ViYGpqCn/9+vWv79696w0MDAQUFRXD8/Pzq/r7+8ekpaWFX79+ pd+5c8dg37591pmZmV7a2tp+MjIygrCwMK3R0VHPtLQ0bGZm5u7u7m6GkZGRHZvN3s9msxnt7e0d NBqtFqylpUXKz8+/bm9vD9/e3tb68OHDMo1Gm7x8+TK0ra2NuLm5acPn88EFBQXDfX19T3k8HhiB QCwPDw8/aWhoGPXw8IBev359+s+fP78ZDMYSgUDARkZGjjo4OLiCwWBpJBKp6ObmZvDnz5/9gYGB UE1NTZXp6WkCBAIRv3v37uWJEyfCampqCo8cOSL377//Dru5uU1PTEwwjh8/PvD69WtvAACAnTt3 qi8uLjp2dHRoqqiomIeEhEijUCgDeXn543A4fJ+cnJzr5ubmIx6PN52cnCyOj49Xn5mZkbx//359 7969Hpubm4ulpaUCsVi8Ym5uroZEIh3OnDmzZWlpefXu3bu42traeR0dnfF9+/bVa2pqAmg0WtTc 3IxAoVDFVlZWXf/pz1/b2toWTU1N/VBSUtL19/enysnJXfjw4cMaBoMRHzt2bN3JyWnA0NAQAgAA IBAIzCYnJ4etrKzWkUjkend3dyOdTucfPHjQW0NDg1dfX49PSEh4JxaLhSAQCPkfUHP17t27+4RC 4fmQkBCrw4cPO6uqqqpXV1e/mp+fH7WwsJCw2eyGv/76y3tkZGTT3t7e5ffv35KNjY3fLi4uuMrK Sm1NTc1iS0tL9+Tk5EJFRUU3GAxmQSAQYikUSkpzc/MFFApV5+HhseLu7u7c398/t3fv3rd2dnYA k8mE6enp7ftPTXbhzZs3yq2trcNKSkrr6enpm/fu3dOrqqoSJScnE9BoNM3MzCxwfHwcY21tvT49 PU1pamoSX758udrGxuY4kUgUAgAAGhkZ6aioqBgOCQlp9Pb2du/q6sI2NDRwDh06dFUkEoFqa2sd CwsLr+NwOHcIBOKRlpZmOT09/RAMBmMBAAD09fUJlZWVDz58+IApKSkpvHjxIru/v5936NCh40Kh EA0CgeCZmZmdhw4digkPD59RV1d3GRoamnJ0dPzJ5/NbUSiUCgAAwMGDB0eJRCJpcHCwsa6ubujW rVtx7e3tNDgcDnr9+nXAp0+fqGw2G/v69Wvx6upqr0AggPX391vDYDDs5OSknLa29sDff/+NEwqF 9mfPnn2fk5PT/OTJk3f79u3jJicnS8Ri8QgajXaanJzcTkpKskUgEOKNjY3SV69eqfj4+IxcuXKF WFtbOwsGgx/39/dPj4yMcPl8vntSUtL1V69e9RkZGfFgMJiwtLSUMDo6yvHw8OAVFRWl+/v779m/ f38kGAw2mJ2dxRkYGCQGBwenUKlUvLKy8l/S0tIwgUAgbG1thQwODnb9+vUrhEgkVmOx2EtMJrPv 9evXfSgUivHkyZPk06dPH+BwOPMWFhbHoVCoA5vNhojFYhCIQCAc+PLli//KykqXtrY2y8DAwC0o KKitrKwsbnFxseDBgwfgM2fOyMrJyREsLCx4/f39zJGREZ6BgYG+WCzeXFpaasvIyJjY2toy9fDw mHv79u32vXv3aFgs1g0AAKCxsZHi5+fnWVFRQdXR0RGTSCQjPB5P8/X1nW5vbw8CgUDS5eXljwUC AdrExES9sLCw9PXr19qjo6PHl5aWnqemphq/efNG38TE5FNSUpJjbm7u1KNHj+aHh4d5MjIy8qam prHd3d15i4uLi5aWllaOjo4IEonEyM3N3ZCRkdmlq6ubODw8fPzTp08/3d3d99y8eZMRHh7eGxcX F/TmzZuSW7duWZaWlrbNzMwoyMjIENvb21ufPHni2dLScuLr169HQkNDP6BQqNaxsbFpOp0+YGxs fE0sFi9cv3692dvbG5+YmDhUXV0dCoVCAQAAgM3NzQ5bW1tWR0eH2vT09OTevXu1hoaGBENDQxxz c/Otnp4eoZmZmVNISEjtw4cPZ6Kjo/X19fVFly5d4uzdu1dqYmLiwvr6ev6TJ09+xcfH96Snp9vc uHEjk8Ph1CYmJv7y9fVFt7a2rr99+1a9qalJMz09vfLgwYNqXC5X0tbWpqynp4eora0dd3JyWvT2 9vabnJwcNDAw2A2FQi3Kysp8nZycgtPS0gTFxcU9IBBIHBwcDKurq9vOzc31/fz588zExER9REQE MT4+Xunff/+18fPzuwAGg41v3Ljh6OzsvNrS0iIHg8Gm+Xy+cXBwsA8AAMDq6mrOxsYG6evXrzW3 bt1K5fP5W1NTU6VisVhiYmJyemlpqQgEApUzmUyinp7eOTU1tZ6RkREFGAwmAQBA/PDhw8KAgADr paUlAAKBjHZ3d5OzsrIw8fHxnK9fv9ZdvHhRd2FhodbCwsJeX19/PwQCQQEAIHfr1q0jfn5+9j09 Pd3y8vIgMzMzbRUVlb/AYDBKIpFwZ2ZmyjAYDF5OTs6+uLi4/cWLF6CysjIZaWlpmYWFhdH8/Pyy 3t5eBQsLC3ZwcHBQX1/f+uTkZO379++NwsLCNsvLy1W+ffsmjI6OprDZbMDGxgYUHx9vcuPGjV8r KytaysrK1Wg0WsPHx0fF0tLyydDQUKampianr6+vycbG5haPx5uGw+Gqo6Ojqe/fv3eKjY2lfPz4 sUJKSspFIBBICgoKxslksuPU1NT2+/fvxd7e3moyMjKolpYWbGRkZGtBQcFfu3btau7r61N+8+ZN T0FBAfz8+fPA8vIyKzc3d6OhocEhMDBwRUVFBcTn8yGJiYnqWCz2PQKBmOTxeITY2FjLu3fvgkgk ErWtrU17c3NzY25uTrmxsZF56tQpxMOHD8fA/f39Hu/fvx83MzMz7+3tlQkJCem2t7cf0dDQaJOX l99x5MgRBQKBwCcQCA6lpaWVSCQSqaysLA+FQiV4PF6EQCC0JyYmzCAQCKi2tpbs4uIyNTc3t29o aEiaTCbvyszM9NbQ0DgUHBy8EBsbq6SgoICUkpISMxgM1Tdv3ny+efPm32w2G8rn8/kqKipIQ0ND ZlNT066urq5ONpvNUFNTm66rq1sfGBgIh0AgEm1t7S0oFBq4a9euEg6HAwYAYH1sbGxmYmICikKh MPb29qM8Hg9VWlqqoquru11XVxc4NTW1pqWlJf3ly5exc+fOgXk8nkBPT68vLy9PY8eOHXMYDCbR zMwskclkIpSVlT3T0tKY0dHRsb6+vlbKysoPxWIxxs7ObkpFRcWDxWIVXbx4sfHq1atdzs7OVh4e HnJwOJzEYrE6qFRq0cLCAtLR0bHh8uXLuREREVyBQDBpZ2e3RiQS4QAA7NTR0SH09vY2Xr9+vYpE IjlhsVhmZ2dnHQAAwI8fPwTb29sDVCoVQSaT0Xg8/uuJEydsampqInJycj7Hx8fLy8vLy1CpVOTL ly8ZJSUlNf+xEOK2tjb5CxcuRI2NjfFSU1Nv7N27983q6urY8vLyNhgMRnK53PzOzs7ApaUlxLVr 17xu3LihlJKSoqKgoIBfXFy0zMjIaJCRkaHExsYeunHjBunly5ei0dHRP5mZmYGvXr3ysre3B4yN jRX5fP6SrKwswGQyhY2NjVXNzc0VPB4PKxKJOu7cuZMKBoOB9fX1zpWVFSGTyYTOzs6WNjc3b1pa WtpFR0cvp6en56+trSmEhYWNZmVlFTMYjDYtLa0ZEonEuHTp0oapqamckpJSR1NTk5DL5fY8ePAA vLm5yTAxMdEjkUiaEomEIRaLOWKxGECj0UJ7e3v7/fv3x5qamjqoqKgE29jY3CEQCNW2trYp6urq AVVVVV82Njbmg4ODrefn5+fGxsbauFwu2sjIaEhRUdHjxYsXsseOHQsSiUTCR48eSdzc3OycnZ2F hoaGmwcPHhT9/PmTB4PBtHA4HOvbt2/SfX19v4OCgjRTU1P1L1y4kKiiooKTlpaea2lpcZmenu53 dXWtlpWVNQcAgNHf31+TnJxc//HjR3VfX9+53bt3YxcXF4MJBAILAADAyMjI6cqVK8Ti4mKVjx8/ 1vP5fJnGxka0g4NDUX19PXn//v0lZ8+eXY2IiJjNzs6WDQsLQ6LR6AUikYj9+vWr6crKyp/u7m6E kZHRupqaGjI7O7s5JCRks7e31/zEiRPb/f39VRKJhNPU1OQvKyuricVi5aampv48fPjQz8/PTzMy MtIHTKFQkDo6OvxTp07R7ezsVIuLi09VV1cbUKlUCykpKXUAADZ0dHRm+/v7s0xNTa9IJBIQiUSS R6FQEKFQCJKRkcF9//7dEIVCzfb19en9/Pnzop+fn85/i7Ha169fLwMAII6Pj+9vaWkZ43K53dXV 1f0tLS1zaWlpkr6+vqXh4WGerq7uWklJycDo6ChOSkpKZGBgoJaSkrJzdHSUAIfD5y0sLLpv3brF VFNTs5dIJAAAAEBxcTHZwsJi6c+fPzobGxsEAoEQbv7/aDr3f6b/94+/drTNNrY5jDmb8ymnnA85 5VA5RCKVJB30dihKfHSidKJSIh2UilRICjmFHBOS83kOM+eNzcaO31/6/gfP2/OH5/O6Xdf9cb+M jVWio6Nn9u/fr9HZ2YlRVFS0U1BQwJuYmOw8duwYikajya6srMDn5ua0wsPDO2g02sLg4OBBgUCw 3tfX193f3w8TExMTPXv2LDMvL++FjIwMT0dHp05aWlpST0+v++vXrxVpaWmLaNRigS8AACAASURB VDT6v8rKyvNUKpX68ePHdBsbG7SSktJNGo3283//+58clUodJBAI9Ddv3ogfPHiwRygUbo2MjFRT qdTZr1+/jmloaBwjk8mrhYWFdi9evFB48uSJwurqKqeysrINCoWOHz169NTbt28z19fXN5hMpiWT ydT8+PEjWEJCYurixYu827dvYzw9PcnGxsayenp6/zMyMqI/f/48618VkvcP1iEaGhoqCYVCAIFA uDKZTLi5ublKZ2fn5/LycmZERITJvn37DOfm5sirq6vEkpIS2StXrvQXFRVZKikpeXt4eOxTU1Mj Wltbm/79+5c3ODgor6OjQ//w4QMxIyODd/r0aVZOTk5zdnZ2W11dnRwAAHI8Hm9ze3sb1NnZOaut rQ3U1dU1iYuLz168eLEKCoUKJycnBQMDAxWXLl2imZmZEfPy8ubhcLgoMzNzOTEx8efNmzfpHR0d 8mJiYpqNjY06NTU1FnJychgqlSpZWlra8fPnzxcAAEiAwWB0XFzcl5WVFQ6TyeRWVlYOFhQUPKiq qnJTVFTsaG9vvwgAQL2vr2+AjIyMNovFmh4eHjbR19cPaG9vL1NQUJil0+nf2Gy2EgAAWzAYbNTB wWFYV1c3DIfDdW9vb6u9f/9+5eHDh3xPT8/NO3fu7NXV1VXa3NzcXlpaQoDBYCoWi/2LwWDgubm5 O0gkks/29rbxgQMHPNXV1b1evnz5XF5e3u3GjRuHg4ODFRAIBKqjo4MeHx+/JicnpyAlJaWQlZVl qK2tTeTz+fi4uLhINBrNDgwMrCMQCAQUCjUbHh7ea21tvXb+/PkNS0vLVTQaPT48PIz99OkTeGho CDs3N7czPj4eyMnJYXO53K1Lly7t+P79+/mBgQF4Xl4e8PTp05OBgYF/dXR0Apqamiizs7Myp06d ivX19S3Lycnhp6amNoNlZGRofn5+iEOHDk1YWVlpAgDQl5ubq7G9vb0wMzPTERwcTHV3d2/T19d3 FwqFABKJdFNRUalsbm6uXVxcHGKz2Rh9ff2N3bt3s5OSkl7euHFj1cbGJiMqKmokODjYHACAkcLC wrxdu3btw2KxgTt37gQPDg7qk8nkPZ6engNzc3M+SUlJ5/T19S/29/eLm5mZmUChUDyXywXl5eXp REREMDY2NqDR0dGr+vr6yGPHjmFCQkIm9+7dG3316lWFrq4u7fz8fH0lJSWDnz9/5mIwGPyuXbsk pKWldwiFwiZnZ+dnTk5OQx4eHjVXrlxpzsnJET548MCvqamJTiKRrEJCQiySk5P3MRiMYR8fnwPl 5eWlGAzGpKurK+/Tp08xw8PDiMzMTJSysvK6t7f3yu7du8NPnDhB6unpGVdVVaUHBQWNXb161cDc 3Jz95MmTl319fdvXr1/vGhkZOctgMAj37t1jh4WF+eTk5LQqKiqqKSgoaKJQKIGYmJjc7OwsoKmp OW9tbX0Ij8ezzc3Nj/j4+DgpKirOQCAQuLq6uqScnFzbnz9/puvq6mqUlJSYSCRSUVJSkvTkyZNR NBotam1tRf5ThO3+/Pnzr5SUFMXU1NTZ1tbWDwwGY7Cjo2Oay+UuDg4Oxvv6+lLpdLpRbW1td25u bsafP38k0tLSRvr7+ye+ffs2amFhQTlx4gTIy8srKz09/S6Xy2XJysraNzU1de3bt8+fRCLpGBgY OEOhULSkpCRNS0urPzExUf7KlSuh6urqskKhcJRCoXQikUjQjh07lG7evNl36NAh58nJyQljY2Mv W1vbHTdv3rT6/PnzRn19/err16/7JSQkuO7u7nQtLS2knp4eMzQ0VAkEAq1CoVARm80GIRAISk9P zyYAAICTkxNURUWFNTExUenj4/OARqM9trKyGn716tWDpaUlBIVCwV27dm0gOTl5R3x8/AsQCKTz 8eNH0IcPHx5VVFTUAQCgMDw8/EpVVVXx1q1b5q9evQL6+vowDx8+XOVwOPTg4GBmUFBQkaKioo+N jc3a48ePKUZGRlNBQUEnJCQkJL28vMZUVFTC6HQ698uXL6yzZ89Wx8fHm588eXIEi8XyyWRyPgwG EzAYjILw8PC7ioqKOxcWFgp0dXWJenp6Bnv37p2XkpLiDg4ObgUEBKhkZ2f/7e7ubuzs7KzOzMzs +dfv0mIymXQAAAiRkZFUNpsN3djYYOno6MzR6XSlzc1N6YKCAnEdHR2J/Pz8GTwev/bmzRsHWVlZ iJ6e3oqRkdGQvr6+C4PBuDwwMNBVXl6et76+3rZnzx4PLS0t1j+XgQgCgaykpaVpgTIzM5NlZWU5 Li4ukLW1NSKZTI6Znp4+LC4uvo/NZm9MTU2hh4eHS1dXV80SEhLcAQAgDgwM5GIwGP7Pnz+l0Gj0 vKOjoxUAAOz8/Pzvk5OTGpcuXTL4/PnzQEhIiD6Xy+XBYDC4vr5+w/j4+GEYDKZlZGSUMT8/rx0U FDShoaGx8u+CmFJSUm5Hjx5NMzc3lzYwMFB4+PAhZ8eOHVJLS0tCEonU/fv3b87a2prUwMAAeG1t 7bilpeXz58+fQ4aHh7EcDkfcyMhIRlJSkk+n05eIRCI5Ojq6vru7m9DY2KhqZWWl+O3bN35KSsrS mTNnnmVkZHh//vw5zs7OLkEoFALh4eFLe/futcXj8R5cLnfp58+fg66urscHBwdfw+HwzdXVVYGO jo6Subk5OywsbKG+vn6+oqLihJ+f35XR0VGv3t5ei9DQ0E8rKyu8nJyczqioKJtv375JRURELJuY mNA6Ojqm1NXVia9fv54nk8mit2/fxiCRSCGLxQJTKJTV0tLSPHd3dzNDQ0OkpKRkMgAA7MnJySdr a2swJpPZU1dXB+3s7NyKiIggd3d3S4PB4HYTExOCtbX1/r6+vkIsFovKysqaPHDgwH4+n9+oqqpq RaFQxhITE/sKCwtNUSiUdEdHx1ZDQ4NQSUmpoqury7a0tDSFTqd/53K5I7dv3/587tw5/+rq6i13 d/fvDAYjfMeOHZIfP35c8PT03CkSiVZKS0t/29jYLMTHx2MAAOjNy8s7+/bt26HQ0FAdLBbLsbKy elBcXHwoLCyMl5+fTxYTE0OBQCA0CAQCXr58WdXQ0IDR0tISZWZmMv81PqFsNhsiLy+/DQAAUFBQ kNPe3u715MkTfSQSiaPRaNnq6uoP79+//8DCwkLV2NgYGB8fr5+envaCQqFCBwcHWF9f3+uMjIwd hoaGYAAAAAgEohkeHo729PR8YmpqGnz//n0HJyen9wAAAJaWltNXrlzxtLOzq7h06ZI0iUSSaGtr o0VFRZ1AIBCw5ubmD1ZWVm5iYmI7AQAAAgMDP8TFxdFramoWwsPDjeBwuOj169ddP3780Ozr66Mu LS3tbG9v/7t371753t5eBRQKJdzc3OwNDAzciImJ2XJ1dY3c3NwsqaqqmrWxsRnu6OgQlZeXy8jL y2v6+PhM9/b2kmEw2Py/c0M/fvyoGRQU9GdoaIj3+fNnpT9//lxcW1tLDg0NpVIoFPWWlhaeQCDw RKPRyt++fWs6derUfEVFBUxfX98VBoOJioqKejkcTv3GxoZhZGSk67/J2Po/EvJ9V1eXclJS0uGJ iYmqCxcujB8/frwbLCcnt6aiorIiEon0VlZW5lZXV891dnZKS0lJBSgpKR1PT0/PzcrKwl68eNFd IBAgpqen23R0dPzl5OR2zc7ObtnZ2RnxeDxmWlpauUAgACYnJ+dDQkL6PD09JU+ePFnDYrEgIpFo Oz8/XxYGg2n5+fm93bNnj1BMTGy5qKgIdufOHcz379/LiERiIggEwqLR6O2oqKiof6jj5tTU1J9H jx5p9Pb2buHxeCVPT092UlKSqrW19fOwsDC14eFhLIvFQs7OziIDAgJYX758YROJRBcEAiEUiUTQ kpISTEhIyPebN29+MDIyMhITE2sDAABgMpmzvb29FmVlZXsuXLggvbW1xd/Y2CCz2exBMBgspFKp tZOTk5lMJvNrQkKCUE5Obruvr288NTV1TE1NjSkhIaERFBSUVlZWVtjX17fT39//VWxsLNXV1VVq ampKsGvXLhCfz9cPCwv7df78+X4DA4Ndq6urqKGhoZj//e9/RggEQjg/P7/k6ura5OXltU4mk728 vb1VkEikMgAA7NXV1Uw1NbU4Op2+TSaTVRgMBk5aWhr9+PFj0cePH0dHRkaIjo6OWt3d3e/n5uYs jh49aqmqqupgb28Pc3JyckGhULCioiKp4uLiUCQSaTA0NMQMDg4+uX//fmkPD4/dYWFhCzIyMkVo NFpYVVW1EBER4S8nJ6eqrKy8eenSJTMoFCr8+vXrrKGhoWBkZORGRETEL2tr61UjIyMFBQWFIhMT E6Pl5eWloKAg3Y6Ojqnl5WU2iURiAACw0dfXt2Jvb5+bnp5efvPmzezHjx8Xw2AwelBQ0N/Lly+H zc3NSc/OzmJMTU3NTpw40WpnZ4cgkUgnPT09j87Pz+P9/PxW0Gi0DQaDER8cHKwyNjYWQiAQ0dbW FltKSsrSxsZmNSEhAfzt2zeugYHBLkdHRwqBQFA+ffo0yMfHZwaHw5ETEhI0bGxsOGw2e7qhocFu fX1dSlVVFfH58+equrq6PdLS0pJ2dnbNdXV1cDQabQAGgwn29vYnHz9+/LywsPBRXV1dYkZGBqW7 uxvn7e0tDQaDxW7fvt1KoVD0L1261K+trS0/PDyMwOFwhMrKSiyfz9/s7Oxsnp6epoPBYODcuXOo hISE42w2m2tkZKTf1dVF3tjY8M7JyTkVHx/PNjY2PsJgMMTa29sV8/PzDc+cOUO7d+8ed9euXbay srJbRkZGUAAA4BEREcgTJ06MNDU1IWZnZ5GXL1/u7O3tfWpiYiJXX1+vpaqqqg2DwZSdnZ1zDQwM BIGBgQd+//4tOTAw8B4CgegLBAImHA632tzchEIgEODBgwc5+fn5YwsLCysMBkMDVFZW5vfhwwd1 Y2PjZTgc3jMzMxM1PT3dwGQykY8ePTLCYrHbPB6PKCcnZyAUCsWGh4eLNTQ02AKBwJrD4dChUGgj EonU+fXrlyA3N/dXXV2d93///ffc2NjYmEqlovbu3WszMTHR9+TJk4ns7GyH4ODgwvv371v19PRI GhgYrCspKfnAYDDR0tJS19DQ0IJQKARcXFzOLywslMDhcCiVSq2Ul5eHCQQC1efPn2+BQCDQ/Py8 wNzcHDQ/Py/68+cPH4FAbBKJRGJ+fj6ezWarVlZW/rCwsDizsbExg8ViFX18fO4XFBSYxcXFdT95 8iTmn1TjGggEAsfHx8uYmJgwSCRSelpaWqqLi8uKvLz87ra2tk9LS0vDOBxOg81ms4VCoYyzs7PW w4cPxc+fP/+XyWSui4uLt1dXV18QExObPnr06NWTJ09mJyUlQbe3t0EaGhrhra2tcaurq1saGhqb zs7OiPb2dsbk5KTaxsYGKzMzUyUkJISdkJCA9vHxYVtaWnb6+fkdw2Awu4RCIf/AgQOZAQEBs1Ao VHfPnj3U9fX1vpCQEM8PHz6wt7e3NXx8fApkZGQYPT09ljMzMzf/4a5FBAKBQaPRpKFQqAgCgSCj o6OHr1+/rszlcvkGBgZe/+bs6FevXmULBAIgNDTUjMViDYHBYKCrqys7IiLiMBqNXlVRUREbHx9f 6ejo8FtfX39QUlJCwGKxI0KhUHZra4uyf//+ywQCQZfBYPy5du3aj3PnzjnJy8vjf/78+RGPxzep qak9sLGxqfP09ISmpKQEtbW1/c/Ozq7wH7C1gcfjr+7bt8+gqakJDoVCRerq6v2VlZWRWlpavzMz M1csLCzU19bWatlstrK+vr6vubn5sydPnqxraWkpcrlcrrGx8fbKyop3bm7uVQMDA6Kbm9suBweH 7OLi4pqtra0RgUBAp1AoZXp6ehfz8/OjiESi1cLCQpuNjY0hm81eAYPBgJKS0u5/7j1xGAwmBwCA 8P79+0murq47paSkeP39/WOOjo77Nzc3N3bu3MkdGhoi4fH4haqqqlsVFRVmqampmVQq9TWBQMDQ aDS2srKy9alTpy6dP39+x+3bt7vT09PPAwDwqr+/38DFxWXu3bt3M7t379ZBoVDu9+7dK01JSdnR 2dlJNzIyEmtubv6qqal5EgaDiXg8HiQlJeVnd3e3MCkpadDOzu5CRkZGXXBwsPDu3bvwY8eOsZeW ljT7+/sH4uPjk5eXlwvGxsbws7OzfWAwGFlbWzurrq6OPHbsGJNAIET++PHjx+LiIn3v3r2+GAzG mEqlht26dWvLzs6OCCksLBxMT08fio+PN3nz5o0JFosFsFgsRllZeUlPT0/Gzc1NMTIyEti9e3dT aGioOYFAkGMymW0YDCaQy+UK0Gi0Y3x8/CstLS3jN2/eABUVFRgFBYUNEomkBQKB5mg02nRUVNTM tWvX9JBI5Iyvr6/r169f59TV1WHW1tY2Fy9eRM7NzdXIyMhoamhoBJWWlp41MDDAikSiUQcHh+ZH jx6F+Pr6Tl2+fFnx1KlTqoaGhp0VFRVyYWFh3TIyMmwVFZXx2dlZKIPBIGRnZ/Obm5tXvL29WeLi 4mxJSUlXT0/PGx8/fqTz+fw/fn5+1xgMxncIBMI8duyYe35+fntqaqqjvLz837i4uOWpqSk6h8MZ W1paGre0tHRdW1ub2b179x4oFDpZUFBgsHPnTphQKFz99OnTCoFAmH/w4AHm2rVrp01NTfcDAACo qqo2NzQ0TG9vb/Pm5uZ+rK+vb/T39wvu37+/MycnR0ZLS0uJQCAgoVAoEQwGL3A4HN7Xr1+9Xr16 haDRaN0yMjI7JCUlVWk0WrO+vj4kPT1ddPHiRYne3t5OAoGgFxEREdHf3z+qqal5TFVVlY1GoyHN zc0T+fn5/WFhYVAUCjXY0dGxiEAgKIqKikQkEsk2NTXFQqHQGSaTiYNCodWqqqoLWlpaBVgsNk9J SUkHh8NJsNnsLTQaTSosLJx7+/atdHFx8ZaDg8MfKSkpfHx8POTChQthdDq9EYFAmGVnZ/dnZGS8 gUAgc5ubm2tYLBZwcnICLS0tbeHx+MWFhQVWamoqFo1GT379+lXr+/fvcCqVWnL69OnTbDabdv36 9WQ2m70kLy+/lJ+fv7x7924pExOT7/Pz84TNzc1Rb29vaEhIiFJeXt5fcXFxaTMzM8Ls7Gx3eHg4 ydXVlXju3DmZ3bt3Q549e7be2trKg8Fg2KSkpI67d+9SGhsbJZ4+fVq8uroKJRKJ3eLi4pJ///5t ZLFYxvr6+hvW1tY279+/LzIzMwvA4/HKfD5/CwaD8aampgZlZGTshELhsImJieTi4uLM0tJSV2lp qcz29nZDbm7ueFBQ0HxRUVFFQkLCtpSUlJyvr2/k8PBwjYmJiU5oaKjwx48fC0ZGRuZgMJhRW1vL 8vf3d7px48a4o6PjxpkzZ7bS0tKoIpEIrKmpKQeDwUzt7OxCpqamPjQ2NsI6OztNJCQkRFNTUywl JaUjCARCY/fu3Rxvb2+18+fPS2tra48aGBjMbGxscH7+/LmIx+NJXC6XFxgYqLqxsVEMh8ONVVVV 5ZSVlQXKysqahYWFPKFQSLOyslpDo9FG6urqQSwWqyssLGyroaGh1tHR0dzf39/08uXLf8CVlZX/ g0KhS1paWgG2trbz0tLSVC6X2zM7O7vz+vXriFevXjExGIyNsbHxuFAoZIhEIiESiRSAwWDZffv2 DZSWlp60s7OTX1lZ4b17904Vh8Nt//r1i1hYWNgQGxtrUVBQUNXd3f0/FovVvL29XQsAACAvL08w MzOz2djYQDEYjPaamhoMjUbra21tvfPnzx+b1tbWPElJSdXm5maPW7dufX/69Cnp/v37shoaGm8g EAjiwoULfTweD//gwQMZDAZDAAAA8PPzm6msrFxrb28P6O7uRi4uLm4ODw+/qKysTFtfX9f59euX pEgk2uRwOGAOhzMKBoMBX19fRHBw8CKXy7WsqqoaCAoKMuVyuUhnZ2c/Pp9P2blz58FTp04txcXF WXh6erYDAADY2dlhcDicYnt7O727u9uYwWC8rK6uvtXR0XFbX18/FoFAiEQi0RqVSkXV19dT4uPj Q/bt27dlbm6uJxKJ9J88efJcW1vbsre3V7h//37h6OjoezAYTBcTE3OSkJCY0dHR+YxGo7f9/f1b IyIiFsTExKyoVKoyk8lcycvLKzAwMJAVCARTNjY2qLm5OZilpaVYRETESm5u7mMymSxpamqqq66u fprBYOBhMNghMpkcRCAQzCIjIzkEAsGqpqYGiImJQVtYWDyfmZlp/beZJoBAICASEhL+h0AgvCoq KrBVVVWca9euqfT19dkDAEAQExNz0dTUHD958qTK0NBQOYvFYs3Pzw8dPHjw7p8/f7h4PB7c29v7 lEwmaxw9elTb2dnZ9ffv35K9vb1oWVlZheHhYQoAAIOxsbG79PX1N1JSUm6UlZXJHj16lCUuLu5S XV19UlJSUu5///sf1t7efrqkpET62LFjdSkpKUMCgWD93r173aWlpZR/bIne169fl+Fw+E8ajdbw /fv33bdv35bb2NhAq6urs729vREkEkkJgUAIWlpaaFFRUXJ0Ol2FQqHkLS4uKvz48aMGjUarCQQC KAwGE0cgEA1Xrly5HB8f//n3799NHA5ngUKhKNBoNMmrV68G/P37V+vZs2dm0dHRdlgsFuXv7+8s FAqnSCTS9uLi4ioIBBIhkUg+AABbCQkJWwQCAWphYeGUnp5OO3/+PD8lJaX5zJkzq87Ozi5oNPoy BALRjY6OjltdXUV7e3sz0tLSOv78+dNgaGjoOTs7GwcAAFBcXNwXHBw8NjExAduxY4fm8+fPcV5e Xjv7+/sRbDa7LC0tbW15eRmGw+F48/PzzTQa7UNtbe28i4vL9P79++FxcXHGCgoKb7hc7vCPHz8K CwoK0Ddv3lzQ0NAol5GR0dTU1Bzy8fGhgFJTU88mJSU9WlhYKNm/f//rS5cuKTk6OrrV1tbWoNFo ZUlJSZympiYZBoPxNjY2Gn19fSnnzp1befTokX1jY2MCAABAaWlpjJaWFhMEAln39vY2urm5mW1s bEAGBga+uru73xUKhbPPnj0r8PPz89fX1x8cGxtjGxgYsJqamnTBYLCIz+f35+Xlbd+4cSNlcXHx vaysbPjFixffP3v2TG1mZqbM3t6er6KiIlJRUYE5OjpSWSyWvJiYGHTPnj3etbW1DQMDA0w8Hq8M AoFmJSUlEd+/f9/EYrEgd3d344qKit6MjIxbBQUFRw8cOHCBQqH81dPTWxsdHWWgUCgtcXHxJg6H 40EgEGTs7e27ORwO6NatW+yVlRWqqqoqdXNzk0AgEAgpKSlyfn5+/QEBATG7du0qiYiIoM7MzPxM SkrqHBgYCOFwOA54PJ6goqKyxePxfsFgMHs+ny+Ew+H+AAAA7e3tyebm5s5+fn4dAAAAHz58cJ+f n/+qqKgYwmaza9Bo9O4bN24Uubm5EUZHR78cOHDgCgQCYXK5XGxra2uuk5OTP5/PB0GhULBQKMTW 1dX1urq6eohEopWVlZUOd3f3qaamJu2ZmRmGnp7ewcnJyQ///fcfu7S0dJ+dnV1WS0vLSZFIxAOB QDA2m70EgUBAsbGxX3JycpLAYDAKAADgy5cvH/X19ZkoFEqFz+eDFBQU7NTU1KoDAgLWPDw80OLi 4h8ePXok8ezZs4jv37+X7Nu3L6mkpOSmm5sbisViyb1+/XqRz+cLjx8/bjQ6OjpAJpP1Y2Njr+Xm 5nqKi4v7r6ys1OBwOKn6+vq6oqIi3dHRUV5lZaU+CoUy+PLlS5atra19YmLiHIlEmtXW1t4qLi5W O3/+fB+FQtkZEREh+89yS9+9e7c8Ho+XRSKRxPX19RfV1dUvHBwcbs/Pz896eHjII5FIHg6HG7x8 +bKMQCCY0NPTc19aWqquq6v7vrKyEvHo0SNPkUgEOnDgwPvMzEycoqJizP/j3gKB4M+jR49uaWtr 62pra+vIyMgQ4XA4gc/ng4qKitomJib4tra2NGlp6V9kMvnI3Nwcl0ajTWppaRkWFRW1zM/PYz59 +mRcX18/T6VSaTk5ObRnz54duHXrVub/JxPX1tb6Kioq5CYmJjq6u7sxi4uLct+/f1/c2NhY0dXV TdPW1s4cGhoCqaqqLl28eFE2MjLydnNz8yErK6tbNjY2OXNzczoIBOLP79+/dQcHB9HGxsZEkUg0 b25uzu/t7d2tra1dUldXx8ZgMGg8Hn/iyZMn58+ePevW09NTZ2RklLm+vl4mISGxl8FgdIBYLFbW 2NiYICUlhWFtbT0ZGBg409raalNWVradmJiIkZaWdhgaGhq8cuXKQmpqKkJCQoKnrq6uIBKJFNls Njg5OTns6tWru+7cuaNvY2ODtbS0XKuvr1/mcrnjtra2/jQa7Y+4uLicjIwMQUZGRmF4eLj9Xylk iEajXR8+fBgiKyvLsbGxsRYXF0dJSkoGsVisFxUVFVttbW0kOBz+d2RkBPSPJwCIROKHfx3ao7dv 394JBoOBxcVFeHNzM6e0tLQIAADg4sWL1lgsloTFYpFGRkYnZWRkXu7bt2+6vr4eNjo66ra9vT0F g8EMf/36Vejq6ur7/PnzirGxsa2LFy/6enh4/G5ra6M2NjZuz87O9gMAoAoCgSggEEjF19fX+cSJ E6MmJiZQLBY7d/jw4YypqamXAAAAdXV1FHV1dZXBwcHNkydPbkKh0EMsFqu7oaGhVltbW/HVq1fb SUlJVisrKxwYDCYMDg6eoNFoyjU1NdtjY2PVGhoabvLy8nZgMFhRIBD0lJeXP9+zZ88pKBRqcPHi xYBr166dBYPBYDgcTrx8+fJhZ2dnGzs7u4sAAAiysrLOOjo6qnp5eemNjY2ZjYyMvDQ0NLw/PDyc q62tHTE8PPxVVlaWNzExsV5eXi4UCASAhYXFIo1Gm4+IiLgtFArXwWCwu88EKwAAIABJREFUnKam 5ilxcfEZDAaz2dTUVDk8PPyOx+PJ+vj4CGdmZrRnZmaquVyuxKdPn9ZDQkKmOzo6oGpqaqZDQ0P1 s7OzK/Ly8rZNTU3Q/Px89PHjx788fPjwallZ2ePNzU3JgwcPxq6trX0QCAT4rq6uKmNjY8OYmBhu YWHhyX804RCdTn9tb2/vl5eXl1VUVKRtaGhY5unpeQICgaC4XO4WmUzWnZubG8NisSRJSUkNGAwm x+fzZ2JjY/Pi4uJc6urqasfGxiRWV1cFu3btYiQkJMyFh4erJCQkONFotKmrV68SRCLRyOvXr+8C AABERUXdtLe3n/X398/6/7DX1atX//Pw8JA1Njbev2fPnorPnz/vvHjx4qcjR46IbW9vk5ubm7eC goJ+nThxQvP9+/eOampqooiIiPHQ0FCcrq6uX3Z29isGgyGEw+Hs1tbWttevXx+OiYn5kJGRYeHm 5lZmYmIifePGDb3y8vJNCASyicPhtnNyckYSExPxERERCDs7O3NTU9MqKBSq6uvre2xiYmI4ODh4 49q1a88+f/6878KFCxUKCgpaOjo6nJ07dy5TKBSlxsbGgP3797dOTk5a19TU/H337t3vmpoa4ytX ruBqamoWMBjM9oEDBwA1NbVdbW1t3RoaGl8JBMKzmzdvvgOtr6/fEggEZkwm846CgkLq1tYWOCEh IU9eXp6pqKiIio+Pt/q3rgpeX18P+/3794SEhISJsrKykEajjcTFxfkHBQX1GhoajtbW1oozGAxC cXGxdHt7+y9DQ0NTNTU1tQ8fPvT903vBvL29pfT09Jyrq6uf6enpkRgMBmV+fl5sfX2d5+/vHzIw MHBfT08vTSgU0ng8HiU2Njaprq7uoLW1dau8vLyBsbFxq7+/f/Ha2loDm83uRyKRiM7OzvlXr15h y8rKlEkkUtGTJ09Ijo6OPnA43K6lpeVNenr6MAaDod29ezfI2dm5v7W1VV4gEID+vcaLGxsbEKFQ CHrz5s2ktLS0LAAAgKKiYp+pqSnqXx78gIKCglZ6evrrwMBAXG1t7bqCggJraGhIgs1mc69du+ZU U1MzxOfztyUkJAASicRKTk7GR0VFyZw/f35VJBL1ycjIYF69enXl/38aS0vLnHv37g1MTExoZ2Vl TbW3t0dTKJT69vb2ofb29tUHDx5cn5iY+KSmpraHw+H8RaFQO2ZmZt60t7fjAQDoJZFIaBsbm7ip qalvAAAAc3Nz4z9//pS7dOmSMZ/PR4tEom0jI6O/bW1tMlgsliAQCHDv37/P9/LyAldWVmJhMNh2 b2/v5o0bN+JWV1frCASCc3Nz8x0bG5sYExOT5pmZGZmKioo5Docz6eTklDI4OFjQ3t6+YGBgADU3 N4/6+/fvh9evX99aWlrSOnv27J6srKz6gYEBrbCwsFYHBwdNdXX1pdzcXFJkZCShpqYGEAqFyx4e HoH5+fmXRkZGJKKjo81Pnz79JzIycgeJRIJtbm5C0Gg0Ym1t7R4KhfInEonbGAwGKS4uHvjr168G NBqN0tTU5H7+/Hna39//Unx8vC8Gg7HV1NSkd3Z2MiEQCG97exuupqYmlp2dbSIrK5seFRWl5eHh 4S8mJmbv4+PzNiIiQtLc3ByWnp7+6/nz57oFBQWyk5OTi5GRkTEAAAgBAAB//Pjx0v79+2P5fP5q S0tLl4WFheH79++/DgwMwE6fPr3Q398vYWRkNEggEBRu3ry5HBoaqhgeHk549OiRqqampnBjY2N4 fX1908TExIHFYvF5PB4RDAYDW1tboPj4+Oc5OTlZAwMDD4lEIkckEqGnp6fH6XS6dGJi4mBdXd2x 6enprpSUFCqFQplta2v7n7e3d9qBAwfobW1tCmlpacegUOj3x48fE2NjY8G1tbXTtbW1GzExMQow GEywvr6+8+zZs/UgEEiIRCKBvr4+/ZiYmD+5ubmKnZ2dBgKBAHTz5s1X4eHhhlNTUwN0Oh0OKSgo OEyn02dPnTpl9+HDh9H5+fliAoGwqKOjA6NSqTaZmZnj6+vrlampqfCnT5/ue/ToETMjI6Pz0qVL pJiYmNm7d+9OHz9+fHhychJ/4MABoZGRkYBIJI6Pjo7CrKysLDkcDkRRUbH/48ePZUePHt0Ng8E6 XVxcmpKTk9W5XC74/fv3JWZmZoT8/HyKuro6s7a29rORkZHe2traHy6XW75///54HA43p6mpKYyM jDzC4XDGFhYWavB4PBiDwWjNzc1RDQwMDL28vJTodHo+mUwGycnJiWlra+tBIBDlysrKnoCAAGlJ Scmmixcv4n/+/KnV39/fuLCwMNXU1LSuoqJC6e3t1RgcHBy8dOkSWVdXd0hcXFwKBAKhUlJS2PX1 9YKenh4OiUR6m56efkZcXFxtfX39K4VCkbWwsBDFxsYil5eX/S9cuHDLyMhIXVFREff48eOVu3fv OuLxeKXMzMyW7u5ul8rKSjAAAMvb29vN1dXVb0xMTDY2Nzdhrq6ulrq6ulQymewzNzfXR6fTx+Lj 48evXLliLyUltQ8MBouNjo7WSktL60ChUJCpqamfq6vr+NGjRyfgcDhHTExMWFxc/INMJgsPHjx4 AwwGT0OhUMu2trbnKBSKcffu3VmBQFCgo6ODQqFQU0Qi0TkiIuKvi4uLOJPJ5JHJ5K3w8PAeRUXF ZmNj4yAoFIo2MDDofPfunerMzMxoUlJSYnBw8JVTp05FMRiMRhqNJsBgMN9//PgxJxQK9VVUVCR2 7Ngh4eDgoESj0XpnZmaQb9++VW9oaNAeHR2ljY+Po1xdXdFSUlKYiYmJ+fHx8a4zZ864cLlcqLOz s4KGhobJysoKU1NTU9Df3z9qb2//UFZW1nhjY6MDhUJ529raflxaWuqUkpIaIZPJZA6Hg5SWlpZz c3ML4nK5s9bW1gZycnLs+Pj4jZKSkoDIyMjOra0tZnR0NB8Gg8H7+/sXnj59Opefn79/ZGSkxMjI KLigoIDe1ta2r6ampjs8PFyczWb3rK+vrw0PDz/G4XDSxcXFHXFxcZMrKystVVVV85KSkmMXLlw4 dfToUQqJRELMzMxMKSgocCUkJLQPHjxIRKFQovDwcKqTk1NTVlYWxM3NTTw7O9t2cXGxBovFmnR0 dHwfGhqiurm54ZaWltokJSX1sFisYXFxccH58+fF7969G/HixYsfnz59auFyufTDhw8jTU1NZcfG xqbweLz4kSNH4t6/f79MpVIXv337JiUhIdGBQCC4jo6OGTwe77OCggKWz+dvxcTECK9evYp0cHCQ ePnypRiFQmlpbW3djI+PJxoZGckJBAKMg4ODnoSEBLalpWVwbm5OGtLf32/V3NzcFhoaSrS0tARL S0sLT5w4EVxcXPyNy+UaRkREGJBIpLbr168TkpOTR5SUlPb7+fkB09PT9Li4OIfY2Nime/fu+c7M zCyHhIQ0SkhIeLHZ7EI5ObldBAKBCIFARH5+flNwOBzx6dMn5okTJ1xwONwiBoOZFBcXVy4qKmp+ /vw5YnR01DYlJcVbU1OToaioSORwOHVmZmZWPB7vy8TEBNjX19fH3Ny89tq1a4dRKBSdy+Wu8fn8 hc3NTUhycvJAQECAop2dnaW7u7uhgYGBDQwGs7h//35UU1MTp7W1dc3MzAzv6+sLKy8vn/L09Fyt rq6W0tDQ+G1kZJQkEolajh49Kq2mplZjZWX17sCBA01UKnX43r17+D179igpKChQzp8/Hw0Gg2FQ KFRDSkpqqLi4mF5VVYV89uzZnxMnTpQ+e/bs1MjIyMzt27dX8/LyrPbt2/deWlpa9+XLl6OHDh0a OnTokJ65ufkok8nEv3z5cnhxcZEqJSUlbWZmZqiqqqrZ09OTqKamRvrXJUY7OzvX1dbWrh05cgQN gUBADAajYXR0FEEgEMaIROLfoKAgj6ioqM2YmBjgzJkzUtnZ2dLa2toLOBzOTUJCIgiLxa5dvHjx gLW1NVdJScmyq6vrM5lM3r25uQmprq7+4+3tDf/8+fPI8vIyKjo62mBmZgbs7Oz848KFC56ysrJS MBjs8+7du3Ha2toWUVFRlYGBgSwYDEZ0cHAIs7a2XgkODmaFhoYmW1paOtFotLqzZ89Ov3jx4kBL S8vWjh07/iKRSInt7W0lLpdLIRAIjMHBwYXKyspfR44c8WYwGKPLy8uY6elprIuLy8TIyEifqamp koSEhKyUlJTq6urqnJWVFQoCgURnZWUlOTg4yHO5XF0ZGRkejUb7dOzYsamNjY1ZBoPBGx8f37K3 tycfPHjw9YkTJ1YlJCRAqampeCMjI/HZ2VlNaWnp7dbWVkxtbW3/uXPnojQ1Nb/PzMwgVFVVKz09 PeUFAsGWubn5XExMjEJtbe1WS0vLdFBQkEReXt6IgYEBQKVSNb59+2a5trb2vLu729zLy6sBDocj pKWlma2trcjr16//MjIyksXj8Sx/f3/j0NDQdQ8PD2RUVJQcj8fbgkAgS9ra2naHDx9+SyQSyXg8 HiUlJYXa3Nxc8/T05IpEIpn8/Pw/PT09t0JDQ0MsLS2VHj9+3L5jxw62q6vr/fLy8rdwOJy2urpK e/36tZpAIFg3NjbWunLlCu748eMiFRUVBaFQqP3r16+vhw4dwqWnp4vCwsKQJ0+e1Nq1a1eppaUl ITU1dQcEAplOSkpaRiKRa/39/dUlJSWGmZmZe8FEItHR2tpakkgkAiEhIVZv3ryRo1Aoi8ePHw+D wWDA+fPnaVeuXDGTlJTks1is9ba2tvcYDMZaT0/PS1xcXP7w4cNWVCrVh0KhYOTk5PSbm5tbAQA4 LBKJ+MnJyb///v37KyoqCi0SiURZWVnqfD6fLxKJuJOTkyAmkwmxs7OT7O7uPtbf32/B5/MfZWVl jYWFhX00NDQ0WVpaYvz+/Rv17ds3REpKSn1ISAjj169feYcPHy708vLqkpSU9EtISKDl5eWlkkgk DgaDUd7Y2GhdX1+vAgAA4HA40Hv37mHl5ORmsrOzaVeuXBn+77//rsPh8LPLy8t4PB6/h8/ng7S1 tf0hEAhzdHS0DwAANhaLpa+trQn3798vGhwc5BAIBI2XL18W8ni8JTQa3bq2tgbW1NQUS0lJ2VZU VPSWl5eHtrS0pLBYrB6hUAhyd3f/hUKhZjY2Nmbq6uoMa2pqNr98+bIWGxu7/OzZs29dXV2yly5d MpSWlgYaGho6q6urq8zMzF5LSEiEo9HoE6dPnzbhcrkxjY2NGq6urk/weLyqtbW1NJlMhkMgEMDH x8fI1tZ2hUAg7H/37t1pRUXFPZcvX0ZhsVjAzMzsMYvFCk5PT/dxdXVtUVVVtVBWVuaQyWSz8fFx Go/Hg3l5eWE0NTUdTp8+bW1ubi755cuXmWfPntXo6Ogs4XC4rzAYjO3t7a106tSp7a2trSYAAAAZ GRmppaUl9tDQ0KvMzEyuqqqqzD9jcweDwcDdv38fTKFQ/qqqqk7v37/f/PLly8IHDx4wUCgUt7Oz U2b37t06fX19Vl+/fu35p70Wc3Z2tqBQKMqPHz826+npWQ4MDARBIBBFW1vb+cTExFdqamqnxcTE mGAwmCgUCt8tLS394nA44Nra2v+YTOY4n88HCATCNBqNFmAwmPskEmmNTCbrWllZeamrq18IDAx0 am9vxxQWFh46evQotbCwsExVVVVsZmbGXElJyRoOh0twOBwpVVXVCYFAIGVjY6OSlZVl/vfv39nI yEiGsrKyRFJSEvXQoUMri4uLZhgMhrp37960jIwMEzQafcze3r5HUVHxDJ1Ob4BAINtoNHr25s2b mOrqan0oFIrk8/nohYUFRHBwcL6/v795SUnJJAgE4nA4HPS7d+8mtre3NcLCwqpkZGSEAAAgAADY 2tzc7Gxubhb79OkTFQAAICAggPq///1PKjk5+dTY2JipiYkJanh4GEylUpW3trZANBqtLygo6C+D weAlJydDkEjk14aGhokfP3681tDQOGZtbW1va2s7c+LECeOysrIdubm5yLCwsCenT5/empubew96 9+5dBJlMZikpKR0dHR1tBwAAUFdXF547dw5Bp9NBlZWVoSAQCLh//35+bm4uqLy8fLa3t5fi7u5+ MDAwcOLnz59WeXl54xgMhu/i4qKAw+HErl69WruxsSEbFxdnl5ub28FisRaOHDnCk5eXt1tdXe3h 8XgWbDabcuHCBVBFRYWBjo5OvJ2dnSsGgwE1NjaCW1tbz/T399ej0ej5paUlTn5+/tbevXs3Tp06 ZRUcHDwOAACQmpoaWFRU9GRlZQV569YtfSkpqWl3d3d+UFAQFIfDbb1+/Xo7MTGxhk6nX2MymUNO Tk7QS5cu8XE43LabmxtseHh4BYvF8rW1tc+trq7+HhgYGMXj8RIQCATU19cHPnDggJKrq+ubp0+f isvIyARiMBhJoVAI/Pz587e+vv6qtLR0fEtLSzaHw/mbkZGBLikpcUEgEB6HDx++rqqqitHU1OwH AECnublZEBwcDDMzMxNub2/PzczMyH358mU1IyNjUyAQiDEYjGgOh7M0NTVVr6ure3xtbe0HDocz 6u7ufmhqaprg5ub2vaen55m0tLRvTU2NZnh4+OP//vtPycPD4058fPyje/fu/ScSiVYIBAJVRkZm pqGhgYTD4QSHDx8eO3Xq1KaLi0v0vyBSJZlMNuDz+cCdO3fel5eXK3748AEeEBCAQSKRHDqd3tbQ 0GCYkZHBi4uLIyGRSDyZTP6ooaGx3NfXpzk2NkZeX1+XnpmZ+WxhYWGBRCJPdXZ2ZuJwOKi4uLiU pKSkEoPB+CAnJ5fR0tKS1t3dPWpkZMQbHh5e8/b2PvLjx4/Be/fu9Z0+fVr46tUrz5SUFCA5Oflr bm6u67lz56aSkpKQ5ubmgWfPnn1hamo6V1JSIl9eXn7i0aNHOZ6eniYBAQH0M2fOsIODgwWampoa vb293WJiYr5QKPTmwsICTl1d/erY2Fg3hUKhy8nJIWZnZ0c8PT13QSAQVy6XW5GWltZtampKQaPR uv7+/og3b97wDx06tKWjoyPe1NTkIRQKQb9+/cpRUlKyeP78+cro6KgQAAAgKSlp4c+fPzB/f/8D gYGBP0gk0pqVlRXS0dFRY3t7+wWRSIwsLy//u7GxMejv779za2sLfOPGDSgMBpuJi4vTg0KhIjk5 uQM8Hu/PvXv3Xg8ODgqDg4Mlx8bGsL29vZC5ubnRHz9+eOzatYtaUVHhKhKJoCAQSGhhYfHo9+/f GZKSknHnzp3T3bFjh9irV6946enpQikpqamqqipOYWGh0NfXV7O9vX02KyvrBgAAAJlMzh4eHhZp aWnRk5KSumxtbQP9/PzmWSyWory8/Ni+fftGL1y4cFMoFM5CoVAz0NOnTxPevXun39jYeMjd3f32 27dvV7a3t1mysrJHSktLO+l0elt7e7u1ubl5Y1VVFfbFixd7USgU58ePH28SExOdiEQi7s6dO7BH jx7NOjo69oaEhHwsLS1NZzKZXDgcjvTw8OBBoVBSQUFBaUhIyKmtra3ZxcXFJVlZ2ZkLFy6svXnz xsPW1pamqKgICQsLQ1y9enV2eXkZsrKyYrd///72/v5+5Tdv3my2tbW1oFAoQwMDA4UnT57MDQwM UD9+/HgkMjLyOY1GkwoICNguLy/f2Ldvn62BgUF1aWmp0rVr184uLy/HolAoOSaTuXNsbGzE29u7 g06n3xeJRAQQCMRvaWm5YW5uPoxAIOoBAABGRkbSxcTEEGJiYktzc3MwKSkpVmpqat2tW7f8Ozo6 lru6uuB8Pr8kOTn57Pr6uvy5c+eopqamS4cOHZItLi6eP3Xq1M3s7OzjFhYWK3Jycsenp6dpenp6 rL6+vpWuri72f//99xAAACA9PT0+Njb2LAAAwOrq6tDly5eHgoKCRpSVlaEPHz7UIxAIHD09Pdre vXujYDDYrJ6e3sCPHz9whoaGzwcGBsLq6uqm/f39jwIAAPfy8jrz9OlT4ytXrjQmJiZKV1RUmLFY rOGSkhJCZ2fnWQAAEIuLiz+wWKxidnZ2PR6PBwmFQs7t27dV3rx5w9fT02M1NTVJenh4BAMAABgY GLyvr69f6ejokCSRSPSWlpafW1tbkMOHD9uCwWAICASSLS8vn/Py8hLB4XALFAolXF1dnU1MTOx1 cnISt7Ky+iktLR1ZWFg4YmBggFRVVd0qKytbTktLIyUkJFTNz88baWpqIre2tsZnZ2eXnZ2dTc+d Ozd29+5dxMTEBENfXx9pbW2d4+Tk9P7hw4eVS0tL6+bm5tchEAjA4XDqcTicHp/Px4mJiTmxWKxf 9+7da0xOTnYKDAysKywsdAkJCUleWFiQbGxsfM3n82m7du0qiYqKql9cXNxz5syZPfX19bUxMTFg d3f35sjISE0FBYVlKSkpj48fP9bcvHlzLjExkdTW1iZrbm4+b2hoqE8kEk0+fvxYi0KhIAsLC9zH jx//5vF4mk1NTdYYDEZQV1dXPjQ0hFNWVp6SkZFB/hupymZkZKQIhcIlXV3dDx0dHeiCgoKvhw4d ijEwMKDb29tXVlVVWf/9+xdy8ODBqqtXr+oIBAKBoqKibnd3d7e5uTmdTCY//kdOMgwNDWsfP34s XFtba0EikcpHjx7Vio2NpQQHBy+QSKQgPp8Pio6Ofvv06dMbenp6NyAQiJBKpYphsVjU6dOnt8rK yng/f/48npmZGR8VFXWrp6fn/vPnz0kQT0/PzbS0tL07d+58pK2trW5jYzOgqKh4g8/n06Ojo+lz c3OaWlpaX1++fGl+584dsJaWVhSNRvOprKwEysrKLJlMpkJlZeWcvr7+QEBAwFJjY+MGk8lEHDly 5LC+vr71gwcPekkk0rK4uLjy4uJi2ejoaG9eXp4agUCQ5XA4i1gslldeXp6cnp7e4uzsDDM0NMTw eLzhb9++MXV0dKrDw8NJjo6O69bW1mYODg4YCQkJvr6+/kxCQgJcR0dH+PfvX05oaCgsNzd3KSAg gCIhIUHYuXOns4eHx5nV1dW+pqambX19ffeoqKhbkpKSKmQyme3i4rJfIBCsbW1tvbtw4YIYgUBg vnz5smnXrl2adnZ2NZ6enhJSUlLqEAikNywsTFRQUHARjUYbKSgo4Ht6elZTU1NjT5w4scJgMNhc Lnd+e3sbmpWVtT45Oak5ODj49vTp0y7Z2dnjO3bskGAwGPDLly/3R0dHX9i5c6ctm82u5nA4nbKy sgwEArEMgUD4MBiMWVZWVu/i4sJTUFA4sGfPnoP29vYWmpqautXV1T+VlJQGNTU1t379+tX35s0b n69fv7apq6tDWltbS1ks1mc1NTVAVlaWtGfPHkUcDhdsYWGhAIfDtx8/fmwcGxuLgkAg4igUCuXo 6Fh2+vRp6YqKij/T09Oi4eHh8SNHjsgjEAi1kpKSjoWFhXlfX9/nw8PDcerq6quVlZXUtLQ0j5CQ EKlDhw5RWlpaWBQKBfHhw4dvVlZWphUVFSxpaelpJBIJGx8fB6HRaNSjR49wKysrg3FxcRJEIpE3 MzODPnTokP779+/ro6Ki1lpbW2W1tbU3pKSk4CoqKjra2trixcXFXCQSiTE0NNTB4XArISEhzjQa 7Up8fLwSjUbrWV1dDdHV1ZXq6elpZTAYcDc3N3xkZKQuBAKR3Nzc/KugoABfW1tbLS4uRnt6enZ5 eHgY9vf3s1tbW68cPnxYLC8vj2lmZqZjbW0tIS8vP/X48WPnFy9efEtMTNQnkUga586da/Xy8sLS 6XTKqVOn1DIzM4U/fvxQu3TpEqewsFBsdnZ25Nq1a9zp6WkOl8uFX79+Xeb8+fM9ZWVleC8vr20t LS12b2+vcGBgYENOTo5NJBLVcDiceFpaWsuePXuQFAqlb319fdzT09NZSkrKmUaj3SQSididO3fO W1lZKZeUlNDNzMzUNjY2Jq5du9Z+8uRJBTweD4bBYBShUNhTVFQ0XlNTg7xz545ZZWXlqJmZ2VRI SAji1q1bq97e3lIyMjJ7Pn78eDs0NNTd29v77vr6utTCwgIWDAYv+vj4TMvIyCjKy8v/aW9v7+vs 7NQhk8mUqampLzdu3PABRURE7PX29hZ5enqWP3r0KO+///47KhAIxk+ePHkzMDDQ6eXLl7O5ubnk wMDA77m5uXry8vLoioqKzfLyckxRUdGqmZkZe2trC0AikRyRSASqrq6OBQCALRQKgdTU1KtQKFTe zs6OJSkpyWKz2ZzKykr1tra2yatXrwrS0tKss7OzFf78+VP/+PFj5OnTp2U9PDzYMBhMb2hoiF5e Xp574MCB1La2tsVPnz5RcDjc8O/fv3Wjo6Prnzx5YnPo0CHukSNHQNPT0wCXy7WMior61tnZuScn J6d6cnJSMjEx0V4kEmHHx8eLZWRkZP9tqrERiUR8OBwuio+PzzIyMhLs27dv08rKas/m5qa0ra1t xd27d/3Gx8cXoFAoIC8vPxUTE0N5//79CS0trdGuri5JCAQiWlxcREtLS+OQSORYf39/P5VK5Z09 exY+NDRkAwKBwAwGYwGJRHLb2tqW9+3bF7q6uvrznwEHGBkZmW5tbSVGR0db83g8EAAA1KWlpa6f P3/KHzp0KLyysjLLysqKMDg4yLK0tNzd1dVVp6amRh4a+j+azvuf6vf/468zOIMzOPY+5rGPvbdk E00hhQqRSkkl1VtLiVISKQ1FA1FElJ0tHXs79namc5z1/eHb5/oTrh+u63F7PJ7P+2MoQ1JSUqym pka2uLiY1dzcfG/v3r2ZeXl5LAwG472wsFDY3Nws4e/v75SRkfEyODhY3snJaery5csKs7OzUHFx cZ6vr6/U2NiYyLt377aCg4MhFhYWIhkZGfVOTk6cyspKaGRkpPnQ0NCKg4ODEYPBAGOxWE1VVdUR EonU9vbtW4njx4/v1tbWbhgeHjZksViQnp6eUjgcvjg+Pk4UExPwgvEEAAAgAElEQVQT2rVrlz2R SPxaVFTELCoqwgMAAAQHB0tHRERshYeHNwkLC4N27dplLCUldcDU1PRxaWmpPgwG4xsaGk4tLi7G /fnz54GysrI6h8MBhYeHL9TV1anV1NQMj4yMoOzs7CRLS0s/JSQk+DU3N28pKCiIqqmp7aPT6S9F RUWPvHnz5lRAQICHh4dHr4SExPKnT58SKisrP+nq6oooKirqTUxMrL58+fIvjUaDP3r0KKy6urrw yJEjUlJSUgxlZWX28vIyPTU1Fd3W1kZNSkoyTkhIWAoJCcEgkchlISEhwdOnTx9++vTJ9evXryAC gYAIDw8Xevv2bdKLFy9e+Pn5qYmKivJ2dnbE19fX+6SkpAz++++/iVevXpWVlZUZqqioaHC5XHh7 e3tVa2sr+8mTJ5jW1tZVIpH4pLm5ufjPnz+koaEhqevXrzuzWKzfPB6Pg0Ag1CgUymZxcTGKRqO1 gcFgwNPTEw8AgNDY2BjV0tJSW0FBYTMuLm4ZAAAgJyfHrrq6+mddXR1pYmJCytbWdv3Ro0eHUlJS OnZ2dvhbW1vjBQUFe6enp48sLy834XA4JZCWltadZ8+eYRwcHILX1tZC3r9/z9bU1BTY2dmFODo6 8js6OjwdHR1zAgIC+jw9PVfwePyLiYmJ5qdPn1bHx8cfERERYSclJdVoamquR0VFGV25coV79epV SXFx8cOrq6sNi4uLIwQCgXjjxo06OBwOTk9P13n9+vX4yspKLwgEEggJCYEWFhYgXC6Xdvbs2Zh/ pR4DLS0tk+rq6j9fvnzpZ25uPpucnHwkLCzsVWlpKXn37t32u3fvxoiIiLCFhYVZ5ubmewoKCgrT 09NRIyMjxsPDw5UGBgZ5bDa7y9XVtaGurk45JyeneGpqipOamnqIx+NJX7ly5UZ5eXk8Go1m/fz5 U4FEIrUiEIg1IpFoTiKR2EZGRpbl5eUfk5KSGCMjI9c3Nzd/iImJWZmbm5+6ePGiwfXr11Hfv39X FhcXB7u6uvb5+vr+jYmJYdy5c0f2yJEjBDU1tRA+n883Nzf/TiQSW0xMTBaPHTvmxufzZREIhI+n p+edL1++eHG5XF5HR0cckUiMP3HixKCZmdlsX1+f2dTUVCeNRhM7dOiQZnh4uFZNTU0hgUCgQaFQ aFVVlTyBQNjy8/N7zOFwqlgs1urm5ia0sLBwNCkp6dq/tp4HFy9eDK2trd1VWFhoZWdnpxoaGmoj LS29OT8/j2Kz2aCkpKT2kJAQbHJyMv3169fCk5OTo1AolL+ysoI5d+5cy9mzZ32ioqLC7t27F5WY mPjmn7E6VlNT85zP5wO1tbWMwMBA8bt37y4XFRXtHx8fn6JSqajZ2Vmyo6MjTkREBOnq6grx9/dv 2NzcpGtoaMB37dolQiAQrldUVKRLS0svmZqaXqmoqEjQ1NT0l5aWVrS0tKwxNDRczsvL23/jxo3m qKgoNVNT00IymXyCSqUOAQAAzMzMfFdXV08gEAjwz58/jwgEgm1ra2tLJBJpt7Cw8M7ExKQwKSlJ Ly4u7p6Pj8+FI0eOKPr4+Bi7ubmRXFxcpqKjo12qq6tb8Xi88MTEhIiHhwcyMjLym7OzMyY6OvrW 8PBwXmpqqlxmZqbK+Ph4BwKBkEWj0ZMiIiLWw8PDpbKysrIEAuFke3t79t69ewljY2PGwcHB94qL i30UFRVXHz58SAcAAMBgMEKurq7+KBRqaWZmhrd3796q0tJSJyEhIYq1tfWXc+fOgffu3etmZmY2 0NjYaAgAACAQCICRkZFaUVFRJBaLFbDZbPa3b98obm5udtXV1c3j4+O4jIwMexwOJ6ipqVlBIBDb xsbG58zNza+bmpouHT16VAMGg/ELCws3+vv7Jaqrqx1ZLBadz+fvgMFgYRAIpGxgYPAFCoVuqKur r0A6Ojoi7O3t5S5duqSoo6ODffr0qc+fP39aGhoaaC9evLgIAADi8OHD9L6+PnEXF5cLrq6uRWfO nPEBgUDD+/fvl3769On3mpoaz9+/f/9VVVVdvnDhwvyZM2fshISE8HJyck0lJSWwU6dO4dzc3MLs 7e3NRUVFX2RkZMytrKxozM3NobS0tLbweDysurpa2dvbW01ERMQOh8Nh5ufnl6SkpKyQSCTr0aNH iOPHjy/U1dVZnDp1StPAwGDQ2toaPjg4yLW2tgYhEAit/v5+HpPJXNu7d6+XjIzMHhMTkyhxcXHR 69ev05uamhhMJnMtISEhgsvlstBo9F0PD48TX79+3W5sbLRBIBBYDAazICcnt3tubq5XXl5eKjw8 /Pzw8LAekUjc5PF4Xdvb2z+Li4u7Tp48yVBXVzePiYn5b3t72yshIeGRnZ3dyvr6Osna2hpmY2Pj X1VVVT89Pd0fGhpK3dnZASsoKOASExOJQ0ND5K2trT5paWn39+/fN+7fv19rZ2eHoqGhET05OVkT FhZmpqmpKefk5NQAh8OlFxcXObt374YODw9PV1RUyJSWlqLX19flqFSqYH5+Hi0vLz88NjY2Ozc3 x1RSUkLW1NSgVldXq7W0tCDm5uZrOTk5Hzo6OvSvXbuGnp+fb4uNjZ25deuWQF9f36Wtra1FTExs TE5OTsHLywtOp9OnxsfHhTY3N2F+fn7edDq95+zZs6EgEAhrZ2fnvWfPng/W1taPHj16BGlsbIT+ +fNn0sHBATUwMADPy8vL6O3tPWtsbGzX0NBANjExkZKVlRUuKyub8/Pz+6WlpSUpIyNDpVAoElpa WpMwGOyDjIzMLhkZGasvX778bm5uFvLw8DDbt2/f5L59+5C+vr6LWlpaXh4eHgZMJvO9nJycjr29 fdTs7Gy2tLS0I4PBEAsKCiKpq6t3RUdHq3G53J3CwsIyJSUlzvv370fHxsZMLly4IBAVFQUFBwcb ZWZmfrt79y7/+/fvS2lpaXKHDh0SRSAQYidPntxaXFxsy8zMpH748MHBwcEhGgAAkLS0tAcCgfhl Z2eneeTIEXZ8fPyYmZkZjcFgjFpYWIRJSEi4rK2tVe/fvx85PDzssbW11ZqRkbGlq6ubKycnB4ZA IFpbW1vIwcFBYSkpqa7+/v4qOBxel5ubG/X8+fOHhYWFlJKSEuOPHz/yRkZGqqytrcEkEmnCzMzM 6tOnT/Vubm7NSkpKQenp6XMYDGYRiURqX758eZlCoWgFBQWJYDAYKRERkVkAANgQCIRhYWHxbnBw MGT37t2mY2NjbVwuVwWNRvcaGxuL4XC4Vx4eHnICgQC9sbHRxuPxyHFxcS6RkZF6mpqaaHBQUNBs bW3tBxQK1RoVFVWMxWL1PTw8Dj1+/FgzIyPjBAAAfAgEIvj06dNGfHx8IY/Hg2ZlZSVDIBCD+/fv 08FgsHtcXFxiQkLCCVlZ2eNDQ0PRYmJilJCQkBMnTpxo6+7uVhYWFpYBAIAZFxd379u3byp79+7l ZWZmih85ckRdSkrKWk9PT0NGRgbZ09NTX1FRcW9wcLDYxcXFEo1GIw8dOhS8tLQkm5WVZTAyMqLU 1NS0NTMzY/X+/XvEr1+/Jv39/VVfv349qKqqivr8+fNdNptdzuPxNrq6ui5aWFhsolCoBCcnJ/Od nR3C+vo6lEqlQgAAMAAA4GNDQ4MJAAAAFApVlJCQCKdSqcP6+vq7YTAY/NGjR6enp6epP378ULGy slLa3t6W7u7uVjxx4oRhSEhIHxqNTk5LS/uspaWFxmAwyMXFRXUUCnX85s2bTb6+vjJWVlbKDg4O P6ysrBppNNokh8MBPXjw4Iempqbz69evA3bt2gWQyeQcJBIJX1xcfO/s7FyBRqOnBgYGWsbGxpAA AHD4fD5jc3NzZH19fdjExAQ8MzMjHhoaOjowMIBLS0u7TKFQUC0tLTuKiorbFRUVi9HR0Qh/f397 HA63SiaTlzs6OmDKysqThYWFI4GBgbHHjh3TP3nyJF5JScl7z549dZ8/f1ZbWFhYVlBQYPn4+Mwt LCyIBQcHH83JyfFLSEgIWF5evhAQEPDEx8cnf21tjff27VtrHA435+/vT2Kz2XAMBsNxcHCQAwAA eP78+SSDwZDS1tZua2ho2MjIyOh0dHRE2NjYGOro6BCdnJws4uLi0gsLC/HNzc2H19bWcj9+/Jgl ISHx48qVK+5cLpePxWIFv379ArPZbOXBwcEz29vbm0lJSfzDhw/TFhcXn7e0tFCam5tJs7Ozy5cv X+5PSkrSzcnJWbKxsSGdO3cuGgAAICwsDGlmZjZ49OhRkdbW1sbo6OjinJycK/7+/uC8vDyJoKCg JQgEAvPw8Jgjk8lyUCgUSEhI2Jqfn58tKyv7Nj8///PixYu3+Xw+bHNzUyQ1NfWDra2tLJ1Oh+ro 6BgIBAJgaWnpq4iISGNVVZVESUlJAZfLfQcAAKClpaWyf/9++WPHju1yc3Nbamxs7F1dXYVNTEzs UVNTU3Rzc/tcX1/vSiQS51RVVXdHR0cLj4yMSFKpVJiKiopaQ0ND6+HDhxvLy8utdnZ2avh8PlpI SAgSEBBw7p8Z+HdqagqRn58/HRAQsDY6OroMAAC0tbVV//r168VEIrHf0tJSgcfjDZSVlZlhMBjO o0ePkqFQaJiwsLDt+/fvp5qamvh///6tB4FAgIyMzA54aWmJV19fr9rV1TXv6Ohow+FwBjc3N5dG Rkb0Z2dnFVAoVKWVlVWPkpISVFNTc9nHx2eZTCYvmZiYUKBQqKCurm5NT08vaHt7+wUYDAaZmZml 0ul0eS6Xq9/e3s4KDAws4HK5U2fOnEnLyso6p6SkRPX29ladmJgQsra21h0ZGdmanZ2VKCoqYmxs bICxWCxUSkoK0t7e3l1TU9MPhUK3a2pqaGw2W+rhw4e9N2/ebFdUVPytra0tmpWV5XD//v1vZmZm G2pqam1bW1vZ4+PjSCEhIRU6nT6FxWIJ29vbtX5+ft81NTUpVlZWNAMDAzEAAFb+obujIBAI+H/j uV5eXpSIiIj8/Pz8hrm5uY6/f/8az83NaauoqMifPXtWWkhIiBQdHb3c2Nh4ks/nO5NIJHxDQ4P+ 8vKyyr59+6zAYHCAubk5ZGtrS8vPz+9vfHy8upubG9XX13e2vr5+KTIy0vfgwYPpdXV1OqdOnTJS UFAIYzKZLBgMJrq+vh5mbm6+ZmlpKU2hUDiGhoYEa2truJ+fX9Dhw4eP7Ozs0J88eTLu4eFhee3a NYSnp2eWlZXVIQkJCcnGxkaRsbGxLhwOJ7W2tjbd3t7+QUtLK/jNmzdRMBiMb2pqKunq6jrBYDBA RUVFm1NTU+8gEAglOztbwcLCghAaGtr+9u1b3P3796d//vxZEBwcnPnr16/PCATi2MWLF1mlpaV7 t7a2hBMSEpwPHDgg0dHRYfLhw4dADw+PfRcvXuxWUVGJLC0tjQ0JCWl//Pix0ePHj8UNDAxEsFgs g0wmjwMAAKBQKCcmk1mVnJx8fteuXWIEAuEnGAwWXLx40fHLly99UCi0X0pKat3R0XE4LCzMgsVi WQgLC681NDTs7uvrQ+Xl5Y1AoVDIz58/Z728vC74+fn9JJFINFFRUbaQkJDko0eP/uBwOPyTJ084 SUlJ+C9fvuyIiYlN37t3zwUMBgPFxcVDk5OTTZqamhh/f/9vQ0NDeqmpqddiY2N3rK2tNRobG+XP nz+/PjExsXjixAldKSkpOovFmv3H9JOAwWCGSCTSAAKBAD09Pb1WVlaeCASC7+DgoOTv70+ora0l u7q6GomLi8/+i9J9ExISgN7e3hUkEtk7PT294Ozs3FdZWdmdn58fBAKB+KKioth79+6F3b9/32Zm ZoaJw+GU/uHQbRMTEyF6enp/bW1tk2ZmZq6vra3taGhoqO/evXtWTEwMyuPx1mpra4du3LjRuLq6 iklOTvb/+/evXmNjY//Y2NhCYWHhaTU1Nea7d+/uUiiUaxQK5Y6jo+NqUlKSlImJSXhubm6bjo6O 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 LB4/foxcX19nGBsb9+vo6ITS6fRZAwODvp6eHmNpaWnPrq6uD8HBwZ2rq6vE8+fPkw4ePGhYWVnJ sLKyYnR0dNC3trZgy8vLovfv3/dcXl5emp2dpaLR6CpJSUm5Hz9+9PT19RnGxcWZuLq6zmVnZ086 ODikgMFgMQAARO/du/cwNjZWhkwmI3Jzc8eDg4Nn19fXYfb29vshEIjw0aNHr548eZJAIpFUzczM WCIiIrJoNHp6bW1NXEVFRX1paYn84MGDqaCgIA0ikai5trb2+vbt279///6tNj4+fkRfX3+hsbFx kMfjTdHp9D0SEhKztbW1cpcvX2a2t7f7Z2dn50hKSsIwGEy9uLi4mYmJya7W1tYbVCrVdnl5WUlH Rwfh7u4OoFCowa6uLr309PRlDw8PkJ6eHvPjx4+wqqqqLRcXl2FtbW07CQmJKhMTk6/Ly8tpTCYT Iikpif9flVxTU9P2yspKt5+fn7Wnp+fz2tpa56qqKqkTJ06IXr9+vauzs3P72bNn8VpaWn8+fvw4 /+PHj/GoqCiPurq6Im9v70QoFEoAAIDv4uJS+PXrVwUUCoWNjY297urqKiEjI+OekZFBy8nJwTo7 Ow91dHRc5HK5o2lpaV/t7OwQOzs7QuBLly6tioiINBkYGPjCYLDQ/v5+TllZ2Y2+vj6csrLy1NDQ 0Lu4uLj61NTUr9nZ2XWysrIHbGxsfO7cuZOenZ1NunHjBnv37t3bPB5vrqKi4mRhYaHW/v37vcLD w9/SaDQql8ud6unpeXX9+vW+3NxcnZKSEvj8/PwdAADWAABYo1Ao99LT05tDQkKGwGCwrkAg2GAy meD09HTlwMBADxsbG+uXL19uDgwM3AGBQAqWlpZAfHy8qoeHx7ShoaH16OgoY319fRsMBnM3NjZq 4XB4DxwOl7t+/fqStrY26vbt25fodHpVU1NTroODA4vD4Uxzudypo0ePhh88eFB/Y2NjRVNT8w6d ThfS0dGRDAsLUzI3N1fJycmRn52dHSgtLU35/ft3dnJy8u+2tjZxZ2dnx6WlJcb79++nFxcXHfbu 3esvJCQk+/v3b+fOzs6d2tpaelRU1Fc+nw/e2dnhbG9v183OzrbweDzpvr4+6ObmpnBjY2NwZGRk FRgMvr22tpbO4XAmmEwm4ufPn+3t7e0yeXl53TY2NuIWFhaI3bt3W1dXVxdevXp1FgwGQ8FgsGZB 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 RoYlAACAvb39nrGxsVIIBIICAECgoaFBEQqFrNra2lI1NTVlNBotIhKJOw8dOpTu7u4+FRUV9Wxl ZaVjdXV1/c6dO53Z2dnBu3fvLpqZmcHj8Xi4vb396KFDh7T++++/+Xv37omnpqZu/j/pEQqF0yAQ CPDw8HgWFRXVOTQ05D08PCwGAGC4pKTkIggEAkZHRzP09fWvNDc33wsMDMTfu3ePam1tLRcZGanc 29u7V1VVNaOiokJWUVFxA4vFkh0dHafu37/fvX379q8AAADt7e0pm5ub0KWlJR09Pb3WxsZGLQaD IYyMjNTA4/E0sVgstbCwMMbhcPTIZLIuCoVa7uzsHPj06ZOGh4cHLzc3F8tisdpv3bpFTE5OHq6s rLRDIpE+k5OTNVJSUpL9+/e3x8XFyUZERFyfmJg4mJKSovPw4UOZtLQ0fl5enm9RUdEFPz+/oxAI RNbPz+/+58+ffX///j1gaWmp7e/v3wE5efJkBJ1OrxgZGQkNDQ1dDA4O9mUwGPMeHh5xMTExP6Oi osgIBIJIJpNh8fHxKxEREajS0tLVmJgYzYSEBImqqqotEomU2b17dzkYDG75+/fvX29v7x329vZe 2dnZVREREQ4AAMyrqaktxMfHh2xtbf1cXFzsRCKRqltbW/ICgWCCRCItjI+PbywvL0NPnDhxhc/n V2lpaaEFAsE0mUy2TEpKGhcKhVsUCsUfCoViuFwurbu7ey4oKKgai8UOuLq6OkxMTDRFRkYGicVi CY/HG4yNjQ3o6emBKigo8KBQqOTXr19FYDCYK5FIjDs6OupxOBz71KlTbEdHR5anp6cCi8WiP3r0 SFhdXd21urq6ODc3J9na2lrIyMiYq6+v73BxcbFIS0vjnjt3Try2toacm5tDeXh4/Jqbm3vPZDIx jo6Oyl1dXSqWlpYz169fn923b5/Yw8PDmkwmQx8/fix6//69Qn9/P5tKpcqpqqoqent7++Tk5Kyd PXtW/vTp02ZCoZDFZrOh27ZtOxAaGnqeQCDsDQkJ+bFjxw69lJSUBTweD6+vr++am5tTKCwshCYk JIwZGxvr6OnpmbBYrGUajQYIhcJNNBrdOT4+DkOhUErNzc3dAwMDoO3bt+tYWlq6cjicCTKZrBAV FfXL0tJSwmaz1Q0NDS0tLCym2Wx2l1gsNhAKheUdHR2Lp0+fnqZQKI5v3759hsFgaObm5sNPnz6l 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 MplZWlqKzM7O5sJgsF9ycnI7XV1dIQUFBTNRUVHG7969W0Wj0a8PHjyYikAgqBAIxHl7eztjeXlZ BgAAAIVCKaJQKIPu7u6LCAQCmJmZsZCSktri8/mr1tbWMY6OjlGNjY0vAACgg8Fg1OLi4ueEhISl Fy9eeLNYrOZ79+69j42NTRQTExM4ODj8dXJy6vn48aNjdHR02ZkzZ17JyMjkZmRkVMrKyroXFxez 5+bmBl++fBklLy+vDoVC11xdXa9LSUlp5ObmhvN4PFB+fn59Xl4eDIvFUmVlZUWdnJwkg4KCjjQ2 NoYTiUTC379/e5hMJjg2Njb43r17s21tbT2amprIb9++0X7+/Gm8srJie+3atdz4+Hi3rq6uKQAA gB07dtgeO3bs1/PnzzEbGxtYaWlpbktLy5q9vb3d6urqLQKBcKa/v3+oqqpqU09PjxgeHr755MkT KJfLFbq7u68UFRWBDQ0NRwkEAsfMzOxeQUHBGygUKoyMjHRXVlbuAYPBQHt7e2hAQMApPp+v9/Hj R/KePXuUaTSawrt37wYHBwfNfv/+Tb937573gwcPislkcr2pqakHDoebiY2NJdvb2+u9evUqvLu7 u9DExMSRzWbft7a29ty9ezc/KSlp19TUVNbMzMzq8vIyR1lZ2QqHw7WVl5fT/1leteTl5bfYbLb2 wsLCqqqqqoqUlJQFDAaDPH/+/EtLSwtkYWEBTSAQKu7eveslKSmJJhAI4jweT1BZWTnk5eVlQqVS qQoKCvv7+/sTaDQalEwmi+7Zs2fnkSNHBvPz8x3n5+dHFBUVVcfHx/vl5eWxAoFgC4VCEWtqauqO Hz8ujsFgpmZnZw39/Pxy9u7dK1NcXCxZVlamTafTjZSVld/Mz8/HX7hw4SKfzwc/fvz4yOLiIkVD QyMEAADg5s2bl3x8fExVVVVZEhISWlAoVI7NZg+Pjo4OqKqq4pBIpKZAIOAzmUwwCoUSjY6OfonD 4XQSEhIu/vz5083X1/dmc3Nzm7W1Na+6uloEiUSqqKurE1AolP4/tgTAYrEW6HT6PBqNVrS3t/9Z VlZWY2xsHAv+/PmzR0lJycnz58+LS0pKLq+vrytjsVh0YmLi9O/fv83CwsJ+rKysUK2srN78+vVL rqSkJPHhw4fq8fHxnyIiInQyMzNLampq5ufm5hq/f/9elpmZ2cPlcpWlpaUvT0xMNF2/fn2TwWCA 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 t8uXL+vKy8sbPXr06M/9+/d1QkJCnlpYWByEQCBAQkLCLgwG0zh27BhteHh4+vTp00KGhoZCIBAI YWZmNhEREREnKSnJFRER8R4YGKgQEhLi3rt3b0pSUlKSx+MtYTAYYXd3d3kajda2tLTE/vDhg5ZA IJhcWVn5KScnd2b//v1LkOjo6KNjY2PDVVVVetLS0tSZmRny48ePT+jp6c1NTU2xYTDY+smTJ8P3 7dunl5+f3+rq6mooISEhOHXqFHR9fV2dTqcLSUlJocPDw6f6+/urZ2dnJa5evUqRkJDYk5aW5kZF RUU5OzvnSEhIiGZkZNzV09Nr6Ovrk09LS7OMiYmZlpGRkVRXVxdfWlrizszM7JSVlWkbGxtT2tvb dxwcHOx0dXUV7t69u5eYmKjh4eExjUKh4CwWi/z8+XNsSUnJHp/P5+bn59Pu3r3LCwkJEcnNzZ17 +/YtZ3d3F5GZmWlKoVDWYTAYcOjQoYNsNlsagUCgYDCYsYKCwmp0dPS/jx490isuLqaoqalBDA0N M86fP28ZFRX1TE5OzhCFQjlZWVllLywsCFlaWrZmZmbOX758ORSHw/XfvXtXobq6euvUqVMBAAAA cDgcx+PxJqWlpTGampoYIpG47/79+3L29va8qampqubmZrCTk5MGiUTakZSUnJGXl4c/fPjQ2tPT Ez8yMsIRFhamcDgcITAYPG1paakwODgIu3XrltWVK1fwHz58EB0dHR0MCgraBwKB5ng83vbY2Jj0 /v37laBQqHx7e/uIiIhInby8/N6VK1d8WlpaYNnZ2epTU1NYeXl5WTk5ubH+/v6poKAgx7S0tNLS 0tJTLS0tK7m5uWYQCGR0cXFx6q+//mptaWnR9fX1RW5vb7Pn5+cJrq6uszExMb4gEKg8MzPTW1VV dVNaWvrdoUOHxNFotGpoaOj0iRMnFCwsLO4zmcxJYWFhqo6OzvWxsbG0hIQEGgqF2rG2ttYfGxub k5eX10tLS+OoqqrOJyYmyuvp6U1HRESoubi4cEdGRsy5XG5/aGio2djY2Pa+ffs2sVissqGhIU5L S+tgX1/fKwkJCQlJSUk1cXFxXn19/QAcDgcdOXIErqCgIOjr60NtbW2N29nZPY6NjV0wNDScLiws 7FZVVTU3NjYWY7FYHGtr69MQCGQtKSkJIyYmhlRQUNhmsViQyclJYyQSyTx58qSZqKjo/s7OzkYj IyNMT08P9cWLF7afP3+ep1AocD8/P2MHBwd3Op3OePv27dL4+HhWWFjYGQkJCS0QCMSS6a64CwAA IABJREFUkZERp1Aoc319ffCHDx/yjx49Sqmurlb39fXVxWAwIBqNtvPs2TNvKBQqgUAgNAgEQg6F QpE/fvz4jadPnyopKSkBrq6uPdXV1bebmprmDA0NUaurq2Xi4uLY9vb2nwoKCtMvX770OnPmDBSH wzG6urq2VVVVQWAwWLC9vU2XlJTUevTo0fTZs2ep9vb2CoODg8Orq6tMbW3tw3FxcZ+7urrEdXR0 NjQ0NCx4PN4aBAKBE4nEJtDGxsaF3d3dORAIJNnQ0IAwMzPD7O7usnV0dEgoFOreyMjI6/Lyck5O To4kBoOZHx4e/gEAAHDlypULpqamW4GBgT4bGxvw58+f9wYGBor19/ejbty4YUOj0XLhcDhTTEws vrW19b2Xl9cUg8GI1tXV/UGj0dTDwsKqdXR0lpOTkyW+fPnihsViMbOzs80GBgYBKSkpBCwWy3j9 +jXX29u7MSMj446kpORCXl4ehEKhIJhMZr2VlRVLTk7uCY1GG2tubi7U0tJyU1dXh587d67SxcWF r6OjY+jk5PQZAIBrAAAw9fT0pjMzM9EiIiIqOjo6DBaLpTsxMbGqpKQ0193dLYXD4fo/f/6s/uLF i6NgMNjwf9lxvb29R0pKSgz29vZ2qVSqrLu7O7e7u3s1MTHxRFVVVaOZmZkyEokUlZKSwq+uro5T qdTB0tLSrZGREQUpKanF6elp1adPnxbW1dUFfPz4sUcgEHDn5+ffT09PRwoLC/NkZGQCORwOKCAg 4OujR4/MhoeHOR4eHnw5OTkXEAgELC0tNTo4OEgbGxvXpqWl6dDp9Iy5ubnbEAiEtrm5STM0NJTd 2Njg4/H4mZqaGoinp+dxSUnJPVNT0/7v37+TKysr5ZydnTcGBwdJgYGBkgQCYbuurk720KFDaFlZ 2XA2m10CAAAOCoVK/fnz57uHh4dyU1PTorCwMHd5eXlNVlaWZmRkFNfV1VXc09MzxWAwJObm5miv Xr0K6erqemtsbKxTU1MzlZaWhuBwOPCioiJDGRkZjI6OTmZ8fLxzeHj4JolEWqDT6Xbu7u7CJBJJ xN7enpSbm4ufn59vTE5OBlGpVBAOh6Oi0WgJFxeXrc+fP495e3ubNzc30968eROztLT0emVlBX33 7l2JhoYGAAaDnTIxMXlcXV0tZmtri0hKShr39/dP+49UrIPBYCwAANsAAIgCALA9MjJSgsPhsKam pj0oFIqmq6tLEwgESCqVavvw4cMdMzMzxdjY2K6nT5+aa2hogHt6emDHjx9vraysnAGDwd7d3d0t 9fX1jNu3b59oa2vrdnFxMRMRETHe2NgoFxER4fL5fFsLC4vBf/75Z1JBQUHu+fPn2fv27bstJyf3 4f79+0dwONzsyMiIiIKCwrC/vz9yaWlJNDw8XOb+/fsCDQ0No+npaQgAAEBJSYlyR0dH96NHj0Ri YmLocDic9+TJE2pRUREKi8U+evbs2Q0CgUDNzMw8h0Kh3BYXF5O5XK7W169fy65evXq+uLi4VVtb +8+9e/c4jx8/NldXVzegUqkwHA4H2rdv34Curm5NTk7OYWlpaUsAAICdnZ0NcGFh4drCwoLWsWPH rPbt2ydmZGT0mkaj2U5MTPiRyeRvs7OzQlevXhWJjo5WaW1tDXr58uUTHo+3JBAIuPv27ZOoqqqa EhISqk5LSzt0//79AQ6HQ2az2Y0YDMZCTEwsHgwGA3Nzc1IPHjxQ5PF4ICEhoZ1bt261vXv3ztva 2vqkoqKitqenp0xYWNgOnU43W11dzYHBYDxra2s5Z2dngqSkJItMJmtcvnx5KT4+Hjw0NLT37ds3 vKKi4pf19fXxgoKCF35+fnFqamqQ5eXlqQMHDiBaWlr0ZGRk9gAA2AcAwN8AAHyrra31UVBQUIFC oUJgMFhoamoqU1dXd6O+vn5udXWVq6SkFBgVFWWXlZWV/f+HR1ZXV8traGggBgYGwN7e3ntGRka0 V69epTo6OlZUVVXJPnjwoOrAgQNddDr9j6ioKG9mZkYkNjb2cWBgIGl3d1c2ICAADIPBzj59+tTy /Pnzv01NTW22trbeb25uGvf29oq3tLT0ZWVl1c7MzIhmZWXVJSUl0bu6umB6enpfVlZWho8ePdrb 3t4+Hxsba5iSkkK7c+cO3tXV1XpgYGDi77//lqFQKO03b95s7urqIquoqOzeuHFjiEqlisXGxvb0 9vYO2dvbcyYmJtYkJSX1OByO0z///KM0PT0tJCIiIhMdHf16cXERsb29XVpbW/uWw+EwyGQyksFg kNXV1XVramqmc3JyqIuLi1/m5uaGDA0N9REIxGZSUtJBGxubt+3t7eqJiYkCOBwuBgaDgYCAgO7C wsIVGo3WmJeXd0RTU1M0Pz9fi8vlbsJgsI91dXXKFApFFgAAYHd399WJEyeQZDJ5SU9PbxWPxwO+ vr4oMpm8m5GR8TAlJYXx5s2bGBaLNUwkEhG1tbWLlZWV4JqaGg6RSCxqaGjQhcFgCqOjoyoIBGI7 JibmLh6PTyCRSL8cHBzOhYeHRwIAsM1kMvNVVVWZxsbGbdHR0TBbW1twVFQUqa+vz+zp06f0/fv3 Ww8PDzNjYmIsBwcHWRwOBykrK6t/48aNradPnxrS6fTV+fl5MWtra1ZdXd0vUVFRDpPJBAMAAEci kTxhYWH/R48ehVZVVTHxeHx4T0/PZnl5+dErV64cWlxctPn9+3enrq6u7MePH7ckJSUDeDweKjMz 87OysrKoo6OjEBwOB3JyctQAAAB0dXXvBAcHlzc0NLi/evVqeWtriy0hIYEaHR1Fs1is4ujo6KcX L15EgUAgYGxs7C9ZWdkDAAB8EhERkeNwOKALFy6EBgUFKVlaWqIIBMIsGo3ekJeXX7WxsWECAMCW k5PbcXBwwPr4+AzHxcX1nzp1ahRsZmYmQyAQqKdOnWq3sbFJn5mZeSYjI0Pp6enpwWKx/m1tbXtU KhWnr69Pi4yMHL9x48Z5EAgEEIlEjJWV1aNDhw65SktLO8fFxX1pbW29PTk5Kf7s2TPu3t6erqen Z+PU1NT7iYkJ1K1bt05//vw5s7u7e6y2tnYxNTV1kcFgwP755x/LX79+0V68eAEzNTVFnDhxAn/y 5Emopqamqb29vbment7FsbGxhq6uLvmnT58K37lzh5+bm+vC4XDGIRAICQaDmZibm3ebmJg0j42N 0dvb2/GFhYVPYmNjsQAACAMA0AcAgOD58+elLBaLCwAAnclkqlhZWWn8+PEDq6ura2lvb78RHR3d ICcnhw8LC4uLjY2NUVdXf1hXV/fC09NTQUlJCaGoqIiwsbHR0tPTS8Tj8YXv3r3Tff36NS8vLy9N Xl5+DQqFilOpVJaPj49CW1tbckBAQO3Ro0dZHh4e64qKiiwikTh37969L/7+/lX79u2TgUKhrN3d XW5HR8f2+Pi4MAKBYGdnZ/9FpVKFTp8+vS8nJ4ft7+/f/J9VFAEGgyVGR0fJq6urWmAwGFhZWWGL i4vzJyYmqIWFhRAAAAATE5PQtLQ0CyEhIX55ebnGysoKTUhISFhXV9fewcFB4cGDB0MRERG2586d +8NisUCxsbHWqqqqUkgk8rCjo+PRmZkZsEAgYBobG9t3dna2xsXFuT548EB3a2sLSiAQ6KampgZm Zma8tbW1H11dXZcXFxchHz9+1Lxx44b1ysqKmpKS0p6amlq5jIyMe0BAwERdXR27vLx84cePH/vQ aPRtPB7foqysnGlhYVGxsLAwm5SUtGZsbDz1+PHjJ1VVVRJqamq6FhYWisPDw+nt7e3hlZWVmfLy 8szPnz9T1NTUtq5du9YLBoNXGxsb5wQCAQiNRkvcuHGjpqOjA8jOzga1tbWpT05OljQ3NycCACBu b2//9/fv37udnJw6kEgkjkwmI1ksFtjQ0PB1XFwcwsLC4tDW1lYtjUbbplKpe2fOnJnKzs5eu3Dh wlV1dXU1f39/yNLSEvj8+fMv3759uxweHi6roqIiIy0tbbiyslLC4XDWi4uLS16/fv1TWVnZo6Wl JTsxMXFDV1eXLy0t/UtVVdUYBAJBiEQihsPh8D5+/MiYmJhgra6uRkxMTNCysrJIcXFxpp2dnRPJ ycnU7u7u/ePj416bm5tDHz58sEUikYPPnz+nzM7ODhQUFHzm8XjftbS0POFwuKqqqqq5u7t7+dTU 1OqXL18Ujh8/3pGcnPxqcnIyRFxcnG1vb+9EpVKh29vb0PLy8s7Hjx9DjYyMrq+vr58VFxdfy8zM tN2/f78AtLa2Vvv8+fOmBw8eeGIwGPzIyMgXDofDUFVVVd+/f3/5zZs3V1xcXFRgMJjlwsKCkIKC gkBGRuZ4VVXVO1dXVy0SiTQ4PDw86ebm5j0xMTFrZWVl7+XlVeDj4yO8f/9+RxqN1mhjY+Px48eP SDExsdsoFIqvrq5O1tbWFr98+fL3wMBARXl5+Qt8Ph/E4XB6m5ubOaamplv//vvv9L59+zCVlZVS SUlJJ+h0eo6lpaWqnJzcYkFBgczy8jLS3d1d5tKlSwthYWGK0tLS0unp6ZVaWloob29v7wsXLvxj bGxMZLPZ2u/evcNPTU0JjIyMuiUlJfnNzc1uzc3NL/F4PB4CgehtbW0NKSkpne/q6krF4/FnoVCo nqamZjSdTleIjo4ujYmJMXN0dFSQl5cXuLm5Dd25c0dtcXExBAAAGAAAHDAYjFhbW+uXlZV1vXjx 4jUsFjv37NmzykuXLt1pa2sTUKlUt4qKil19ff25169ft71//165vLwck56evoXH40X8/PwcU1NT fy8vL/esrKzI1NbWvgcAANi/f394fn7+6tmzZ+VmZ2ctnZychtTV1WULCgr4W1tbW3Jychgikfiz pqbG7MiRI4Rfv375rKysIG7dutU3Pz+/D4VCoXp7ex329vaoNjY2DXg8nuDr6ztOo9GOnT59OtTE xCT58ePHMktLSy1ubm4eQkJCSBaL9UdBQcGWQCC0stls8Pr6OtPW1tZhfX19YHd3l2liYnIKBAIB GRkZzy5duvQYDAYLgUAgwNXVtXxra6slLS0Nr6GhgZWRkeEwmUydycnJJgwGg3FycvoXAADAzc1N +P379zQAALr4fP6MlJRUcGxsLPbhw4fcK1euuOro6JAmJycldHV1uSUlJZKKiooNL1++TAaDwYq3 bt16JCkpuXz79u0zPj4+nxobGxOGhoYy8Xj80aysrPeOjo6kzs5OmRMnTlxJSkqKe/jwofLLly8p 2dnZasPDwzfa29s/vH37Fvj06ZMjGAxW1NDQKImPj4+bnZ0NnJmZUTx58iTM0tJSYXp6emZ6enqZ yWQKdHV1xTs7O0l2dnakxcVFlJ2dnfV/CLFFQUFh3cHBwTAkJMS5urq6y8LCQtre3r7/y5cv2G/f vjVRKBQrDocD1dDQmGMwGKJaWlq0wMBADzwev/vp06ctRUVFOQkJCW13d/e3kZGR0t7e3g9ycnLe Hj58WO7SpUtdSUlJjPLyclxgYCB/a2tL679247LCwkJLQ0ND6MzMDC03N1f/8ePHoyIiIszFxUV0 Y2Pj2sjICJRIJJ5zd3f/SiKRFPb29pAFBQUTXl5etmQy2QMGgzVjsdhpQ0PDKRCVSq2DQqFQOBwu AIFAABwOd9nY2PhRU1Mz3dDQUDkzM+Nibm4+kZqamgsAALC0tFShoKBgzOPxKFwuFygvL/8lKysr 6OzszIyIiPhZWFiYsbKyQgIAACCRSKgHDx54otFoRQqFkvn161eyo6MjRl9fP7W5uTns4sWL8wMD A+pCQkIhIBBIHgwGL1+7du27sbExJjY2VrC8vHzuvwz3N0QiESEvLz+dlZVFp1KpSCaTyaDT6fCQ kJD9/v7+FWQy+RkAAMD9+/djT5486SAtLQ3DYDA7AwMDogAAABISElLj4+O0oKCg3bi4uC11dfWd Q4cOCa+vr2ttbGywCQRCpa+vb8Tu7u46CoXSAgBga3Bw8CcAAAAWi528fv06LCcnZ7+Ojs7EwsIC bHt7W0tISIjP4/HoSCQSw2Aw+CQSaYNAIEzx+XyQoaEh/M6dOyRlZWVIX1+fflRUVFN/fz/t6NGj OjweT4LJZKo+efJk8+bNm6u9vb0sOzs78vHjx/GmpqZ0FArV9eDBA2cVFRV5JpMJnpmZ2bO0tNx/ 586dD66urmtJSUkQExMTkKGh4aiNjc3x+vr6Il1d3R1zc/N4gUAAmJmZlXZ3d1Nu3bplDQAA0N/f j+rs7NR3cXFJv3v3roKVldV2Z2enxOrqavPFixeL1tfX4+Pi4mT8/f1HEQiEhba2tmpFRcUsHA5n Hj9+3HBra2unrKyMZmZmxqfT6dDS0tJhLpeLm5qaopWVlZ0tLi4uu337NtbAwKBmd3cXmZWVBb5z 5w7GwMBAUltbW4jL5W6FhYX53b59u9TFxUVidXV1NTQ09LacnJzX6Oho8NDQ0GpMTIxWVVXVUmRk pOS5c+fWXr9+vSEjI2NKIBCYeXl5MBEREb3z58/X6+jorM3MzOiVlZVZ/vjxo8Xe3v4Sh8MZGxwc /DA/Pw8nkUgsGRkZycXFxZarV696wmAwVzAY7DoxMZEEBoMFIiIi/3t7a3h4eOHQ0FAUDoezFhUV tWOxWAQIBAIhkUijYWFhYqdPnx738vKyzc/Pb7148SJmcnJSWF5eft/w8PAUCoXikUikETgcPm5j Y+NBoVCMPT09O/755x+llpaW1Y6ODsSZM2eW+/v7uaurqzAAAICUlBRLKpUqk5OTU25hYWFgZWWl lJiYOCYpKbkbGRl5Mj09Pa+1tXW9oKDgspubW0dAQADdx8dH6PPnz0srKysazc3NmOvXr7cDAAB8 //7dxNHRcWFwcFAxLi4OpqCgwNrY2IATicSRoqIizfn5+dqxsbFTZDIZfvfu3W4ulwsuLS0FGxgY jI6OjjrOzs6KjY2NSYO4XO48CAQSI5FINdLS0qZMJrOHy+WiEQgEz9/f/01vb6+ruLj4ZmxsrCEY DG598uSJSUxMDOnYsWP6MBjMn8vlLlRXV3+7deuWFIPBIE5MTKDy8vLoDx8+VBwfH1f89u3bUGho qEpaWlr+3NwcOC0trZDP569ra2sf6+josMRgMNHV1dWvvLy8rrHZ7JXGxsafKioqICUlJQcCgVAh Kiq6AgAAMDk5KcVgMMRVVFT2zM3Nz0VHRz95/fr1z8XFxUgCgbBgbW19EQqFqpJIpEvS0tJ/VVZW hqmpqVkTicRRPp/vCoPBiCYmJkhJSUlzCQmJnWvXrk1AIBB+UFCQiry8PFtKSgrz/v37DwoKCrJG RkaNSCQyp6WlpRMAAEBbW1vs2rVrXXt7e4jS0lIlLBYrvrm5GeTv75/14cMHSTQarX/hwoUfoaGh isbGxnQdHR2R/Px8SlJSEhGHw1F9fHzkzczMlKSlpU+TyeSS2NjY+EePHplfuHABLxAIEiQkJCI/ f/58BQKBrLi6usYaGBhIFBcXOx4+fPhjf3//ES0trZLg4GD/iooKCgwGA5SVlRsPHTp0dG1trbej owNZXV2tnJCQgNTQ0Nh1cXERe/r06XJJScny+fPnnS9fvsxdW1sTO3PmzI+7d++a3rlzZ4TBYAiS k5Pda2trUy9evFgEBoPFAQDgX79+/SmDwRBydXUlbm9vy7q5uXGSkpJ6Xrx4cQqNRh/5r9zlPZ/P B86fP89eWFgwqKqq6jIxMdmfnJzc8OvXrzZra2uR48ePO5HJ5OWSkhLkp0+fZMlk8mkOhzN+//79 AhwOt3v9+vVXEhISORAIhDk7O4sVFRX1BgAAiI+Pj2Kz2SafP38WExER4WRkZNDevXtHvnnzpqC/ v58oKSkppqWlBV9YWCB7e3vHAwDAS09PL79w4YIZEokE2Gz2QENDw15aWlqrqqqqora2Njc7O9v8 /v37v06ePBkiEAhAY2NjFZubmwxFRUVsQUFBR01Njb6KigohNzc3UVJS8j2DwXCvrq7ut7Gx0ePx eLtcLhd4+/btr7CwMAcwGEyTkZHRZrFYWwwGA9zd3V1AIBBE7ezsFLS1tZ3U1NRmV1dXbcXExNKa mpoIHA7nQElJyej4+DgvKipKnkAg9Pj5+blJSEgcY7PZZAgEIopAID7u7e2dAwBg09ra+h6NRsMO DQ25AACgKhAIQBAIRDA2NraMQqGmGhsb20EgEMba2pr66dMnq729PWk+n9/55s2bR5GRkQWXL19e FxMTw42Pj0O5XC7i4sWLwKtXr0Zv3bol9fXrV8UXL14MFBYWHltbWxvEYDCqcDhcG1JbWyu8ubk5 6+zsbF9UVFTwf7kOMyskEqmFQCCQrK2t1UNDQ6VFRUXJYWFhtm/evFlJTU3lHTx4kAwCgTbgcLj6 2NjYgK+v7xadThf5+fMn99SpUyocDmfUwcFBfnFxscbMzCzmypUrv2pqao6JiYklWllZnXB1dZ3F 4XCaEAhE58mTJ5NmZmbUlJSUVlVVVSELCwv77u7umt7e3n+lpKS8AQAQZbPZnOHhYSFVVVWxvr6+ xR8/fgDv3r1DyMrKaomJiQmRSKQNDAZjKCQkZCUQCEDa2tpewcHBK7W1tetKSkq0gICA2MTExOq0 tLT2+Ph4h9TU1Mm4uDjpoqKiMW1tbQU3N7dtBAIhrKGhIfn7929BQEDAnJmZ2UR8fLweBAIZuXnz pq6lpaWcuLg4Ijc3dzA6OprHYrGampqa6tvb27vfvXvnQaFQ0rOysrQuXLiwxeVy0b29vdS2tja7 1tZW9MTERLqTk5M4AoHgJiQk8B8+fHgmODi4DY/H4/38/KBfvnwpMzU1/d3V1bV34MABvIqKCt3U 1FRKQUHhy5EjRzDFxcWKf/31l52Njc17ZWXlo0VFRWPfvn2DNDU1DVy9ehVLJBIXSktLQX19ffSF hQXG5cuXDfb29pjBwcE0Z2fnVh6Pt2tpael5+PBhq5ycHMDBwWHO2NiYKSYmdpxOp+cQicSRnZ0d Zl1dnURwcLC6i4uLGY/Hgx8+fPhgaGjoh8LCwjk/Pz82HA4Xs7a23lFUVCR9/Phx/eTJk6KvX79e 1dLS+p6bm5vv4ODg/eHDhxo+n08PCwvzFhISGnF2dpbYt29ff1lZmYyVldWsrKxsn5GRES8gIGDv 8+fPJfr6+upcLndAVlYW0dvbO1pYWOhw9epVifb29j5hYeEuJSUl956eHnEVFRW2mJgYX1NTkxgf H8/38PDQxOPxKA6HA8rIyBgwNTVFz83N7V6+fFn81KlTMfr6+vC+vr4KGRkZIW1tbZympua6mppa 3cDAwJqysrKosbGxcnl5Od/e3h47Pj7eW1VVJXnq1KmJqKgo67KyspHu7m7C1tbWYnBw8DKVSjUC ACA3OTn58M7ODj0yMrKKw+GIX7lyJUAgEMwWFhbOwWCwdU9Pz+WmpqZgLBY7pKamJiInJ8coKSlR DQgIYOrp6UnyeDwZERERTG1tbZ6RkVF5a2srw9HRMeratWuhFy9e9D537hwsMjLyo62trYm4uLgN j8dbzcvLW0hJSRFFIBAgIyMjNREREezOzs6qqKioSExMzGE4HI62trYmpKamUmpqauRv3LhxUV1d 3TgsLAyORqNXHj58GPDhw4eF1NRUIwaDITI0NLSakJBQefjwYRcQkUgswmKxHqdPn447f/68cVxc HPPhw4czcDicZGZm5t7Q0NBsY2NjeO7cuY34+HgleXn56Z6ennkDAwMDYWFhLp/PB+h0uvybN29o MzMz2H///fcghUKpCg4OXldTU0MHBwdPGxsbu3/9+nW2oKCgwcLCQqi8vNzM3d391+DgoIGHhwda Tk7up5+f34n5+XkOBAIRqKqqWldXV1csLi7OhYeHn9ra2iKj0WgeDAbz+w/1rAAAAAgEAqC5ublR Q0Ojd21tzaanp6e8sLAQcHJyQgQHB5vduHGjY2RkRBYOh0uw2WxqbGys5smTJ/cJCQk5FxYWpuXm 5oq9f/+el5mZ2bW0tCQBhUI1JCQkmp48eXKTy+UWp6en001NTQUSEhIuFhYWHp8+fXrs6OiIt7Cw GMDj8SpDQ0PT/v7+SmFhYdsyMjIwCAQia29vz/f29l7T0NCgycvLG5w/f17o2LFjf8TExHqbmv4f U+fZ1eT2df0rhTQSQggdQgm9E0AgVCnSERAREFEUDyrYFSyoB2lHPaIg2LAgogcBK0pRQXpv0nsJ EFoKLQ3SnheP/zHu/QX2GPvFGnutNedv/sL9+vUrfn19Hdzd3T3FZrOL3N3drSYmJqDt7e3K+/fv 10Sj0b1bW1tP6XT6OXl5eSSLxWKJRKKBiIgIuampqenr168Tw8LCAgsLC78JhUK+jIwMaGJiovP4 8ePhNBptIDk5eYHD4ZhcuXJFkclk8vT09H4vLy+v1dXV6REIBA6bzYYcOXJkz8DAwHcejwfW19fX FolEqIaGhseVlZWyXl5e9OPHj4skJCQ0Xrx4oauhobG1srJC/xN0qp2bmzteWVmJv3LlCqO+vp4Y HR0NiESiL3/aL5Xq6moLSUnJnRgMhjMzM9P35MmTql27du1ms9l1TU1NrKioqN1SUlKCd+/eDVy/ fl2hvLxcQV1dXVZeXl4wOjo6WlBQgDA1NW1bXFyU+qPsxBQXF1/Y2Nh4h0aj/a9cuZJ48ODB6ZSU lPDXr1/jXr9+Pb1v3z6tW7duDRgZGXWlp6fvMDExWVpfXx/+9OnTeQkJCYG7u/va3NwctLy8fEJL S2v3gwcPmvF4PMTX15ft6OjIjouL4yMQCCGFQhm2t7dHvXjxAvP69WtvbW1t2uzsrI1QKASxWKz5 v//+u8bAwAACg8GEDx48MLl9+/akWCxeHRwclPby8pIaGRnpZrFYUDc3NzKBQIgBAAAQCARtKSkp TV+/fh03NjYe6O7uNklNTV0xNTXdc+/evR85OTnP8Xj8z0ePHnWEhIRE9/f3Z7KGYEmnAAAgAElE QVTZbPOEhISRqakprYCAgGKhUOg9OjqKw2AwVQUFBUZ/LPa4vLw8bSwWK7m4uPg5Ly8PkpKSctLU 1LR+YGBgd0dHx1MikagAg8HEcDjcHAaDiefm5go3NzehaDTaZGtri3br1q0R0NTUVElYWNiKi4vL 6sePHyH29vZsGRkZhYyMjNjV1dVaOp2+Eh4evjo9Pb0sFAq5d+7cgTMYDEJzc/O4iYnJdlBQkLKm piaxpqaGbmxsjCMSiVpCoRDE5/Onz507t6qlpbWora0tNzY2tn748GFJOzs7ldbW1gIwGCzx+PFj jcjIyDU8Hu8THh7eW1ZW5sNmsyf+/fff8rt37x7c3NxUfPz48X+xsbExs7OzQ8rKyuz29vY5PT09 9ubm5iKBQNijpqY24eHhMd3Y2GhBIBB6PDw8lp4+fYr69OmTGRwOXy8oKOAODQ2Jk5OTqWAw2F5G RkaBQCC4z87OVtfX19MgEAjIy8tLuLa2JnB0dFyemJhAVlZWAhwOBzo1NfVpz549ZsPDw7Dg4OBr mZmZGT4+PoZ/4rZZKBQKfPLkScDQ0HBaWlq6RVNT0w6NRgvHx8dRcnJyPBKJlE8kEo9ERkbOZWZm GpqamjY2NjYedHZ2XktOTsatr6+vW1pa4tlsdtvg4KCsvb390sjIiGhoaGjAwsJiz/j4eIORkZFr e3v7JA6H266qqlKNiYkR1dTUMAMCAhwUFBRwdnZ2+WVlZQIqlerm5+fXnpWVJZ2UlCT36dMnaE5O zoi1tXWzvb39jd+/f4+JRKJpZ2fngyQSqQ8Oh8///PnTwtDQcPjNmzcDTk5Oe2pra/OHhoakLSws 4LKyshqmpqYnWSzWv/n5+aBjx46FQKFQzf+tR01NTYsUFBRW/v33X6hIJBLl5eVN2tvbY/bu3Rsh IyPzGY1G9/369cv5/v37gJeXF/vjx4+bz58/dy4oKJiCQCBjhw8fTufz+d2qqqoTW1tbiMbGRkpt bW2Nl5eXvrq6uoWVldXI2toaxNfXd0hJSWnbxsYG1traKn/jxo0EJpP5/O3bt/14PJ60vb3NjIqK Snzx4sXN3NzcLRwOB1RWVuZMTU1d4fP5Ijk5ufUPHz7ojI+P8+Lj42W+fPnym8vlbj5//tzVwMBA qKioONTc3GyUm5u7JRQKyxgMhgafz1eAw+ETFy5c0D59+jTIzs6OUVJSIpOZmSkxMTGBgUKhdnA4 XAyFQrlcLheMRqNJ8vLy9Y8ePSrcu3dvgZycXC6NRosCAGBDJBJNAACgcuDAgSIoFPqNTCaHa2pq TpWXl297e3sr/xmMWkIgED0+n/+1paVlRUlJiaCjo2MvFoux6enpMfPz8wGZmZnkgICA0qtXr1LJ ZPLu2trahyUlJboDAwOEzMxM5szMDB6FQkmj0Wju+vo6lEwmowEAAE6fPt3/7t278Lm5uU9gMJj3 8ePHsdraWlJmZiY0JiYGCv6TmruBw+HQvb290ikpKTAAAEYAABBNT08zdXR09lpbWw9sbW0pXLhw YUVaWppFpVInX79+vTg1NWV04cIFwNHRkXH37l3Gnj171ng83u/o6OhsOp0u8fz582BJSUnUkSNH 5BsaGpQRCIRUd3f3BzqdLv3w4UON/fv3q+BwOJ/AwMDOf//9d1EgEICoVOqaWCwGPXz48H1OTs6N 2NjY40+ePHm4vr4+mpaWdsfR0fHcyMgI+sOHD5sDAwOzQ0NDYgwGoxwaGkoBAAAtKSkJv3v3Liwo KIiuoqJiIRKJxk+dOiWDw+FszMzMPM6dO7doZ2dXjEKh1pWVlZm3b9+G1NTU8La2tkDl5eXC7Ozs fgwGM4tCoQQqKipwCoWyzWAwEKurqw18Pl+ooaEhtWfPHqqamhptdXUVEhcXp4ZAIOTNzc1d8Hg8 BAwGGxEIBJP8/PwfPB5PvqamRmNlZWUJDodvnj171iU9PX2tt7dXtHPnTsnPnz9vXLly5RsOh/vr 1atXixAI5ISRkVHquXPnGKampsPu7u6pKioqrkFBQX/NzMyMpKam4jU0NE7u378/YHNzs7C1tfWZ jIxM4/T0tEFpaekwnU4nkclkY3V19a7o6GheRUWFjFgstq+pqak5efIk18bGBldRUfHc3t7+bXh4 OMPKyqrcwMCAZWRk5AMCgdbl5OS2tre34a6urjfodDrg7e19av/+/SMUCqWyrq7u+f/VR/T09Jj1 9fVJAwAAFBYW0ng8Hqyrq2v7/fv3b0EgEOfGjRsay8vLawAAdHd0dCxGRkbiOBwOeHFxcQOHw2kC AMBMSEj4raen1/Hw4cO1/Px8hoyMjEtjY+PGysrKxOXLl4fy8vI6raysjHV0dDbd3NzOMplM/MDA QLOMjMwFAAAc3717x5aQkFC4ceNG1MDAgFFeXt6Offv2ISoqKnK+fPnS39DQICcQCMABAQGTHA4H pqenZ/DlyxfVgYEBTU9Pz/q8vDzljIyME1AoVLSxsdFnbGz8t1AohCwsLMBsbGzCLly40E2n0xcM DAyy79y5w7KyssKMjIxIVlVV3WxoaKi4c+fO5+7u7v6//vqrYGVlxWfv3r0FP378IC0vL5uy2ez0 ra2tKYFAAOZwOAMkEomakZHh5+DggI+IiCCdO3fOeGlpqVooFC7QaDTm6upqz6tXrxBMJlNeR0cn YGpqqrG9vT3p0KFDMoGBgQNycnKr0dHRzOXlZWRKSkpvWVkZ5sGDB2EXL17syc/PZ4SFhYV4eHiY AwAASElJLQ4PD0/HxcVV7t69W87Nza2SSqXKUSgUmIyMDKy4uHjN3d29payszA0Eh8O7mUwmLCIi oqKgoAATHR29kpeXZ0UikXjl5eVILS0t9z+sv4SKiopJT09PPRwOpwgAAECn0/FWVlbwxMTEJQ0N jfm4uLgdGAxGFgKBiP38/AY1NTVHlJWVN3fs2KG4trYG9fDwMFhcXFzV0dGxnJ6e7qHRaICFhcU6 GAx2uH79+uOJiQn5Dx8+hAMAADx+/Pjnjh07aPX19YqqqqrsoqIibV9fX1BJSclWaGgoraWlBfTs 2bPjAoGgd3FxkYfFYueFQqFSdXV1DQqF4vr4+NxycnJ64ufnN3rnzp2gvLy8PF9f33/BYLCkSCQC xGLxLQAAop88edJz6tSpkOnp6c+zs7NzeDx+e2NjY2FqagqtqKgo7+rqGvX3339nOzo6qra0tCzp 6+tPEwgETGtr65K5uflOPB4v0NbWNhkeHl6nUqm9HA5nxdvb2/njx480RUVFiq+vL5FGo1EoFArS 2Ng46Pjx493S0tJfEhISQl6+fDkZFRVl8+DBg0+3b9/OAQAAIBAIpQcPHmy9efNmnKOjY56uru7a o0ePbGZmZjqIRCIZAoGoNjQ0fHN2dt5HpVI/qKur75mamqrn8/kjCARC59SpU6hLly4x7e3tj7W0 tCRqaWnpZmVlbSUnJ4cYGBiUlpaW0qempgTZ2dnTFRUVxSgU6tf8/PxAXl6eZExMzBSfz6dtbGyo nD9/njI+Pm7w+/fvPXZ2dvc/fvyoraKicvZ/BUAoFA7o6+u3Hjx4cCYoKKhGX1//ybFjxyra29sl ent7w0ZHR2s0NTXpJ0+eHHF3d8c2NzdDxsbGVCIjI+n6+vpodXV1CTgc/gsEAl1vaWkZpVAoLb6+ vmMgEOiYnJycxtLSEmVqauqVWCzW2b17t8nU1BQBgUBgR0dHe1EoFI3BYHD7+/sVSkpKGFwuFyYl JSXKzc1Vampq6hoYGDDd2toCgoODW7u6uvAkEklPIBAwnZyczp8+ffoveXn52UOHDu1samrq9Pb2 jmWxWGsDAwO1EAhEem1tjefl5eWGQqGMHj9+/MbCwkJCQUFhGgKBgBcXF/Wqq6vh4eHhwrW1tXk1 NTXv9fV1plAonAwMDOweGhp63dPTcxWDwfQkJSUhX79+/fD/vBeXSqUONjc3vzcyMtpRW1v7G4VC aVdVVSk6OjrSHB0ddXt6etZcXV2H29vbe/z8/JJCQ0OfeHl59fv6+kalpqb2isVim9LS0jk1NbW+ sbGxgKWlJXMJCQng4MGDJfn5+db79+/vIJPJ27a2thp2dnYnqVTq0/r6et7ly5cRAwMDWlZWVhPu 7u71vr6+O/7kJUxBlpeXD2AwGCoSiYS9fPlyLDc3dw8cDpeLjo6W6urq+iEUCsdkZWUtk5OTC969 e8dITEyEGhkZKaqqqgavra11vnjxgnbt2jUNBweH33A4XAuFQpmBQCD83r17Zerq6oZaWlqEFhYW GCsrK9ji4uKWkZGRze/fv5tSU1PZMTEx+PT09AkHBwdDd3d3k8jIyDgwGKwqFAofWFtbH3dwcBiK jIwcCwkJeeLh4fEZBoMRNjY2eslk8nZubi7xxIkTegAAQObn58fa29tHZ2Zmmtra2mRCQ0ONEAiE Ko/HezM9PY0SiUSib9++gYyMjDaVlZVRdnZ2X6ysrGS7urpqIiMjd4NAIOn6+voLnp6eL0Ag0KeW lhbC8vIyKiIi4kh4eHhJTk6OS0pKylxaWprexMTEcEtLi9a3b9+Gent7gaWlpUEYDKauoaGxMTQ0 RAeDwbDW1tbZ48eP39DR0dl5/vz5BRwOdxyPx4vhcLi1n58flMlkbtnb20c3NDQ0ent7+7u7u7vk 5+c/o1AoueXl5XpmZmbUmZmZF6Ojo7IgEAgaGRkZjcPhlrq7u1uePXvWMjQ0NCEpKUl/8eKF+Pbt 218iIyN3/f79G6OgoDBBIBBwpqamyhsbG1NJSUlL9vb2c1ZWVlv29vaLenp6AwcOHDATi8WNFy5c +PhnxVk1PDwscfDgQWk+n78yODjYjEQiJY4cOXK4t7e31tfX1zEjI0McEhJSu7a2JikSiWq6u7ur b9y4sZabm9tJpVKVvLy8zi4sLHx3cnJaiIyMnNvc3PxFp9P5MzMz1Ly8POz8/PxsQkKCLQAATR8+ fJgbGRnpzczMZLe2ti55e3vrVVRUsBoaGgSHDx/OAYPBD5WVlRuTk5MPXrx4ccnb23urpqamB4vF CuBw+KaBgQEHDAYj9PX1j62urk4EBARwv3//DhQXF2vMzs6+DAoKMjQ2Nt5GIBADMjIySiMjI8hD hw4FY7HY1oSEhB8PHjzIsrGxAaenp1ceOHDAOSYmZiwwMFAThULJW1lZnVZVVRXp6Oh0+vj4zElJ SYn9/f21TUxMNh0dHe+8fv26UVJSElxWViak0WhLCgoKOGVlZfD29vaTEydO7MdgMLcVFRUF8vLy XBsbG8OioqLXNjY2ynw+f3ltba01Ojp6MykpSeP69evbfn5+I62trQp4PB4aFRXFVFBQmJeXlxcP Dw+vFhcXC9bW1gAymdxbWFio6O/vrx4QEOB84cIFXmNjo4Genp7G0aNHBa9evRr38/PbxOPxlUFB QbYkEmnb19f3YHx8fN79+/ebRCLRsIuLCyo6OloqKyvr49DQkHZubq60g4OD4dOnT9UZDAYTJBQK u0UiUQ2Px3NBoVBSYDBYSyQSrQgEgtXCwsJ8f39/RT6fD3rz5k2Zrq6u7fT0NOTYsWOBEAhEpre3 9625uXno3Nxc++PHj0fJZDJ0dna2JzY29mZUVFQBAABAX18fsa6uTq2+vr4SiURCfv36RQ0KCjJp b2/vUFRURHp7ex/f3NykrKyssGg0GotEImnBYLDXHA4nCIVCid6/f19YXFwsW1RUZLe+vo559OhR 9+7du1XJZPKx79+/P7awsNDFYDBCCoUyx2azW4RC4W4SiaQZGRlZ89dffyncvHlzOyIiglpbW7ue kJAgNzY2JqGrqyt4/fq14N69e4FjY2NPoVAoUUFBwQWBQHC5XO5HGAy2RywWo+BwuBWdTv9Ep9Pf 6uvrZ+zbt68oMTER29XVJZSWluarq6uLlpaWZhQUFJxLS0tfnjlzZrelpeVvLS2tkW/fvikIhcIw EAgk2NjYGHv58mXH5cuXjUEgEMTT01PJx8dHXFVVNUkkEjUDAwPptbW17bq6ugpWVlZYDQ0NRxqN JvH169cOHA7XvX///jetra3vbW1tj5w/fz5hfHx8ycPDA/Hjx495FRUVLhwOt83KyvrnDwXpkZmZ 2cbv378Vz507BysvL68bHR01HhwclCCRSN+trKxiJCUlV7lcLvfy5cvbBAKhg0Kh6D5+/DgCDAYD 6+vrtzc2NuyuX79e+/z586MMBmNzampqgkgkqk5PT68lJSW102g0ua6ursCsrKz3VCpV+cyZM4i5 ublKZWVlbxUVFfC7d+9a3759y4uOjiZUV1d3X758OWhrawuUmZnZd/nyZTAAAEBISMiqpqYmFoFA gCAQCOPRo0cIPp8PwmAwD0dHR7Nqa2uxcDgctLi4OI1Go/kAAKBtbW01Ojs7V/ft2yeDw+Ecu7q6 rnd1deFnZ2crDx48mJKSktIeFhY25e/v/05PTy/74sWLXBkZmQU/Pz9wcnJyTVFR0SEwGDxdVFQE GBgYeAIAIK6trZ3+9u3bf2fOnDn2+vXrOVlZWe7x48e1AAAAc7lc8Nzc3CKPx+N++PBBNjg4WEFf X59z9uzZ9cXFRYmpqak+Mpm8febMGVMymZzB5/NJTU1N+oODgzQLCwu5jo4O5ejo6N08Hm+koKBg 2szMbPbXr1+TUVFRbnQ6vbW+vn715MmTX/h8/qCEhISRSCQaGBgYeMflciEaGhoag4ODorGxMZpA IAA7OztLGhkZOfL5fNDi4mLds2fPOL6+vngTExMjgUAAWlxcnFdWVh6XkpIK5PF4NBQK5Xjs2LHT Z8+eNZORkaHfuXMHGRwcDDp//vxCXV3dsFgs3jA0NHSFGBsbaxkZGbm9evUqW0ZGRiwtLa0CBoNl lpeX28FgMIfL5c5tbGwoubq6OqupqSk+ffp05PPnzz1lZWXvjx07dg4AAODEiRN9hw8frkKj0ZSg oKCsM2fOPMjIyDBls9mdT58+DX/x4sVvMpm8pa6uDjI1NTXV1ta2i42NVWKxWE2+vr44LpeLIBKJ Tqurq5N9fX2Nra2tgq2tLSqXy305ODiIhEAgci0tLZRbt27hJCQkNu7fv2954cIFmcrKytJr1655 sdns1cHBwf9MTEx2AQDAqaurY/+Bb3JcXFwweDweqq6uDjMwMFCxsrLy7enpGW9qauIlJyfnJSQk YG7duqVvamoqsb6+LtyzZ09PSEgIydbWNt3AwEB4+PDhDhqNpu/m5oaPjo4mnDt3Tnzt2rWhuLg4 K0NDw8itrS3ahw8fxisqKpT9/PwULCwspiQkJJS1tLSWxGLxDigUKmtqatqPwWC6lZWVQXJychtY LBYFh8M/29ra2sbFxbmMjY2Vubq6mtXU1AzTaDSxkZGRTVVVVWdaWppGTU2NYV5eXteBAweQf/DZ pUeOHAncu3fv7H///bclJSUV4uPjoyIQCFoZDEaPkZGRZEVFxbaJiYkclUodP3DggJ2enp4xAoEo dnBwuDQ2NnZbWlraGAwGw4ODg31lZGRKg4ODMQsLCwMxMTFjoaGh2mlpaZuZmZn+PT09Ddvb21RN TU0jBweHzSNHjqzxeDzW7OwsIzw8XFtRUbGpo6NjtaioiF9WVkbicDg/wGCw1MDAwLq+vr6Kv78/ 28fH56i/v/9MeHg4rKenZ37v3r1WqampM5OTkyRdXd3Zf/75Z7K3txfn4eFx6tq1a2seHh62tbW1 9b6+vp9NTU0PBgYGLl27do3x5MkTbTQavbljxw7m/Py8QE1NTUNJScnR2to6jEajgbFY7AIGg9nY t29f7h9k91R8fPycmZlZl76+/u7BwUG+pqYm++XLlz+VlZVjAQAAVldXB1NSUn4kJCQcEYlELVpa WrD8/HzdkpISsL+/P7C2tjbS0tIycvbsWZl9+/YpQaFQlrq6OtHHx0fBx8dH1tPTU4HP56/Z2dkR g4ODoYaGhpSJiQk4DoebS05OdvXz8+vJy8ubhEAgbCsrK0UAAPBLS0v9VlZWSA6Hoz09PQ2xsrIi BQcH56+vr6cjEAiunp7eTllZWeLS0tL479+/a/X19dUKCgqYp0+fPshisaaQSCSDwWDUBwcHx6BQ KKhQKBSampquEwiELjs7uxAvL68XHR0dtbdu3eqJiYlBkcnkKC6X20sikTYzMjJW09PTdVVUVDyg UOhNFov1DRwRESGhpqYW9eXLF9Xy8vJJMBgsv2vXrvt4PB5va2tLFovFS1AodGhsbKyivLx8ZH19 XZyZmcmWlJSUdXZ2/tjZ2Zn5119/SXZ1dUn39fWh/v3336uTk5NKFAqlzcLCwgkEAgG7du2ab29v 15aTk7vA5/ObPn/+PLS0tDTCZDKREhISJlwuFwICgah8Pl/o4eFBiIiIOLSxsSHX398f6OHh4Z+d nZ1nZGTEXFlZwROJRAaBQOi2sLDYx+PxVDY2Nj5RKJTFwcFBPWlp6f1aWlqnJicnqbOzs78HBwdb zp49C1FSUjJpaGgYwmAw66dPn3796tUrlry8/CIMBpN+/PgxcXZ2lmJmZgaYmZmVDg0NecPhcFZV VZVPW1vbhpubm+Ho6Gjvr1+/Kn/+/DmopqZmn5aWVsvlcjvu3r17prOz89fOnTsnc3JyJBUVFXGB gYHPAAAQ7d+/PwQAgMnw8PBKV1dX0erqKqmnp0enoKAAGRsba0KlUg8YGxtj79+/X0aj0XbW1tbK r6+vYzQ0NKT19PS2kpOTlTIzMzsnJycPvnnzZqqhoYG6ubmpWVBQcDkoKOigpKTkE0tLS/vU1FQF AACAHTt2mE5OTkrweDzmoUOHzg4ODjJSU1PNoVCo9cTExI++vj6uQCAAmZmZPaLRaJMoFMp2x44d n9BotB2LxXJmMBh6/f39an/99deGlJTUTFpaWnFbW9s4Ho9HHjlypMbExOR3ZGSkCAAA/Xfv3vkB AADg8fjI5uZmk8zMTLCrq+vggQMHdJ2cnM6rqKhgXr58uWJoaKiXnp5+lsViKTY2NtawWKwpoVDY dunSJdu0tLQlSUnJHcHBwU7p6emnt7a2ug4dOqQkEonmkpKSVOBw+F0UCqWyvr6+Pz8/X87V1XUZ CoWKqqqqOPb29k5isRhgsVgvGQzGu5SUlLbx8XEYCARay87Ozrt48eLL1tbWYRcXl0YcDic9NDTU jEaj+Xw+f5pAILjzeLwPEhISIl9fX3xzczP2+vXrPQoKCvusrKySvnz5EpGbmwtQKBREfn6++tra mnt/f394aWkpE4vFCu7du1cLh8PFZWVl3+zt7XHj4+Og2dlZ5rdv3xAUCsUuPDxcWiAQmOTm5k6N jo4iJicnpWtqatZycnJaRkdHaSdOnHiwtLTEra6uppw8eTIjKiqq5MSJE8u6uro4WVlZo+zs7A9b W1srav//2FtbW++6cuWKgpOT042ZmZmB7e3tb01NTfjbt28XCoXC1unp6d6rV6+2xsXFXc3Pz3/x 33//2Vy6dAn948cPD319fSAqKirpzZs3n+vq6kYuX76sraOjU52amlpUUlKSVFdXtwVhMBi+Hh4e KiQSSdLb21vRzMxsrrW11V8kEq1GR0efjIqKimYymSMBAQGmy8vLbE9Pz+mZmRmTgoIC0ubmpuCf f/4xlJWVRQqFQiGfz1/V09NzCggImO7q6pLFYrFSysrKajgczkpGRuZ3RUVF8eLiogQMBqs+cOCA ho+Pj5mCgoIZDocjslis1Pb29mVpaWmMvLz8LkNDQ9fa2tpBJSWlJUVFRWVDQ0OV48ePg6ysrNSK ioqaTE1Nd1RXV+MgEAjm7t27wzo6OvLS0tIztbW1JZubm/COjg6enJwczsvLq9vKympfTU2NpVgs Br9//358eHjYvKurS//evXvYK1euyCYnJ2NLS0vhMjIyqOnpaSwCgfBEo9EW2traG0gkkv/lyxeq m5ubuZ6eHvDw4cPhiIiIpKqqqm9Hjx6NNTc3t0cikctaWlrGHA4nu6ysrAyJRMo8evQoHoPBkCMi IlwvXrzYMzc3Bz937pzcnTt3VJubm9UcHR2xSCRS2sHBYWxoaGi7qamJWVRUtDc6OhqspKRUXFhY eGJhYeHbzMxM4cuXLxWuX79+Kicn5669vb1DUFDQNxgM9iIuLu7o48ePHzx8+HCDSCTCxsfHufv3 77ePjIz8cubMGXkMBiPgcDjjJ06c6Lx582Y8HA6Hubi4fImOjuY4ODi05ebmwlRVVQ39/PxGlZSU WOPj4zNZWVkaaDQasm/fPm84HL6gqqqqa2xsDNvY2GCh0WjKkSNHBD09PZT6+nrAwcHB6ujRozqZ mZnlf9yhUj9+/ChAIpELN27coJ46dWqqvLwc/PXr16DAwEDRv//+q6usrCzR0tKS5ufnd//BgweD FArllZ6enmRnZ+ckj8eDaWtru4vF4rr+/v7qsrKynlOnTo0mJiZCwsLCjh4/fnzw169fyNra2lcq Kip8Ho+nSiQSD/j7+wvBYPAPVVVV4zdv3lBu3bplu7W1Na+oqIhWVVWlBQUFUcPDw9k2NjYcT0/P NSqVKgUGg38EBQUpj46Ofg4JCXFTVlauEIvF1Obm5u7MzEyJmJiYIDk5uXk1NTXE06dPhxAIBMrM zKyuvb0dJyEh8bmiokLG3Nx8pKSkBJGYmFjd1dWlfvr0aVs2mw3CYDAsLS0t5Y6ODtrv37+n+/r6 QFZWVsiSkpKGffv2GaHRaKKjo+Oxubm5zIqKCoiKigrl9u3bdigUqrujo2O4o6OjkUQiIevr6/F8 Pn8UiURKBAQEyExNTQ0nJiYSWSwWJzw8fF5WVlYpMjJSeOjQIf63b98GGxsbVQUCwZeIiAjE0aNH FfB4vOyzZ89GpKSkFhkMBjE4OBg3MjJi4ubmRsRgMLCKigoaqLKy8m89PT1lJSWlbTqd3uno6LgH j8ezKyoqGP39/Y1NTU3Lu3fv1jYyMkqdn59vaWtra3J3d7e7d+8eIzQ09Nw4J6kAACAASURBVE1Y WFgcDodrt7W1FX/69EnF3d2dt2vXLhYIBJIQiURgPp/PyczM1E1MTGTa2Nhoc7lcwb///jv3/v17 46WlJVOxWAwAADCTkpLy7fv37+vj4+P+V69enXBycoJ8/fp1TVNTU6KysrKlo6PDtq6uTpNOp/er qqqqxcfH93O5XK6pqamuv7//HBgMVhoaGpIikUhlY2Njll5eXtFMJvN5UlLSfE5OzrP/u8Jis9l9 PB6vPz4+fuDnz58YfX391f/++4/I5/NBCgoKri0tLe9sbGx2DAwMbJ48ebLz8uXLSAQCIcRisZJ/ JvWGMBgMCgDAIh6PP5qbm5vx/Pnzn1evXiW4uLjsYDAYDUQiseB/99XU1GTfuHGDPjs7K+Xu7k5T UlKC7Nq1C7pjx46dEhISYlNT01U3N7eulpYW062trWlNTU367Ows/ujRo9TY2Njzd+/e/ffSpUvp AoFg9eHDhx8dHBwG4+PjdTIzMykcDkfKxMTEnM/ng27dujVz9OjRMW1t7Xwmk/lBLBavIBAIeR6P V29mZqbj7e39zcvLS359fd3Wzc1thUAguNja2o7GxcVBtre32Y6OjjQkEokoLi4W7927V6mlpWXV yckJ/vnz5yECgQBDo9HmIpGIv2vXrqODg4PZZ86cGdPQ0ADT6XQpZ2fnTTs7O+XCwsKOxMTEE/Pz 86ympqbOd+/eaYBAIHZwcHDRwYMH0+BwuGh9fX3C2tqa39nZKcXj8cDe3t7IV69e5Zmbm9+Oioqq u3r1qkRtbS19fHwcxePxeE+ePPlrbW0te21tTRkAAAaBQNBZXl6ebG9vh7e1tWFgMNhISkrKnZcv X+bQ6fQZPT29VSkpKZ0/4qR5BweHofDwcEhQUNBxCwuLxidPnhi+efPm5dmzZ7+AwWAAAAD5t2/f hhkbG4eHh4fz0Wg0NSAgYD0xMfFiVFRU/o0bN7B+fn6w+fl5Op/PV62rq+tKSkqClJeXXwwKCrpB JBJ5bW1tG1+/fvXX1NRcRiAQc0lJSa1hYWF7OBzOmrKy8vWtra32nTt3/qiurnZdXV2dxmKxcigU So9Go+U5OjqqXrly5f3IyIgGHA7vzsnJ4Tg7O+O+fv2Kjo2NJd28eVOqsLBwo6KiQoDBYNg7d+6c ptFo0LKysj1zc3NQsVgM+ueff1o9PT0V6XT6PJFIPAgCgQA4HE4GAEB04cIFr/Pnzx9iMBhMLBYL XVtbU9TU1OTyeDwehM/ny/f396+Pj4/3tbW1wVVVVUUvXrwQBgYGsgoLCwlycnJGCASiR1dXV0ZW VtbByMgoSCQSTZiYmPyUk5NDVldXi7BYLD8rK0u8urq6mpmZmaarq6tIJBKVX758uTI8PIx0d3f/ pK6uvv79+3fx8PAwXU9PDy0vL7+4a9cuUw6HM2tubv5maWlJbX5+Hn/w4EH206dPpW7fvm3v5ua2 GwKBTMTFxZ3/9u3bm+joaK2UlJTvIpFoDg6HY0+cOGFtaWmJ6O3tnb1+/Trc1NQUm5eXV4TBYJx1 dHSwcDhcy83NTQ0KhY6IxWJYSUnJUwMDA3kIBMK/f/9+7717924YGhp+RaFQqLi4OLnR0dGawMDA ncXFxesmJiYzKioqBiEhIVBNTU04HA5X7enp+SEWi6empqZwdXV19RQKRam5ubnWy8tr68KFC2eR SOQaDAYzGxsbU9DQ0DD5H756cnKy58uXL0vGxsYSw8PDuJCQkPXZ2VlsV1fX4ocPH7j29vZVgYGB BrGxsTgfHx+AwWAMVVZW+iQnJwNpaWnFVVVVRlFRUVw6nT40Pj7O8vX1PXX48GFySUlJ/+7duwMW FxfrAQBQaG1tLUOj0XanTp0qyMzMnF5YWOh2d3eXXVlZ2dzY2Kg5evTonvj4+Nrx8XGJ06dP3wGB QBp1dXU1TCYTZWdnh9HW1pZ4/fr1/O7du5Xl5eVV79+/X2VgYECBQCCrAwMDgLS09G8fH5+7wcHB /3C53DahUCiFw+FIly5dwltbW6uBwWAZHA431dbW1mdqaqrj5uam+O7dOw6BQJDw8vICs9ns7QsX LryLiIgIi4+Pt29vb++VkZGB//z5U3D06FGOtLS0/549e2QaGhouycnJOZ86dWqvrKzsWFVVVWl9 fb0Qj8cPodFouaKiosb29vZpoVCo2tnZSXnz5s2e9fX1H7du3VJMTU2d19TUhC0vLy+Hh4evLi8v Y/B4PFFBQWFnYmIiEBISIoZCofCvX78SRSJRja6ubsAfk9tdRUVFp5iYGLFQKJwJCAjAycnJWaqo qFDNzMxsZGVlF6WkpFDl5eWDNTU1NCaTKT558uTqgwcPFgwNDSHHjh2j29nZcXp6evSPHDlCiIuL U3RzcxOWlJR8kZSUZPJ4PJG/v39bVlbWhrS0dPfz588RGxsbs9bW1uePHz+OUVBQkM3KyhozMTGR RaPRG3Nzc3Lb29sYd3d3qKysrAGdTu/U1dVlFRYWkm7cuGGJwWAoKSkpp8+ePat1/vx5opyc3PjN mzcZQqHQSCwWvwaBQGwsFmt35syZyNOnT7v8999/3/B4vN3AwADLyclJbmZmpklRUXEHxNXVVe3I kSNKIBAI09DQsD41NcURi8Wc+Ph4lYKCgu3CwkIJGxubBwcPHnwMBoN7g4ODPzg4OAi4XG5TXFyc RUZGhnZISIguDoc7SqFQliorK984OztHgsHgWVtbWzQEAuG6u7srPnnypNPf318Kj8fLLy4udi4s LCj5+vpqUanUOTs7O2ReXh5UXl6+8/379zdPnTolKRQKxbW1tXlkMvnE+vr62+jo6DO6urrl1dXV yXA4nB0bGwudnp7mOzs78/v6+kakpKQUuru7xz99+rSbx+OBduzYAYVAIPzl5eVGAACE8/PzdQ4O DmECgYAHhUJViEQia2Fh4RWbzd6cmZmRMDIyWr179+5BGxubRqFQyCKTyQsMBoOKQqFkBwYGJkEg 0Fh3d/fE2bNnL29sbGxSKBTlw4cPM8vLy6f19PTQoaGhwx8/foQGBQUxaDQaeHR0tF9NTW0VCoXi iESiyaVLl+Z6e3svZmVlfdXT00P09fXV6erqtrJYLJC9vb2GiYkJcWNjgyISiTgVFRWCzMzMz5KS kkby8vICX1/fuZKSkpHm5mb27du3nZydnV9funSpY3Z2dnttbW2WSqWixsbGxGfPng2Sk5NTTUtL GxgdHf3L3d3ddWVlZbO0tBSiqKjY+evXL9O4uDjd379/Lzx69KiOwWBUEYlEioeHR19PT4+kjY2N TFRU1KC+vj5bV1dXPyQkxPnu3buF+vr6kurq6t4jIyP6d+/efXP//n1GcnKyd2xsLO/48eMHfH19 K86ePXs2Pz+/Wk9PT8LZ2dnh/v37paWlpWJJSUlBcnIyYmtrq35iYkJu9+7dBkwmc/7x48ffTUxM 8KurqxNhYWFt1dXV62ZmZpaGhoaP19fXNePj4wPFYjH73r175SoqKpDKykqGqakptKamZoFEIqm1 t7dvff78eWNiYkJ7z549VXl5ea5YLHYqPj5eOiMjo3Vzc1NjdHR0s6CgQFZVVRXl5uaGFQqFckgk Uvbly5crly5dwtfV1TFYLFb9yspKv4uLyzNPT8/mw4cPw4uLi6kHDx4Mtba2rvn169cwm81Gv3v3 btvS0pLp6em5KykpaSsmJsbqzZs370+fPg1vampSb29vB+/du1fWzMzMAIfDmf3+/bu0uLgYlZOT 85eKigoRgUDgX79+vWhmZra0c+fOQ3Q6vbunpwdFp9M/V1ZWtpFIJLXu7u51CATSf+XKlZXExERD MBjMt7S0xJHJ5IWysjIDS0tL/Pr6+qSmpmZ/cnIyEQ6Ht37//r3Mzs7Otbi4+NvJkyc3d+7cucvC wqLXzc0to7u7+7/R0VGF169f0wsLC8MyMzMBXV1dUxAIhCktLR2wsLDQApeUlMQMDQ3xZGVlUcrK yiQAAIBr167tUldXd798+TLtf3z2wsLCHBKJJNPc3LyzoaFhQktLK+HVq1c22trabAqFMvIn4y3i 0aNHthgM5i0AABI1NTWf3N3d1f7++++v379/J2tqauLNzc3V1dXVXchkMlwoFIIoFEpbeno6gkql Rnd3d784evTo+bW1NaqkpCTqypUrguTkZIeEhITJX79+xfT29hoqKysXkMlkTXV1daG1tTUEAIBf BALB9fLly/IjIyM6Z86cmSwsLBRnZ2dPz87OrgMAAGRkZNQoKyvbVlZW3ltdXR0qKCjYp6CgoCkS iUDu7u6PvL29hV5eXop6enrlZmZmCwkJCUrq6uqBWCxWAYvFWubn57cfO3ZM6Orq6jYxMUF9//69 85UrV+bu3bs3m5CQINfR0dF18OBB+a9fv5rOzMwgg4KC0AUFBRP6+vq//4hA1t++fbtiamq6y9vb e8nFxUXm5MmT/kwm84Cjo+Pws2fPVra3tzmqqqoWcDicm52djf/48WOAiYmJWXV1NcHCwsLf0dFR 8fnz585jY2MTBAJBtaOjw7yjowMuISEhCg0NdScQCJyurq4lHA4ntLW1NVteXs5nsVgv+vr6JkAg 0JvW1lZ3aWlp3vb2ttLff/9tb2ZmBkEgEGAQCCRvZ2d3+/Tp03tRKNTuixcvMlZXVycwGIw0DAYz 8Pf3tweDwRA3N7dgVVXVRRUVFTCHw6EePXp0TCgUjpeWlr7Oy8sTvn//Po1IJIIQCAT2ypUrX1pa WvRNTEzQm5ubCBUVlWASiXQ8ODiYAIfDpS0sLE7R6XRRb2/vq9raWmUlJaX427dvY54+ffr858+f dEtLy+2EhIT7YDBYCQAA4MuXL5KfP3++amdn50Amky0vXLjAd3Fx0Z2dnd1VU1Ojk5SU5KelpVWG wWBWnj9/PnHt2jUDFxcXmb///psdGxurMD8/z0Aikfz6+noKBoMx6uzsxHR3d0+ePn36kI2NjSYM BqO3tLQkdXZ2HqLT6Yy+vj4ABAIB7e3tap8/f2aurq5q2NjYWHh4eLA+f/784+3btzxXV9fPdDrd PzIycurixYvShw4dAnt4eKwIBAIeAABAVlZW2M6dO+l5eXlfhULhfGtr6w8CgQCm0+k6FAplIDQ0 1CsuLo6zvb0twGAw8P7+/go+n29w8+bNU0pKSukcDucGnU6/NTMzIyUhIeFvZWW1tW/fvm0KhdJB JBL9o6KixDdv3iR4enpKDQ0Nnbl3757ElStXpNfX1/sdHBzcu7q60ufm5iCvXr3Sraqq2kMikT4o KChIo9FoNBwOx8bExEQKBIIqUE1NzSlVVVVeYWEhMTo6WqGtra3k7du30o8fPybhcLjA+fl5DzQa bcpisXbHxsZ2ZmZmmv78+bMzPDw8QEZGZjcAAICPj8/Zf/75x3h+fr4uLy/PsaioyPfZs2e5fzTj Rr29vdOZmZk9JiYmuPfv3z8EAAD8/fv3F7du3eLOz88jCgsLZ4hEopOMjIx7YWHhtfDw8PT/9c9j Y2PHZ2Zm1Gpra2vFYrFJW1ubTnt7O1FCQgL06NGjx2Aw2JzBYAwtLy+LhoeHlaKjoy0OHTok5eXl taSrq7vA5/Ph58+f98RgMJZ/ilTGy5cv95w7d+6tvr5+r4ODg0Z3dzfdxMTETU9PT7+oqOhBSEiI 19DQ0ISZmZmrnp5e1a9fv0BQKFS8srIiCAkJwWZnZ3ebmZlZlpWVleBwOGJTU5OMm5ubg7q6OsfX 13fZwcGhZ2ZmxltOTm59c3MTjcFg6r9+/fo2IiLivL29fZu9vb3PH296n7Kycgyfz597+PDhyMWL F30gEIhJcXHx2507dwpbW1ul/Pz83MBgMDAwMPBFS0tL99evXz0oFEqorq7O0dDQOCAUCnkAAABg MBjr6Oj4paGhoY3H443B4XD52dlZVwcHh6Xx8fGN+Ph4aRQKxTl27BgJg8EIHj58OOPn58fQ19fn SkpKJn348OHx9+/fmX19fQafPn1if/r0SWVgYGA6MzNzZ39/PwUEAsGsrKxcDh06lP/3339rotFo ha9fvw52dnZO7927d9HCwsL748ePTTt37uSfP3+eYm1tbSMUCsV6enprurq6dpqamjITExMz1tbW Z06cOJF669YttL6+voKmpiYvMDCwVVFRET07OyuFxWKbIyMjjV1cXAxAIFBDU1PTETgcrkKhUNKl pKT2bm5u/vb09OxycnISbG9vS3d2djrv3bu3TyQS0RgMhmZWVpbd9vb2ZkBAQKOLi4tWTEzM28DA QL/w8PBuY2Njd2tra+309PSC1NTU3ISEhNjU1NSjampqT0JDQ3EcDgcjLy8/cvPmzXg0Gi159erV W4mJiTkQCIT94sWLoqampmknJyebnz9/sl+9euX4xwj3vaGhQebu3bt8MBgMKCsrL7169Urnzp07 8yoqKqzDhw+Hh4eHf8rIyNDbsWPHQG5uroSUlJSqubk5ODo6uqqgoGA3n88HJSUlNaWnp++AQqHO d+7ceW1paTmxf//+1uLiYseKigprLpe7dvbsWV5fXx9XSUmJRyKRjJaXlzE0Gq2xt7dXEofDQYOD g5MAAACWlpaevX37tvXHjx96bm5uzO/fv6uFhoaifv/+Xdjd3W3f1NQUQaPRsoRCoQgMhUKl1dTU Ap2cnBZ//vzZIS8v7/f06VP7ixcvTn/9+vXZp0+ffHk8XujTp0/HS0tLTQYHB0eXlpZEIpGIv7Cw UDQxMZFnaWmJysjIaAwPDz/w48cPzZKSkndEIhFubGyMxePx/H379un19/eH/PPPP9t0Ov3jH9pN dGpqKk1JSWnqy5cv/e7u7q3b29v1z58/B+fn58fu2bMnrbKy8sKlS5fYW1tbmysrK+rt7e04JpMp lpKSYq6uru7a3NzcDg0NPezr67tfQkLCQFJSUtvQ0LCBSqWi09LS2o4dO+YhFAobwWAwYG5u/orL 5eZqa2svo1Co0fT09K39+/efJJPJ4IyMDDOxWCyCw+EqWCzWhMPhCCorKykbGxu0r1+/yhIIhD2r q6tMHR0dNTKZ3N7Z2amQmJjI4/P5YRwOB9PW1rbw+PHjJ83Nzb319fW9+vr6ulNTU0gSiTRTVVXl +PTpU6cPHz5ce/HiBfnw4cOp4+PjKwAAAMrKyif5fD48Pz9/SUNDoxsEAikXFxe/dXZ2HsLj8UQ3 Nze5oaGhUpFIBBgYGHizWCzehw8fZng8HoRIJGqLxeIXYDAY1NbWVgmBQJSysrI4DQ0NzICAAKMv X76w19bWSsRi8ZZQKIyCQqE4JBKJaW5u/vnmzRvhzZs3T1lZWSVlZGQYMBiMKj09PeNDhw4Rvn79 Kvr+/XvbyZMnnWZnZ+VFIhEqOzt7wcrKau+hQ4eS+vr6kBAIBNXZ2Um5dOkS0sfHR8Pa2tpbLBaD goKCHKqqqkZevnx5+vjx4zaHDx/eGR4e/oJKpSLs7Oy+W1lZ7ent7S2srKyEolAo0+Li4qG0tLRu eXl5uEgk4mdnZ6Pa29s3W1patIuLi+FIJHKjsbHxC4vFWlBXV7/K5/O3pqamFoKDg61WVlb2SktL Q+h0OhiJRC5YWloiuFwujEKhtEAgEOynT5/8r1y5EvLPP/+4hIWFbc/NzaFxOByjra1tCA6HC5lM 5puEhATnmZmZ+ps3b7rk5OScs7OzQ0dERPgXFRVVt7W1vXrx4oX+9vb2WwAAJMPDw4WhoaGkBw8e zOfl5Vmrqall4PF4KhQK1eFyuVAJCYllKSmp4du3bxu2tbW9t7e3b9+3b5/M9vb2z/z8fKPx8fHl a9euyf38+VO0sbExHxER8YLH4+lwudxlJpP5EgAAID09vRcEAgGXLl3az2QyYYcPH46tq6tTEggE VU5OTmOpqakbCAQCo6SkJP3jx4+JkZGRBgAAgIWFBX5QUNBfDAaj5Y9RTc7Q0NBNXV2dIS8vL+rs 7CRkZGTQs7Oznzx//lytubm5dWBgAD88PCwHIRKJXi4uLrtQKBTb0NBQCYlEMoOCggB3d3eF9fV1 7NjYGNfMzExVR0dne2xsDFZcXDx05coVaywWC0IikQIqlfoDi8UuBwcHk5OTky1iY2N5SCRye3t7 e+rGjRt8LS2tqd7eXmpTU9NPbW1thJSUlEFoaOhTAABat7a24Hv37hX29/cvZ2dnWz18+PBdamqq haGhoSabzQaFhYUdDg0Nde/u7u4xNzdHGxkZ0VEo1JSNjY28vr4+S01NzeK///5r2LVr16G1tbWP WCx2uqOjQ9fAwOD3tWvXjE6cODG/srKiJBQKN3ft2sXz9/eH7Ny5U3rPnj0DioqKM/n5+bUCgUB9 eXkZ1tjYOE0ikXpPnDihp6am9sHBwcFGSkpqXUZGBk2hUKbFYrE2gUA4UlFR8dbHx0crPz+f/f79 e76rqysvKSnJZXh4GJuYmHhRWlra98GDB/Px8fHtp06demRtbf3Dy8tLzGazeZ6enuNDQ0ODTk5O BENDQ9ubN292d3d3L0ZHR+/g8XiKBAJBE4fDNUEgEDwEAllPTU39/uDBA05bW1svmUzmvXr1qsHf 31+ZTCbbsFgs6bKyMq6Ojo46BoOZhsPh8ioqKvqamprha2trTWFhYbTe3t59R48ebaPRaIZmZmab /v7+ZCKRaGVmZraERCIN5+fnH3h4ePgsLCyM6OvrW7W3t1NJJNIeAoHAlJKS8j1w4IBVa2vrt+PH j/M+ffrU0dLSog8Gg9lpaWmSDQ0NW9ra2ptycnLi8+fPb9nb2/fr6ure2LFjR0xOTk4liUTCcjic ueHh4ZajR48qPXnypMLf33+6t7eXERkZuRIXFzceHx+P5nA4E0gkEvPy5cvl06dPi/B4PCsrK0sV BoNtZWdn++BwOFheXl6nqanpFhKJBOvq6p7o7+/vmpmZwdy7d0/nxo0bvurq6qtoNBrx119/JUlI SPB//vxZjUaj5aWlpVVLS0vnqFTqNoPBkK6urt68fPlyysTERKm9vf25iIiINEdHR2FaWtpnc3Nz eQUFhR4/P78jNTU1neHh4ftiYmLSyGTyDoFAMA8CgfAaGhpri4uLjWFhYctbW1se+/fvf2RsbAzm cDj0lJSUY/Hx8VIwGOxzcXExws7OrlNKSkp9YWFBrre3t5pGo0nRaLRFDAazraOjw2CxWKRHjx6p cDgczbS0tImsrKy00dHRJiMjI9mcnJySyclJTSsrq2EOhwO7ePHibh0dHS1vb2+1ixcvtn379m09 MTHR8dOnT0wtLS0ZExMTi4mJiVoNDQ1VKBSq1tLSUpSfn69SXFxs9OTJE6q9vb0QDoejw8LC3OTl 5c3Hx8cr1NXV+Tt27DgNolKpj7KyshYvXLgw19zcDKVQKJJubm6Tvb29EBkZGW+BQAAikUjo6upq 1s2bN+FoNHqhsbFRf2trq5NGoy3l5ORAIRAIMT093ZpMJlMqKiow9fX1FCKRKBYKhWMnT57UiYmJ afH09AyQlZVFnzhxgnLs2LElKSkpxNbWFp1Op8PCw8O7+vr6oiIiIoqfP38eBgDAZGRkpGpHR4df T0/Pyz/fmu1bt24t83g8ZkpKir2Li4tJTExMzbNnzxwKCwufmJiYmIjFYjEej8cpKio6jY+PfwwL C9MYHBw8UFZWlvpn0qve19fXRyAQVDw9PaVQKFS1jo7OI7FYzPT393/M5/M5VVVVr/4oyeJkZWVX bt26hbO1tc29detWJolEoru6ukY1NzcXAAAAMJnMX7t3775nZ2f3LwQCIcJgsLbq6urn5ubmWVNT U6FkMnncxMRkpqSkRDEtLW3b2dl5xNnZGfLr1y/d/Px8XkJCgtl///1XDYVCN93c3PQIBIKPWCwG VlZWMmVlZR0ZDMbTM2fOmKipqUHU1NTYgYGBjjIyMsowGGxLQkJCgsFgrPb19U3p6OgYysnJqUGh UDGfz19isViQ6Ojofjc3t5HXr1/b19bWGp47d64Vh8MtOzo6qpPJZBaVSkUsLCywysrKmCgUatvR 0RHw9/c/h8fjK+/du7dy6tQpzeTk5JnDhw9vd3V11fT19YXu27dPV1paWl4kEn0uKipi1dTUCJ8+ fRqGQCBE169fv8tms1cvXboUw+fzn+Lx/4+pN/+H+v/+/x+z74x9ZxBjX2KStbJGhDahbKlnhUo9 24mUlGhRelYqkghJskb2fd/3fRnrmLHMjNnn+8On1/fy/g/uP5zLuZz77dzO9Sahs7Kysi8pKans 2bNnkdvb2/1+fn5zubm5YjAYzAoMBivl5eUd8vT0TPr48eOfJ0+ewIuKipYrKirWUlJSVJOTk9G3 bt3aMDY2HnNxcVGmUqlrJ06c8MFgMOMUCoWztbU17enpicTj8aK/f//WhUAg+7u7u18bGxuHHjp0 6GpPT4+VkZFR7evXrzdwOJwMnU4fHx0d3XRycqoCAABwdHSMFBERYSQnJ1uAQKDF8fFxzL1792iP Hz+uIpFIJb29ve/19PQshEJhycDAAFZRUZG3tra2NDo6qujm5mYnEAiE5ubmgTo6Ovi0tLSU//cL A4vm5ORcwGAwww4ODrd2dnbIYDAYT6PRsFNTU0W5ubmqOBwOYmNjM7m9vb07JCRkfWVlhQSBQMRZ LBZnZ2cH/Pjx4760tLRePp/vFB0d3fjgwYPJ2tpas+3t7Xo2m22ZmJhIn5ubAykpKS2AQCDFL1++ mC0tLcHi4uImb926NaCpqfl0dXU1V1JS8ujXr19jMRgMpKenR6anp6fL29ub4O3t/SA/P/80DAZz dnZ2tgbPz8+jyWQyv6qqar6hoUH+9OnT+44fP84+evToPScnJ1M3NzcfgUAglpGRwWptbcXIyMgs gkAg7vT09MynT5/0k5KS/m1ubsbicDjFb9++5d2+fXvY19f3Ko/Hk0hPT9d7+vSpNI1Gs5eWlpYT FRU9kpmZGW5hYaFrYGBgAofDDffu3WsfHh5ul5qaOu/p6bkiJSVFK4zU0wAAIABJREFU7+/vF790 6RJ737595w0NDYPYbDZDVVVVmUKhyIuLi7P3799vweFwQGNjY8gjR47E7du3T1/411CgpKR0+MWL F5VQKLS2t7d37/9GIgsLCykikdgKAIBCQEDAxMzMzHRnZ6dudXV17ObmJlVWVlbb29tbysfH57mX l9cnXV1dk5qamlwKhaLW39//EIfDcfLy8pCtra0fraysTpmamoq4u7u/i42N/d7U1HTd19dXtru7 O0BbW/tTdXX1rqSkpNyhoSFsaWkp/+nTp8OPHz8ufv78+cT3798ZWCwWOzc310+lUuclJCTYoqKi 8N7e3nmhUAikpqYmDA0N8dlsNpVAICQMDAwIAgICaAEBAdrm5uaddDqdT6VS0QAAWGKx2I21tTVe a2vrKgaD2YZAIMZfv37NQSAQwo2NDeyHDx/MpaSktvz8/JqNjIxGIiMjzQEAQM7MzGDl5eUFRUVF 1RcuXJC0srKCXbt2jf/ixYsPIBBI9eXLl/2PHj0iYzAYkKio6K3x8XG5wMBAZRKJtEalUlffvXu3 U11dzX///v3RxsbGwtLS0k4QCGSyf/9+NSwWC0Oj0TeZTKbV58+fZy0sLAz++++/H1AotOfChQuo sbExNIvFagQAYN7V1fVmX19ftp2dHVJdXX3o+vXrOBKJtPj48ePRzc1NckFBATQ+Pv7kgQMHLHA4 HG1wcPDp5ORkOwwG6yQQCPa/fv1alZWV7SorK/vd39//fGdnB4iMjLy3d+9e8NWrV0cfP37MERcX V42KikIQCIR8e3v7VIFAMOvm5maSnZ2ttr29bcDn87sFAsFyZ2dnORqN3gwMDPR68+bN6127dumE hYW1jY2NyXR3d9MmJydBnz59wnt4eBxhsVjk9fX1H46Ojn43btyQBgAA4HA4W3Q6vczJyckuKipK hsvlgkRFRXF8Ph81ODjYAAKBqJ6enstXrlxpkZGRWdPR0RE3NTXFUigUKJvNRv348eNRZmbmz8LC whk6nX7G19eXOjs7C8/Ozrb577//BhgMBkFGRmby2rVr2NbWVr9//vkH7O7uTsdise7fvn3Ll5GR GVldXaUBAIDOyMhonp6eLsZisTBTU9MRoVBIdnFx0dy/f78Wk8kso1Aoi+bm5pulpaX14BMnTuz8 888/UBAIZP/u3btdLS0t/VVVVS6bm5tLXC4XVFxc/CEsLCy9qKjIODg4uKGkpMQyNzf3kbKyslNg YKBkYWFhVW1trYmbm9uP2dlZKplM5rJYrG/q6uqNkZGRUHFx8dEzZ85gpqen+1JSUi4tLi5W6+jo rGhpaY3u3r37HI/H+x0dHe3Z3t6uKi8vfwSHw6kcPXp0j7+/f+jGxga6q6uroLGxcYvFYnEUFBSY cnJy2gcPHsxDo9H46upqx97eXrPS0tJ+TU1N66CgIGpISMirrq4udElJifrq6mpfbW1t1unTp4Uo FIpAo9FghoaGoz9//tRBIBAiZ86caSESibiBgYFlIpEIT09PJ3p6enbHxsZySSRSp7Ozc7irq+ut mpoaDh6PhwcHB29YWVnF3bhxIx6JRDrzeDzQ5uYmisVi8Tc3N7kxMTH9hw8fpv8N4iQ8efLkP3V1 dbaUlJTapUuX1J88eXI/NjbW0MLCoqe8vNxWXFxcydnZ+aCnp+dNBweHxWfPnn2l0+mqc3Nz2wKB QKyysnKqrq5O98mTJ33W1tZLPj4+UBEREcibN29+/o0HtwOBQPgnT54g5ubmioeGhj7X1NTo4HA4 JwsLixEKhSIPh8M5y8vLUhISEvC/k822hIQEk8fjzdjZ2Wm1tbVN5+fnLzg7O0ttbGxQJSUlv9+6 dUu+srJSCo1GKzQ0NLi5u7tLeXt7zzU3N4tJSkpKSUtLq+FwOEWBQECfnJwUWVhYYNjZ2Y0BAABs bm52o9Fo+tevX8eDg4MZrq6ue0dHRznj4+OiFy9eFNPX13dns9lgPp8/BQaDV4lEolR7e3uGl5eX HhaLhWxvb++cOXPGGgKBgDY3NyljY2NZKioq44qKijtYLFa7u7ubxmQyrebn538AAGDs7e0traSk JKGsrKy2e/duqcuXLxtERkYmVFVV8cBgMDQhIYF+/vz5wadPn/pCIBCV7u7uh38j1nuoVGri+vq6 7vT0tAgSieQXFhY+sLS0XGlubuZ9+vTptaKi4mx0dHTB6dOnD33+/Jns6uoKaW9vTx8aGuqQlpYO OnXqVH9/f7/Dly9fSul0esWdO3d+YzCYPTo6OvydnR2upqam4MyZMxkHDhzoNTIyCpaRkRHV0NA4 WVdXp5GQkECOiYnBIpHIATAYPOvi4hJ6/vx5SyaTKf3nz5/Zjo6OcTQarYHBYECzs7PSSkpKCjwe D6+npye+tbWVZmBgQMzJycG/ePHifGRkZEpcXNxLU1PTy+7u7k9ra2vVd3Z2eC4uLvYSEhJ3rl69 6kwikbD37t3bgcFgKmg02jo1NbXdxcVFB4zD4SAvXryAvn//nmdra5vs4OBgjsPhsFgsls9gMEq4 XC5maGiI9+fPn1wikdj37t27wpmZGTSFQoEaGhrqbG9vs+bm5kozMzOtQ0NDg5ydnSm2trbxU1NT lng8nqesrKy5sLCASE5Obk1ISDgAAABQV1dn2tfXRwEAAJCWlg4FAACZnp6+Mjc3J41EIt04HA5o cXHxt76+vjSXyxU4Ozs7aGpqYq2trVljY2MIHA4H4XA4bUgk0uzSpUvTfX190hgMRu3NmzdTFRUV djk5OZednJwOx8XFtYeGhmJcXFx6t7e3IcvLy6yFhQWliYmJhbKyMuq3b99OdHZ2qvb29q7V19eD 8Xi8AAAAYHx8fLOnp0fEwsJiy8DA4NXq6ira29v7eEhICEEgEDT09vZ2NjQ0JEtJSS1LSkqCjYyM 6gkEguD27dsOzs7O8/fv35/p6uqqdnR0vNnX17eIQqF4wcHBmAcPHjzt6emZ3dnZMf7169cECoXi 5+fndwIAUHrixIkNWVlZsba2NjAEAjGjUChkTU3NyX///bcIBoOd/vnzp/Lo6ChvZ2dn8S9qitzb 25vu5eV1REtLa0JWVvYWhUKZvXHjBrS/v/9fd3d3JBqNzmptbVVISUnZVFFRkcLhcK5v375FHT58 uHNsbGxNIBCAhoeHF2NiYvQPHDgwC4FA6kdGRt5qaWltP3v2rJvD4czHx8eTWlpadtXX1yvV1tbO v3v3LufixYuTYDCYHxsb2/Hw4cPhW7du8ZFIpL6iouKOgoLCifT09GQMBkOhUCjwzc1NiouLiwAO h08TCISRtra2I9HR0Z0sFgscGxvbiUAgvMrKyjwAAFj9999/ubKyso5MJlMeh8PJNDU1ScbHx/Mk JCQ6Hj58uAuPx2tZWlo6QyAQIZPJ1ASDwYCFhYWmqKgoFwaDYWAwmIKkpOSRN2/e3IyLi9PV1dV9 WV5eri8tLW3R3NysNz8//6yxsXHPnj17/oHBYMiCgoLDNBpt5urVq7M4HM59aWnpExqNnk5OTjbl cDgoDofzx9raGpecnPzI2dl5p7m5eZtEIt28fv36pLu7+7+enp413t7exw0MDDZiY2OxL168iPjw 4cPPEydOOI6MjEBOnTrVe+DAAYUjR47IgUCgSl9f34nExMQeDAbDff/+vZGoqCgXjUbLMxgMVkpK yqeIiIgJFAqlzOfzBUVFRdpycnJN8vLy0lVVVUJbW9sadXX1w+bm5rOtra1KTCazKyIioik4OFgZ AAAgPj7+S0lJSUdDQwP07du3egKBALS+vs6EQqF0OByO0dLSMi8tLZW6fPlyY1FRkUpYWNhFLpfL g9y+fXu/lpYW+K/qCNjY2DDCwsJwhYWF+ZKSkgpmZmbO1dXVIAgEMnPkyBEbAoHQ7+rqmhAUFNT3 /PnzNT8/P4msrKxta2vr9ffv37NsbW0ZN2/eVBgZGVkzMjI6hEajyevr690RERG2XV1dMv39/Vky MjJyExMTZElJyT8wGOzknz9/whUUFJQNDAzwaDRaBg6HY+Fw+PDx48d9ORwOhUajrUxMTHADAwN9 Pn/+PFtRUXH5169ff3R0dHYbGxvL2Nralr57967FzMxMKjAwcFRUVNQ9OTk5VSAQoI8ePboaFBQU m5iY+P3Lly9q1tbW9UFBQSexWCwCDAYL8/Pzt/fs2cOBQCCYnz9/Imtra9ESEhKLVCp19OLFi0Qu l9vu7OxMb2hoaDxw4EBXTU3NMo1GE7e0tNx35cqVLXd395BTp05x1NTU0E5OTnRpaWl5c3NzmJ6e 3lk4HM7JzMwcvHLlCvbVq1djMBgM3NnZKenu7o7CYrEKUlJS80ZGRroyMjICBoMBPnbsGGxyclLy 0aNHZs+fPwcdOHCAHx4eflYgEHQnJCQMSEpKcjQ1NeeNjY11uVzu+r///ruJxWLLAgMDVcLDw/sa Gxt3bG1tFTQ1NfXW19eHSkpKVjc2NrR+/Pgh4ejoSFNXV7eysrLacHNzU3Z3dxf/999/lxsbG/cf PXpUV1FR0dDR0fExAAAABoOBDQwMDO3s7IjExcVFvnz5sra0tFQgIyOj1NLSwp2bm5u+e/euka+v 7/6dnR32lStXms3NzX3weDy/qalpprCwcAuDwciNj48vTE5OztjZ2VEXFxdV6+vryZKSknqHDx9G zMzMLPv5+V0GgUAiQ0NDxXNzc5ipqSnc+Pj4OwgEgsnPz1+MiIiY8/f3/zg9Pf3706dPiRgMRt/N zS0xMDDwgIuLS9bY2Bi5tbW1e9euXRApKSmtgoKCJiKRCKmrqxtubm5mrq6uzkRFRa3r6uoOLy4u zra1tekKhcLllpYWQExMTFZNTY1iY2NDGBoaWnJ0dIQfPXp0Z3JycqSnp2dAVVXVcHl5mdLX16e3 tLS0evXqVX8wGLwlFAp79+3btzE1NTV/48YNvKKiohUSiZQ0MDCAFxUVlWhpabFRKBSUQqEscLlc up6eHuz27ds3FxcXBYmJidiZmRmhp6enHJfLJQsEAq6cnNx5JBKpW1NTk3Xt2jUvGo1GdnZ2lgaB QBhDQ0P8sWPHpoyNjYdZLJYaBoNBBgQEIExNTS3ExcUtyWTylri4+BCHw1mMjIzkvX//fuPx48e0 lJSUoTt37oilpKSsHz16lJ+UlNTg5OTkXFlZmfPlyxdrCATSFBsbGwuHw1Hgjx8/QpuamiQzMjKu aWtrH93e3rZSU1NbMjQ0ZPv6+u6AwWDNnz9/nr979+7HGzdudDU2Nip2dHTUOTk58VdWVlZ///6d kpWVBfv16xfNxMTky+zsLB4CgRhubGwof/z4sXZqagolJydnNDo6qmBnZ9dUXFysFB0d3UoikeKb mprEpqamPjs4OKQPDw9LycrK+oLBYBmBQADlcrkqurq6lyUkJLiTk5MUDQ0NelZW1lcAAID79++n E4lE3urq6sPBwcHkoqIia39/fw00Gi26uLi4RaPRKgcHB0Wmp6f5cnJyG2AwGIiKiorAYrFV+vr6 qs3NzVUKCgqSmpqaEj09PajY2NjmEydOLNbX10+7ubn102g0qqenp5q0tLRqTEzMNwMDA+uTJ09e +/btmw6TyYRmZGR8jIiIIF++fHnc2tr6GZvN3tne3t708fGBqKioQLhcLhgCgYiTSKTvX79+xZ45 c6bw8uXL1IGBAR0LCwvi1atX1U1MTGZwOJxibW1t89zcnKiJiUm7t7e3zszMTMfu3buHu7u75+zs 7PQBANi4c+eOyOPHj7Xevn17WkZGBvP58+cvWCx2LSEhQW14eBhSV1c3zuPxBp88eSJiYGCgw+Vy QU1NTVI+Pj5uaDR6fmpqytHe3t6nurr6aWpq6gMRERGp0dFR0a9fv47Y2tpOMpnM/nfv3k3Pzc2l zM/Pv+/o6Mg6cODAPW9v7yA6nd546tQpQm9vb3N+fv4UCAQSUigU0O7duw0hEIiQQqFkLi4uSkMg EMTQ0BD8v//+o1y5ckWLQCAM3r59O1pOTq7yzJkzxpmZmfULCwutAAAAoqKi8t+/f4cEBwd/fvny ZdydO3fuKykpbZmbmy97e3s7S0pKVg8ODqpFR0cTWlpaYuLi4k6PjY3lQKHQ41AoFO7j4/NWRkZG NDo62vgv0hz4+vVrgYmJCe7w4cMjx48f1zx27JiYuro6vaioSMLDw0MmJCRExMXFhbdv3z4Ml8ul 3r17Fzs1NQWhUqlBEAjEIj4+fuH06dMQMTExdF9fn25BQcHSqVOnjqemplp9+vQp5M2bN8kAAADl 5eUrioqKxoaGhpsmJiZWZmZmSePj4409PT3tTU1NigwGgzc6OrpIIpF2KSoqkm/duqXJ4XAor1+/ pjg5OSFOnDjxMzg4WFpcXBx269atBVdX17C+vr7UkJCQYFdX198xMTHOMTExvVAotOjbt29tubm5 Nh4eHgQ0Gr3l5uYmcfHiRc7379+7zMzMqqWkpHALCwvo6urqseDg4Pr19XWr//77T5LP5+t3d3fL Pnz4UKS4uJjj4+Oj/1e0VmQwGDxnZ2dCenr6z7a2tjZQcXHxl9DQUMzU1JQnAADAp0+fHnl4eOwV ERFRuXfvXvWjR4+C/2fK8fT09IiOjpb/9u0b0djYeKGtrU3T2tp66sKFCwIfHx90eHi4IgAA/JWV FTiZTJ7X19fXGRsbi7tw4YK1i4uLGplMJre0tEj6+/t33b592wMAgM0HDx5Qb968ubekpCRPSkqK aGdnZzY2NlbS19e3dvTo0aOXLl36mJSUdBkGgwn/Gl6IPB5vTSgUgqanp4e8vLxqDQ0Nvx8+fPgK GAymHz58+KBQKAS2t7fLNzc35SsrK1uDgoKePXz48IqkpGSVn5/f68+fP09ZWFhIKCsr0+7fvz/3 +vXrwMLCwrarV6/CJSQk1oKDg2tlZWW1VVVVd7W2ttIoFAo4LCzMAQKB4P/i0V4nJSW14PF4mydP nhD6+vpGtLW1dWg02iCBQFCRlZUN/vTp0yMwGLxNIpEY6enpKkZGRnX5+fkkHo8HAACw/PnzZ7fW 1tYvGhoaEuLi4uqOjo5dIiIimxQKxa2iomJERkaGsbS0tNXV1SVNIpFOhIaGxu3atcsxLCxsTVRU dB+DwSg6cuQI+tevX46hoaEtLS0tvMHBQYednR0wHA6fCg0NbZmZmUGWl5ffLi4uvnXo0KGD58+f /1lcXOzu5+c3GBER4QaBQID29vYPjY2NejY2NnxxcfHS8vJy6Y6ODoK5ufm8iYmJhoyMjDyFQuEk JSUtDw8Pz2dnZ9OTkpIWYmJiAsFgsMHExMR4Z2dn5Y8fP6i3b9+2aGpqaqyoqFCxtraGzc3NNS8t LbkPDg4K796922JgYGBnYGCwbWpqOtXc3IwsKCjAb25u8kpKSmZu3bqFOnny5D5ra+uuzMzM2P/V nJycXEhvby+OwWAIGQwGPCMjY9jExEQJAABwbW2t4okTJ3ZERES4Wlpajm1tbSVCoRChrKwMFggE gLq6+q2ZmZmnFApFo7GxMR8Oh1va2tri1NXVd86cOTNqb28vd/ny5fHCwkJTGxsbIpfLlRYKhYLZ 2dnW0dHRkaysrGldXV1xAABw169fv5qXlxenqKhoZmRkhKmsrKwbHx+v3bdv3507d+58e/Xq1SEx MTEZBQWFeTQa3cNkMvfKyclR7927J1peXi4wNTUdfPjwoTGZTMYAAAAMDQ0x371715WUlHT64MGD BdPT01pDQ0NoDocDeffu3XtVVVXnhw8fCrq7uw/Ex8cnxsTEHNq7d+9MS0uLuoODw2xBQYHdp0+f Guvq6ljKysrUmzdvivj7+9PPnz+P9PPzIz5+/LjP19fXBIFAOKytrd3/9euXPB6Ph4iLi8NxOByY RqOxNTU1VyHe3t5H+vv7mUlJSWPHjx//qKio2Le+vv7n5s2bIh4eHnQ1NbW9AAAIAAAQlpaWDigq KioFBQWRAgMDO7y8vLZdXFyO4XC4Rnl5+TkdHZ3dkpKSxrKysqzp6emKvXv3OhkZGS36+/uLUigU ieXl5e2jR49C2Wz2clpaGtPNzU1OTk5OWlRUFGNhYRF46dKlN/7+/j6RkZHPvby8NF6+fPlAVlbW YmJiYrajo2Po9u3byysrK9UzMzOz09PT5OTk5O1du3ahQ0NDZYlEovH09HQXDAZbo9PpE79+/Zow MDBoFQqFUvv375+QlpbmRUdHZy4uLv7Q1tY2ys3NXSORSJj19fWh1dVV6Js3b5RhMBjn/fv33evr 6zKWlpZWMjIyyKGhIZqNjc3iq1evanV0dAA4HM4OCAgoKSoqcj969KiltLS0g5aWlo2oqCjK3Nwc GxUVdQIAAIGOjg4SDofX/Pr1i+jp6TkZExOz6+XLl23Gxsb8nJwc/J49e2gbGxvQ9vZ2FhwOb5uY mABev34tGR4efiw5OTnr3Llzkqampm9lZWXxaDRa+OfPn29379619PT0zLp///50SEjIppGR0TAG g5lXUlJSu337Nh+DwRyNjo5+QaVSa0NDQy0OHTqktLGxUYNEIsERERE9w8PDmjExMdOJiYkFoaGh njMzMz+PHz8OP3v2LM/Q0FCkvb19LSYmZuz+/fvKZmZmEllZWSvu7u6XQCDQhJubm1BdXR2oqqqC 5OTkaGGxWI6RkZFKRUWFf3x8vFRFRUWQvLy8xtu3b2fPnz8PUKnUweDgYF8Oh9Pr7++PAIFA8kVF RTtzc3Nre/fuhRcWFoqfPXv24PDwcC4cDqdVV1fLgkCg1X379qkEBQV9J5FIbfLy8tq2trbtCAQC 4ujoOJ6dnb2GRCLd9PX1FTU1NccWFhbgIyMjPGtray0MBoPd3t7+gEQiJ9rb28VFRERk5+bmOsTF xY127doFU1dXx5FIJIGLiws3Ozub+urVK/ORkZHBnJycFwwGoyE8PJy8urrKlpSUlBEREWn48eMH HYFALKmoqIiTyeQxMpncd+bMGbPExEQcl8sFzc3Nzf78+dOVQCAsmpqaKmCx2G0ZGRn1W7duST55 8mQFgUDscnR0JMvJyQ3CYDDG2bNntefn59ccHBwIMzMz67q6upJHjhw5X11d/X1nZ6fv6tWr+F+/ fjGtrKx0z58/jzUyMuoUCASS0dHRzNOnT3epqqpi5ufnIbOzs8Rr1649qa2tJYuLi8tpamrC0Gh0 Q0ZGBuvz589u4+PjTBAIVA2FQrU4HM7coUOHVm7evHm2rq6u7vDhwwRdXd3j8vLyBhsbG9UTExNk UGJi4jsKhbJWU1Oj4Orq2sblcg2ioqJO/iWmtJaVldWGh4fbdHZ27iAQCMHo6OjCnTt3JMvLy40y MzP99PT0dPX09MLGxsZSNTQ0bFJTU7/19fUpZmVlbTU1NemYmpqCent78X19fVMhISHGFy9eTN2z Z49kSkqKcmxs7Cqfz9/d09OzQSQS8Xw+HxwdHZ1kYmLiXFNTw56dnUVTqVSnxsbGcSQSiTYzM6Pl 5eWtv3//nnD8+PFvFhYWR1paWsbk5eVZbDabjUajUVtbW1A7Ozu/9vb208XFxRpFRUUWmZmZWkpK Slwej4eOiYlpP3ny5LqxsbExDAYL3N7eLpOSkpITCoUQNTW10cTExM6enh5CYGCgqpSUFAEAAOjc 3NxvaWlplYCAgF9XrlxRCg8P71peXpZLT0/fycnJwTx//vwgEol09vT0fMLj8Sjy8vLsd+/ehUEg kMH3798v9fb2cpOSks4PDAzcffPmjbalpeVSUlLSlrS0NFxFRWXVw8NDWVNTc7yurs6USqUuu7q6 CgEAGNu7d++RqqqqgvT09NUjR47swmAw++3t7TtmZ2c9paWlG5OSklZ0dHT4L1++hM7Pzwvr6uqe Ly8vPxAKhTwejweSl5d3rK2t/W5hYWF68eJFso6ODkRHR6ezqqpKgcfjzREIBMS7d+/k8/LyDE+e PPlxZGTkxurqKnpubq5gZmZmbX19HeHn5+fH4XC6SSTS4u/fv3WWl5d7TUxM4vl8/nRXV1caiUQK AABAtLOz86WampoCBoPZVVtbO0yhUCbNzMxIZ8+epZSVle0HAACAwWD6AAAAlZWVWSoqKjsMBgPS 0NAw6ebmpgECgQB9fX1pPz+/4qSkpKR79+69g8PhbD09vV+urq73e3t7PxOJxGNxcXFvY2Njf2xu bjY+evTo9/z8POTUqVOAnZ2dLQwGE1Kp1Pc5OTmShYWFqjk5OTYwGEy4tbVVv7S0NKKiouKNRCI3 PT09B/T1/9+xpri4OMvCwkIciUTCxMTEqNLS0voAAAAZGRl5VVVV/4vtTv3rRfmcmJg4HRISotTc 3Dzp4OCwm8fjMWRlZf1pNNrv7e1t2sLCwtqdO3cWa2pq4v53Dbq4uPgIiUTKEYlE5d7eXtiBAwdo Q0NDhMjIyP8iIiL8mExmzblz56TDwsLYPB5vGY/Hb6ampuobGhqu4PF4hbq6Osry8jIeh8ONJycn u2VlZWWurq7CCATCbhgMtv73bUtnz549qqamNh4bG7sDgUAAHx8fvU+fPrXHx8djf/78Kb60tNRx /fp1enZ2NpFCoWzi8XgeWFZWdjs0NFTo6uraFh4e/s/169ctWlpa0gAAwCORSMHu3bst+/v7Z168 eEHr7e0dl5aWRmEwmPaurq5ce3v7YCwWq9/U1NRCoVC0BwcHGywsLBSSkpLctra20vF4PG9lZUWr uLh4dXFxEVNZWbmNQqGY9+/fV5GXlwcXFhYq7ezsiJiamsoHBQVRuru7h4eGhqLfvn17AA6HC9LS 0rQWFxf71tfXa1JSUvIBAABwOJzk9+/fz3h5eVWg0WglFRUV/YGBAVEzMzMwg8EwNDAw2KbT6d// /PmjBAKBQOfPnx+Vk5Njnzp1ivLp06cfd+/etTU0NDyur68P2d7eLtPR0ekxMjIqWFpaWnN0dPxD pVIR3t7efDExMUZra+ujtbW1ksbGxgYsFuucmpq6X0tLS+M1xrBhAAAgAElEQVTkyZN8aWnpVT6f r5qUlOQOBoMRDg4O11+/fj2amZmJ3r9/v+iVK1fKXVxc6quqqgBPT0/2yspKQV9fn6iVldWit7d3 cElJiYu9vf1oTEyM2Pj4uBQAACBTU9NaNTW1+aSkpLWGhgaVzMzMMTqdrhEUFBSqqalprqioiFhc XDyXn5///ty5c7MvX77cW1lZuTU3NwfAYDAuj8fr6OzshIyNjWElJCSUAAB4YW5uTt7Y2BDo6+tD QkNDHUZHR03a2tokd+3aBTI3N1ccGBg4pqGhodnT0/OYTqfD2traPvT09Az39vayAgMDE/bv3//t +/fvX8rLyxkKCgpeHR0d6Onp6fOBgYFpqqqqzIaGhvQ9e/ZcQiKRuO/fv08MDQ31JCYm9svKyqL6 +/u3y8vLj7i6uqb//Pkz7O8tRripqelKWFjYCp1OZ6NQqI6UlJReGo3WWVFRMa2kpNRRW1ubRiAQ tjMzM/vu3LlzksPhgKhUqjSPx8NBIBCF69evh/r5+VWAQCC8p6cnbGpqSoTFYoGbmpo+joyMQNBo NA8KhQqdnJyGkUjkbgQCoff169dRNBotsLe3H9fX15+Dw+HTJ06cEFZVVc3a2Nhc5nA4CzY2NlBr a+ufw8PDU0QiUf3Zs2dS8fHxonQ6vbCvry+ATCYj3d3dNVJSUhosLS3Vf/z40ScmJoZoaGjInZqa SsfhcKJCoRCel5dnqKam9rmnpyeXTqdnyMvL/xsdHb10/PjxPk9Pz8a7d+/WVVRUfLe0tJTgcrmg +vp6Fp1OR2ppaSlPTU1RSCTSUH5+voiUlJQaEolEmJiYsGAwmFBOTk5GUVGRd/r06T09PT1rv379 msnLy9tmMpndHR0d6/n5+VPLy8tKDx48UBAIBHOzs7Mdnp6e/ICAgGxfX9+B5OTkRQQCoSomJrbA 4XAADocjhDx79swDAACCvr6+NBqNLq2rq4OYmZmZT01NpcNgMDFPT0/GuXPnZgwNDQlGRkZnCgoK BhMSEm6Mjo42kclk2aSkJCQKhSLb2dkBv3//lrWzszMvLS3NJhAIOAkJiYClpaUfFAplQ0pKir6z s9O6tbVltbm5ST5y5Ii0r6/vQVlZ2SUGg9Hv4uKiqqysLOvo6Ah69+6du5+fH/FvXp5DeXk5Ni4u 7vz79++Hx8bGim1sbMaFQiETBAIBysrKWpWVlYuXL1/+FRwcDGGz2aCqqirEnz9/YGFhYWaDg4O0 PXv2qLq5uYH19PRs8Hg8DwKBgPF4fPXz588pIBCIXVZWhnF1dV199eqVHhQKnXn79u2GmZnZ0NLS klBLS8tt9+7dlyorK89qaWndfvLkyQMIBIIYHR3dPnTokPjJkyd/6unpwVpaWqiSkpK7njx5snzn zh3C4uIiAACAoK2tjf/48eMrkZGRD6SkpBR6enr4Fy5cmNXU1Fz29fXFw2AwgoGBAXh9fX0PAABG 3759Q3h5eW2Ul5fTfvz4YWpmZtY/PDy8IRAI5lVVVU3YbPa0gYHBMXt7e43Pnz9PT0xMiJWXlx8e Hh4uLCsrWwoICNDz8PAgd3d3c7OysuopFIr4gQMHnHV1dVFwOJxvbGwsz+VyiwIDA4/4+PhAWlpa mtFodLGSkpKZUCiEkMnklYcPH+rv27ev3cTExCcoKMh9YWHhS3JyMjImJqZ8dHRUo6qqSujs7Cyc mJiQMzAwGLl+/foLJBI5ERoaWhYREXH348ePSU5OTpZMJhPa1NQ0dP/+fUUUCgVFIBBLk5OTSDU1 NUxXV9eEoaGhLBKJ7HZzc5NVU1O7GBcXN1tSUoKJi4s7B4VCK2xsbDRLS0s7bG1tWbt27TLH4XBs SUlJma9fvzL+YraZJiYmiIMHD8K1tbUZ169fN/nw4QOsoKBAUUVFBXP16tU+LBY7yefz17e2tmAz MzMrAQEBsAsXLiw9efJEPSEhoYbP59uNjY198/b23sVkMv/cuXPHR0dHB8lgMLojIiIEw8PD2Pb2 9q6JiYndw8PDrHPnzu2dnJyc9fb25lpZWRkcPnw498iRI3OKiooBbDaboqKiIiEqKqo9PDycJyMj I6mqqgqZm5ur9PX1PWNoaLh+7dq183A4vILFYs2Jiooq5OTk0Do6OtBwOLz2y5cvvJqaGlE7Ozut uLi4diKR+E97e3u/qqqqSG9v79TLly99Kioq/mCx2NGoqKh/8vLyxjMzMwM/fPgwmZSUdFRFRQXn 5eW1HRUV9Y1Go9HZbLb2wsIC297e3mFlZaXY1NTUxNfXVxQGg438+PGDRSAQxsAMBgOCQqF4a2tr OQsLC6sODg6ytra2dUtLS3AsFks7evToyl/w5ywAAMDu3bt5AoFgbWNjAzYyMjKelZXl4ePjY/bo 0aNFeXl5ZmNjY/nGxoaaqqpqvbW19d3t7W2Gp6enbX19vaiVldUxeXn5OQAAgIMHDzoCAIBxcnKi 1NTUSIuIiAgMDAysNDQ0ZAEAYD569CjM39//tqenJ+bcuXOaJ0+evCkvLz+MxWIh2tra1j09PZUg EAgoKSnJjo+PF2loaEiZmZlZkZGRcbS0tLTA4/Gkw4cP49zc3AhqamrI2NjYGgwGI4DBYAYQCETn 1KlTd3d2dhAXLlwQW1hY6H///r0SGo1WNDExcdi1a9dmTk7OCpvNFomKisoAAGBj//7911gsVsn5 8+fPXrlyxe/58+ee0dHRzSIiIrb5+fl/6HQ67+nTp4tv3761RiAQIWlpadBDhw5JVlRUGC8sLLx8 +vSprb6+Pnt+fp5TVlYmZWdnpwKFQnVyc3Mz+Xw+iEQiiRIIhF2jo6NUNTU13IEDBygAAADR0dFT 3t7eB7W1tY9paGjMwmAwVSgUKguFQnVramostLW1l+FwOA+Hw/EePnxIKi8vT7p27RpVSkqqxcDA wE1cXNxoc3NzeGZmZgsOh+9HoVCKSUlJHg0NDYOioqJ9vb29KqOjo5jt7e1lcXFxqpWVlV1GRoYY Dodz/Z8Q9+rVK+3JyUkeFoulnzhxYgICgUjLycmp5ubmQmVlZYM9PT1/IRAIzPLyslZDQ8N/MTEx 3lwul+fs7LxbQ0ODvbm5CQUAAJiamhIcOHAAv7Ozw3BwcEDt3bvXanBwEC8nJ3eBw+HwPnz4QI6N jV1vb2+P1tfXjxMREQFdu3YNq66urolCoXZWVlamOzo6umJiYurfvn07X1ZWdnXfvn0of39/ibW1 tUOWlpbsoaEhMofDmf47LSKjoqJmx8bGukgkEk1PT4+soaHhAQKBDmtqapoGBgY6XrhwAXno0CFT oVC4gUQiB3R1dXczGIwFFArFT0lJkffw8MDo6ekRnJyc1lEoFI/NZms7OTnxWCwW5PLly3UIBMJ4 a2sLcuvWrYc/fvwoBYPBYAaDMdnf37+ERqP5z58/XxUVFd0UCASAqKjoWnd3d6iioqLq69evFVZW Vlj+/v4yJ06c2FZTU7PX1NRUsrKyUpicnEQXFhZaKCsrF9vb20+dP38elpaW5lZRUVG+uLgIS0tL kxIKhRLv3793NTExaRscHFQNCQmprq6uHtTV1cUgEIhAe3v7Y0ZGRuA9e/aYHzp0aAgKhRIVFBS4 Ojo6KpOTkxglJaVdNBqNBBIKhUKBQLBEoVAeXb58GZ+amuqQkJDQLBQKYeHh4VNkMnlVWVlZOzg4 GPTff//Z3b9//923b990KRSKW1VV1Z+xsTGGlJQUDoFAYO7evdvBYrFsY2NjR5hM5nRNTc0OgUDY lJKSsiUSiSw5ObnenJwc9vXr1x9RqdRJKpWa2tHRQdq/fz/n58+fDElJSU1DQ8PZP3/+DB8+fFhz cXFRf3NzsxWLxRJNTEzwMzMzq56envMDAwPu1tbWmeXl5cHq6up3iUSiyO3bt10NDAxEoVCocGNj g97a2toXEhJiuLGxYW9gYJD9+/dvxIcPH5psbW31zc3N5aemphgqKiosMBisf+rUqdGkpCTNDx8+ 5NvZ2Rnu2bNnv1AoZAEAANy8efOjj4+PvJGRUQAAANTNzc1ODocDhkKhUocOHXrh4OBw4OzZsxIN DQ0N2dnZ8iQSCRoZGXlveXn53dLSEoJMJm9PT09jNzY2GA4ODguSkpKQ0dFRqKWlpQkKhZJYXV39 qaCg4CYUCqV9fHyq09LSbF6/fl0fEBCwqKSkdJRGo+WgUKj/XxXPzs5+evPmzeVnz56BSSQSRlZW 1nN1dbWmoaFBPCUlBSgtLZUVExPrXVtbw75+/brc398/WEREhINEIq2YTGZ5ZWVldX5+vunk5CRv Y2ND6tKlS3+qq6s3k5OTL5WUlJQBAACkp6fTc3NzrUEgkFAoFO4ik8mzUlJSXDQazTt16lQlkUhc 7ujo2Pv9+3dlHA53gMVikalU6vSuXbvYTCZzX0tLywddXV2zra0tiISEBGZmZqbp6tWrs5OTk1py cnIzFRUVIaWlpfmHDh3ygEAg3ImJiWARERF/Ho8HYLFYSExMDP/hw4ekx48f5xsYGECtrKxkc3Nz By5cuHBjc3OzEQAA4Ny5cxu+vr6TampqEnp6eh4sFqt9Z2cHXFJSMl5WVrYVFRUlq6urm9vb23s1 Ozt78O7du0Z0Oh2ytLQ0FxwcvOLu7s4cHx9ne3l5WeDxeC6Xy6VhsVgci8XimZqauikqKpbV19e3 Xbp0if/69WtXS0tLtpubGyU+Pl7L3d39T0tLi193d3dTTk5Oy7lz51QDAgJQCwsLKg0NDXQ0Gq36 6dOnz+7u7naioqLYgYGBaXd39w0sFrty48YNSXNzcxiRSFwHAADl7u6u9vLlS4nfv39329nZkSor K0dbW1txYmJiXb29vea1tbXO29vbHggE4uL8/Dxia2srpaSkRD4yMvLLwsLCq+TkZERfXx+/uLj4 KJ/Pn2Wz2eATJ05U5+Xl7ampqanbs2ePHQAAwNra2lROTg4tMDBQY3t7u2vXrl1WWVlZjeCtra0a HR2dFGlp6VdCoVANiUSaRkREhPX09FCxWGzC8vKyeVZW1oibm9t4SEhI+dLSktqzZ88wFApl+eXL lxR/f/+Q9PR0IZvNZhQUFBBzcnJWHzx40Egmk/ViY2O9PD09j9fU1KwjEAiBkpLSKTgczp+bm6ug UCgzzc3NYiAQqOnPnz9sd3f31Y6OjvqysrKhzs5OqIuLi+GePXtI8fHxM8nJybmLi4vY/v5+FA6H A4uLi49LS0tr8Xg80Ojo6L3i4mL/CxcugPB4POT9+/eLVCr1u6Wl5bpQKFT7G2Ol999//5VGRkY+ wmAwqmAweB+RSPTs7++fiY6OriwsLJySlZW109LSEpWTk+vOz89PEwqFgh8/fny1s7NTGxgYwDMY jF4GgzEPg8Gk+Xx+BQqFmqiqqooaGhoCioqK2kxNTbWtra0nt7a2pm/evBnE4/E4U1NT0EePHuH+ +ecf2fr6emp3d/eEQCDYfejQofvLy8v1UChUWFdXJzc7O5tRWVn54+zZs1QwGAzs3bt3LSAgYBGB QGxpa2ub/V+eIZPJnPv9+zfxyJEjd2VlZT2PHTv2qba2Fn38+HG3z58/U8PDw+dXV1fF+Hw+6PLl y/Z4PJ7HZrNBDAajwsXFhcVisXgAAAB79uwZbm9vJ+jq6ipmZGRkLy0tbRw+fNg4Li6OSqFQNvfv 37+8s7MDzszMfKyurq6cnZ2dNTs7W+vl5aX369cvKwKBUAuBQGACgQBYX1+fQ6PRvIiIiAIrK6sG GRkZ1ZWVlQU4HM4wMzMru3jxIv/gwYMUU1NTvrS0tNjjx48/hYWFjbW2tj4QCAQjCgoKN3A4nObm 5iaUzWZvREZGMpBI5O7z588rHjlyJCw+Pn6BRqOttbW1Zbe0tKwAAACJj4+fodPp6kKhcIlCoZTW 1dX1r62ttZ4+fTqaz+cv/LUlf/Tw8MhNTU1dLygomC8sLGwlEAhls7OzBn5+fm5NTU2WlZWVtba2 thmysrK6q6urIrW1tUuPHj36qKenN1RdXS2NRCLRXV1dcTo6Oj3W1tbTq6ur3Z6engVYLLZwfHyc FRERcYlGoyHxeDzt8+fPw319fagfP35k/Pr1a3Vrawu0tra2HRAQsH7r1q2tjx8/YhMSEnafOHFC r6+vD6+urm4yNjYmAofDwefOnXNIT08v+P79+1h6errj48ePj168eHEoOzu7RFRU9A0MBtMrLy9f UFVVRTIYDJ3JyckPhoaG6m/fviUkJCS0+vv7P6upqXng7Oz8LC8vz7atra3A3NxcfN++fVMWFhZz PB4PFBYWRhIREeFLS0trzc3NDZ4+fdofvLS0NNfU1GQzNjYW/+3bt8CNjY2ompqawry8vAgOh1OU mJiICgoKSpmcnISeOXOGlZCQoCkiIlKPRqOJqampB1JTU18YGxuzXV1dL8nIyJzS0tLyunPnDjw0 NFQFAoEINTU1j6enp9+1trYewuFwv0xNTXXLysqGurq6Fg0MDPZMT09rWllZiQiFQuLly5cPLi4u oj58+HApKioq/cePH7kKCgq09PT095WVlfNiYmIbDx8+lNzc3AzOy8vz5XK57Pb29iEQCIRva2uT xGAwrtXV1bM5OTlGXC5X/sWLF5d5PF5NRkZGTVtbm4GMjMxPY2NjwtjYWNfm5uYXBQUFKwcHB9W6 urqtv5hrdnV1tbStra0aDAYzTE9PF7q4uFzy9PRUhcPhWxAIZAuFQkm3traqE4nEP0gkUjY3N9fc 3t5eXVxcHOHo6IiSkZFhEggEaTqdDjl48KCooqLiBoVCmQ4MDFwFAID0/v17WkVFhd/W1ha0s7Oz eHJykotCoZRsbW2PLC0tLU9PT8fl5eVtLy4uYsBgcPvm5ubE/20Atra2urdu3Wqqrq5OZbPZLYcP H5b08vJyLy4ujpWTk/O+efPmMBgMRiEQCCyfz18ZHBys+qvMVyQlJS14enpejoyMxG1tbXVBoVCJ wsLC/IyMjCQpKakmDAZzBAKB0Pr7+8+qqalxxcXFDc6dO5eVk5Nzz9/f3zk7Oxuiqampsr29/Z+e nt4GEolkgcFgBQkJCURPT09lTk4OLT8/HyUvL7/b0NBQu7W1ldXa2nrI0tJyW19f3wwEAjVISUm1 /vvvv3bV1dVWq6urEAqFslBaWkoHAGATBAIBAoGAMDQ0NIzH428eOnQoTUND42lUVJT4nTt33nz5 8oX577//0o8dO1YlLy8P9fb2dpKRkSH09vZuampqMjIzMwe6u7ufKSoqmhKJxCtoNNogLy/PWk1N TRuDweRpaWlha2pqxOh0utTw8DB5c3Nz4MaNGyZnz54VWV9f//Ps2bPNs2fP8kxNTdF2dnZyX79+ XUxOTsZvbGwEKCoqqoyMjMiLiIjIXrlypfrq1ascDAbDHxoaKkWhUIjXr19LkkikSHFx8ZHfv3+r X7lyRby0tHQcj8dLFRQUMKenp4mhoaFGqqqqY0QicTAtLW1DXl5+CAaDUQ4fPjzZ19eX2tvby9DU 1NR68eJF3cWLF5fS0tK0vL29A+l0+vLOzs6ymZkZ5e3btzbm5uaUP3/+TNy/f/+7i4vLh+/fv7Nl ZWXBERER2gUFBRcjIyMbJCQktERERIL7+vqOZ2RkwGxtbeEwGGySwWBwpqena0Eg0PrW1tZjkKGh 4aP4+PjZ3NzcLS8vL1x3d7eCoaEhEB8fj37w4IEEk8mE2NnZ+WloaIR3dXUdnJiY2NTT05M0Nzcf /f37t05WVtavtra25cTExKMCgQAICwtbTEtLw0ZFRfU+ffr0+f8t3qysrAssFkvY19cnSyQSlf38 /CAsFktpYGBg0szMDE2hUOSqqqoa5ufnUfb29hImJiZWIBAI6O/v/2NoaBggEAhYBQUF1/39/c0X FxeJTCZzGwQCiR48eLB6bm7O7NmzZ/kVFRWE5ORkydXV1ZGwsDD1xMREQVlZ2VpaWppkU1MTiUaj tWOxWEkymQwHAGBRS0tLVygUggQCAcDhcCaoVCoMgUAIvLy81mtqaq7+XVs9X1tbY3E4nDQPDw/n y5cvb//69QvT39+vwmazdcXExHgdHR3kBw8ebGVnZ+unpaU17927V2X//v1B29vbHqmpqRpCoVB8 z549ks3NzQ0GBgbAvn37sB4eHuTV1VXP1NTUnYmJiR4SiaQlLi6+PygoKAMCgfBIJJIMFovlnTlz JrKpqSlUIBAATCZTDoPBILFYLF9ZWdnYw8OjIS8vTwEAACA5OZlubGxMAYPBg1paWkrNzc1kX1/f Bw0NDV+hUKhwZmZmyMvL6z4EAtEHAADK5XKn6urqrv38+ZMrJyd39M6dO4FgMHjx9OnTP0NCQnp2 7959k8lktnp5ec0mJSXNxcbG4jMyMhTHx8dRqqqqxzgczmcmkwkBAABgsVgbEAgEPDc3p37hwoXt +/fvgwEAqFFWVtbIysqaHRoa2kaj0ex79+6ZCQSC/tjYWMaHDx9CBgYG5mpra5u8vLwUaDSahJmZ 2RKHwyGWlZXR2tvbv9y4cePP35V0ztjYWIO+vr5FQkJC9uXLl11HR0e3goODqa6urqDHjx+/Xlpa uqCgoLA/Nze31tDQUKW/vx978OBBq6ioqLfLy8s4MBgMGBsbK4JAIOG7d+9gCQkJ1f39/ZyXL18y pqenwyAQiMrAwMArERERZwQCIWCxWOybN2+2REVFrWdlZZGio6PVPnz4MLayssKLjIwMAgCAZ2Fh kWZnZ0dWU1MDvL29Rd+9eydBo9EEYmJi7MbGRnZgYCBQW1urKBAIKKOjo8K/TXw7LCzslIaGRm9F RYXo2bNnJxUUFMifP3++8OjRo/p//vkHHxERMfzgwQPt+/fvrz58+FBFVFRUKygoKHx9fR0XHx9v ICUlxT1+/LhKRUUFYe/evYVjY2NWZmZmv9PS0kiTk5MABALpTU5OhiQnJ7NXV1fVpKWlZba2tmhF RUXUkJCQYKFQSFtZWRmADAwMXCESiUY9PT30lZWVHTqdvqWuro49f/58tYKCghMWixUtLi6OiIyM 9JqcnNwikUjHv379mmRhYUFFIBAjVCoV6u/vDyGTyVJcLpd+4cKF4wsLC/1UKhX4/ft3o42NjXF9 ff2/s7Oz2SwWC1xQUCBUUFDQ0tLSmn3+/Hn3zZs3FdFodIG2trahhISEnLa29qK8vPzszs6OPBQK HZ+amiJraGj8jIyMXP348ePvgYEBlKKiYpGxsbGGmpqa9crKSpu1tTVXTk6OsrOzo6qjo7OjqalZ Mj8/r/T8+XP9K1euzJiYmBjNz8+vubi4aJDJ5D4+ny+zubk5NjExsaWoqCgeHh7epKCgUNjS0rJk YGDgkpCQUJmenn6BQqE0FRQUfDYwMCCkpKSMBAcH/5OYmNgNAIBoe3u7Jx6P73BxcbHgcrlIoVBY Gh0dTYyJiUEqKyvD8Hi8cH19vcfd3Z344cOHm3v37rXGYDBN6urqZo8ePQLt27dvHQqFIiYnJ+H/ /PMP0NraKj4+Pi6cmZmZo9PpM2AwGOjo6KBNT0+v8/n8XCwWa7CwsDClpaWF9vHxQcfExOwhk8lz SkpKjImJCUltbW2OjIzM9NbWltj6+ro0gUCQNjc3PwSDwVS8vLwW8vLy8B0dHepsNnvZ2NiYwmQy y8hkcqWOjs5+Y2Nj48bGRvbZs2fvR0VF/aRQKMMpKSkmFy9ePKCkpLTU1NSEKi0t7S0pKRlJTk7e IyIiAh4eHn6rpqb2aGBgYJDD4cw0NTVNeHl5Ye/evStbX18/gUAgcAcOHDAdHh6mFhUVyb1580bN zs5OnUAgWM7MzHD5fP5SW1tbx+Tk5KSysjJ/eHh49vnz58oaGhqo0NDQZSQSuVhYWDhqY2Mj/PHj R6qFhUX4+Pj4HzExsXpDQ0MPGo2GXl5eZuvq6govXrx4uqGh4bmamppSbm4uc319fVYgEOhDIBCB tra2IDQ0FOLr69tnYWGx/vnzZ6nAwEAZIyOjLHd39yJLS0vva9eu+XV2dpZlZmbWxsbGqoeHh5NY LBbAZDKX/P39RYeHh013796N9PHx4dy5c6fX2NjYAIfDYbhcLuf37/+Pp+/+p7px/3+d4SzHcTg4 h2Nz7L1FZnZE3ImK2zslqzSkKMkdKSkpGUmlVCQNKpQSsikyyt6O43CGszjr+0uf7/9wPa7H9Xxe z9G4cOfOHbvl5eVhJyenlfPnz8O2t7dhnp6elnp6elgvL68kNTW1GhaL9bu6ulpFUlISsXv3bpKa mhpDVVWVbWFhQWpubi4gkUiW1tbWTJFI1GNmZnbUwsLiPQqF4oWEhMSiUCiVp0+fZoyOjgokJCTA bm5uhKampnkqlUo4e/bsMpFIFBQWFvKioqLkxWKx2tWrV5kxMTGmEAgEmZubW+3m5iaHQCCIycnJ jOvXr0dUVVW90tPT04TD4ULQ2tpa3ebm5mZ5eXm3l5eXDAAAwMDAAA6Px7cmJyf7d3V1Kfn7+6/0 9/cftLGxOdDT01PJ5XKbJicnq2ZnZ6UNDAyIW1tbOunp6UVDQ0Oe7e3thK2tLXBcXNyfO3fuEIqK ihrk5OSIbDZ7ddeuXVpJSUlDExMTwqysLFc8Hi/l5+dnura21qWiohINBoMBoVC4npGRkUkmk60r Kyu1jY2NK588eWJBoVCUrl27VqWgoGBlbW3N2rt3r4hOp1OzsrKUdu3aBYZCoSOKiorORCKRp6Gh YZWVlVUvJyenUlZWBn/48OEvAwODYB0dnbrJycnQwsLC9qNHj+4Ui8UTIyMjderq6ooZGRmYq1ev +v2VPI/l5eXRzMzMTtBotEaRSDRUVFQ0tba2JqBQKMa3b982u3bt2recnByn2NjY3xoaGhvHjh3j hYeHv0xMTNzp6+ubAwaDZQEAAEpLSy95eHis1tTUkJOTk98wGIxwkUik09vbizU0NITU19d/wOPx an+dkXYikWhq9+7d75lMZvLPnz9HS0tLR/bv32+lo3QVjtgAACAASURBVKMDSEtL7xgaGvqBRCLl tbW11Wg02nxPT8+4m5sb9cGDBwY6OjrIxcXF4QMHDuwrKCgo8PX1tVlaWmoODg72MTEx4cvKyi5y OBxURkaGlrm5OQmLxdpPT09Xqaur2xCJxJGVlZXdAAAAmZmZAY6OjtpwONze398fJy8vPzoyMuIp EolAQqFw6H//+x/V09NzPCoqKo/JZJ40NTXVzsnJ6czPz+e/f/8eEh8fb3Hnzh17GRmZFQAA5K9f v/6TzWZL2dnZwWAw2A8jIyMmHA633Nra2nzy5EkPg8GAxcfHGz5//hyxsbGB+fLli/DOnTuM9fV1 sYyMzLaOjo6QSqVKaWlpHeLz+Yt5eXl5DQ0Nsv/9959sUlIS/dKlS0b+/v67KBRKtaKiYsry8nIz CAR6paioeE9HR+fihw8fNFpbW7/duHHD2tDQkFlTU9MAAECsWCwO+7/r9OjRo5dLS0sv5eXlpSsr K8vh8fiX9vb2/83Pz3esr6/DioqKBo4fP65dUFAwmZOTE6arq3uayWQOfPv27cDi4iKSzWaPnj9/ nhASEuJqZWX1W01NTc3T0zPz/8RA7u7u1/fs2UPv7e2lRkZG7rK1tRX9+PFDSCAQkElJSQx7e/sJ Foslv3PnTlh6enpveXm5Ph6PBzgcjjwYDAaIRKIhn8+fAoFACmw2ewUMBkNGRkY2hELhlqSkpERF RQXr7t27FyYnJ0sKCgp4nz9/pufn52/o6+trHDp0aM7BwWEiLi5OHwAAM0VFRT82m/3j06dP78Bk MnkuLi7u9+nTp1nGxsYWLi4ufmQy+cqVK1esEAhEhZSU1GpHR4e8SCRa6OrqujU1NVV4//79p0gk ErW0tMSBQCB4GxsbXGho6Nzw8LBPUlJSlZSUFOLChQubz549m29sbNRaX1/Hf/36lTQ5Oal77949 YxqN9qSysvLD7Ozsp8TExGtKSkr+YDAYAwAABgQCAe7u7qSZmZm6r1+/Uh48eID29/cf//Lly28n Jyd2aGjoNggEoqenp3eSyWTtnJwc5X/++WcmLS3N/e+7kjw+Pv4+JSXFRVdXl1lbW7uho6NzBAQC yYyOjgb09/c3CQQCMBgMHofD4cS/RpJlRUXFTSQSierq6up+8eKFSFZWVvbJkyclU1NTBRgMxh2P x8N6e3tVZWRkxPfv3//2+PHj8ZaWlpGEhATOkydPWsFgsHh8fFz11atXqJSUlOqLFy+eW15ePu/i 4qKioaFRzGaz8RQKpaC3t9dmYmJi0tPTM+HRo0cLFhYWSjgcTlJNTU0PDAZT/fz8mgoLC3cgkcjP cnJyRKFQCC4tLVUAAACYmpqqMjQ0tNDW1lY7d+5c7fr6+hQCgZB49uwZ3tfXl+3t7e2Vk5MjXVZW 9uL06dOJMzMzG0lJSXswGIzW58+fneLj49nV1dXG0tLS7MHBwcmGhoa7SkpK8GPHjl1aWloyrK6u PmRtbf0MBALtcHR0dKbT6S29vb3b09PTSltbWwM8Hu8XCARC7N27tzsyMvLi3y76W5mZmcUxMTF+ SkpK9p2dnS6VlZUGCwsLj7q6uprpdLowOzub1NjYiLCxseE6Ozv7dHd3865fv76IRqMt9+zZ4/nn zx8CBALBolCoJTc3tyVbW9vhqakpyc3NTcDU1HQvGo1W1tLS8gKDweitra3fZ8+eTX3+/LkpFAqd 7u/vTwoMDIyCQCAqioqKJ/X19dOVlJTcLSwsXLKzsy/p6upqnz17dtPT09NleHj4YEZGhioAACYA ALz8K3EH/s6NaUNDw93Tp09ndnd3b1Op1JCtra3f6urqdhUVFTwLCwsFY2Njv5KSkn1IJHKWxWKl 9vf3X6RSqdIikQhpYGCgx2Qyo2JjY+mFhYWYxsZG8Pfv32NHR0dTVldXC83MzMR6enqdIyMj+r29 vc8ZDAY3KyurJSEhYUVFRWU6Li7u29WrV2XHxsbGQkJCUCwWi7u9vb3R0dHR29PT0yESiQAYDCZ/ 4MCBZ7KysqZYLNZjx44dfgYGBgpPnz5dSklJUR4bG3vKZDKl8vPznX19fRk6Ojqyra2tvTExMauj o6OuCgoKBxQVFe0oFIo3FAotCwgICAO1tbXdx+Px/TU1NeDExETEmzdvYAsLC9JUKrUbBAJZa2ho 0GNiYhLBYDAgFovhp06dunv9+nW/f//9t83Y2Bh66NChSUlJSaGUlJS7SCTCbm1tUSQlJXU/fPhQ k5mZKVRVVV0ikUgGdXV1ig4ODuuNjY3qVCp1287OTuTl5VWblJSUyOfzQZGRkV+fPHniPDw8/MXa 2jrr/v37aWfPntVeX1/fVV1dXWJkZCRRV1fX4+TkpBYeHu5CoVC0+vr6vgAAAGhqatJFIpHr2NjY KpFI5JaWls4ODw/zUSgU2dHR0aK+vh55//79qeHh4VmRSGShr6+/WVZWJkulUu9SqVQDOBxOevDg wfHt7e1vv379oqmpqek2NDR0Tk9PS58+fdoGAAAAiUTKGxkZtaNQKOGBAwf6zpw5U3b+/PlsCAQi TkxM3Lazsxv8+fPnDiMjoyEDAwMXf39/PgwG+7Vz504NZWVlVGFhYbO0tDRfQ0NDLS0tTfPatWvy XV1dk4mJiR5SUlLCP3/+9GpqanooKCgcXV1dLRkdHa149+7djIKCgmddXd2vZ8+eSYtEIsOoqKiO ly9f/hsVFVV86dKlDaFQuK2hoZFx48aNLhAIBIZCoT9wONzW6dOnY93c3J5ZW1svPXjwQBsKhQIa Ghp/GhsbX9XU1FSFhISEAQCwyuVyGxkMBnRubo4jKSkJuX//Pk9DQ4NaUFBA7O7uhuNwOEsOh9ML BoMJAwMD39BoNHJycrK7rKzM6sOHD6fevn37wNbWVtbQ0LCZRCLZvXnz5p2vr29gZ2en5vLychUA ACA/Pz+L1tZWuIKCwhEKhVJ6586d37GxsXYsFgsiEonmxWIxRlVVdbq5uRng8XiQO3fu0K9evarC ZrOXHzx4oGltbT2fnJx8mUqlfvT29n64b98+bHBwsJubm9vKjh07eoKDg21KSkrmuFwuoaioSNXO zs6kvLy8R19fXyY7O5tcVFSEfvXq1UR0dPQNAAAAEAi0DwAAAQAA6+bm5lF9fX17wWAwTCgUjkxP T9exWCxoVVUVOTs7+ygYDNb8y3F8npiY+MJkMmWam5uViEQiJDw8XEYkEgEbGxsUJpMpHh4elhII BH1KSkrahoaGyydPnhSYmJgsIxAI8L59+/ynp6cXRCLRa21t7RBDQ0NMU1MTHAKBACUlJZP37t1T 5XA4EAMDg9/JycnUgwcPBk9OTrYqKiraw2AwOAgEWnv9+nXP4cOH9zOZTIakpCS2urr6z/79++3o dPqv9vb2l0pKSr4gEGjr4sWLn3t6eg4YGRmthoeHf6ZSqTLnz5+PAwBAks/nMwQCAUgkEqXPzMyE QPLy8pwJBEKgk5PTkadPn46QyeRuXV1dtYiICBU5OTm8trY2fmVlZdHU1PSnq6vrpIWFBQYEAi1H Rkb67Ny50x6LxQbDYDD46urqq1+/fv0qKSnheXh4uH/48KH59+/ftLS0NHB0dHRmVVXVdyUlJTGV Sl3Nz88XXrlyxczCwsLp7NmztxITE5UrKyvFJiYms7du3cooLi5OiYmJuUoikWr19PQso6Oj50+e PGnn7Ozsjsfjrdva2n5MT09rSEtLM9XV1amqqqrRcDgcjUKh2M3NzV3BwcE6Bw8edAWBQD0DAwNr WVlZE3g8/vjg4CBFTU1tGI/H72lra1u3sbFx/fz583MzMzMPZWXlV8ePH0eMjY2RFxcXmXFxcacB APikpKSkfffu3TZHR0e9hIQERGho6KiEhIQqHA5v6u7uBt+/f/+XkpKSLJVKRVtYWMgfPHjQdnt7 e/vp06cYKysrvJ2dHQ6NRjvKyMjg9PX1EdPT0yqZmZmyL1++nEpISHCNiIj4oq+v34bBYGRlZWW1 jh8/DqmtrW2pq6tTmJ6epsPhcJC/v/8PAoHgk5+f3weFQhcaGhraCgoKTnV3d686OTmVPn369Nnt 27elHj16JCkvL88yMTExdnNzGzh16pRPf3//zw8fPvjY2dl9iIiIMPz69WtFWlqaRUxMzFZCQkLL 3r17o5ubm98ZGBgoE4lEGT8/P097e3ubhIQEJhgMlgSBQNIwGIwYGRl5R0tLC8FgMHh37tzRzMrK gnV1dd1SV1dnWFtbG169epWxY8cOakpKirOHh0f7nz9/5FtbW+FSUlK879+/Q7q6ukbRaHRPVVXV ZkJCgvfU1NTa+Pg4BQaDMVVUVAzq6uombGxs0CYmJsufP3+mx8fHe3R1dUGysrIOp6Wl5cJgsB+G hoYazs7ONt7e3gGysrLKTU1Nz3/8+GFVV1cnGxYWhreyspLIyclZnZqaCjczM+ucn59votFoJocP HyYikUgRDodTFQqFz8PDw3/u3LnTXlJSEr+2tianpaU1LS0t3VtRUZHKYDCgzc3NeiAQaM7a2loV gUCobm1tjQMAID07OzvMZrNRAQEBEiAQiINCoZbX19exUlJSdBkZGezr168FioqKEjQajfv792+1 2NhY0fr6+q+hoSFSbGwshkAgDJw8efJIUlISDwQCFS4sLFCjoqJ2ZmRkcNhsNkJWVhZAoVBfPTw8 zKWlpQloNHotNja29ebNm6rOzs4SpqamKBQKpSgQCFAIBAL758+fpZcvX76ztrYWvHjxYmhkZETK 09PTYG1tbSs9Pb0vKiqKRSAQdGEw2CQKhULLyMg4cbnczzAYTGFyclIbj8dLQf/8+fOHy+X+am5u dvr333+pmpqaz8BgMCY0NNQyLy/vMAgEgrFYLDSJRBLhcDj03zhrm4aGhsdtbW1qGRkZU0Kh0K2q qkpMJBIxeXl5CZmZme8vXLiQ6uXlVWloaHjs+/fvjzMyMqirq6uskZERs8bGxkU9Pb1nNTU1876+ vr75+fmGc3NzLfv27fv95s2b8mPHjl0bGho6+ubNG/j09HQAj8dTa2lpEYWEhAinpqakTUxMxlRV VXGnTp0aw2AwCWw2ewIMBnMlJSX1lpaW6u7evUtOTU01ffz4sVJaWhqipqaGa29v3/Lr169VMpms k5ub+zY3NzcIAoFsw+Hw+KSkJD1XV9eZwMDAhn/++ec2CASSAAAAqK6uhs/OzjacOnUq8M+fPxU0 Gm0iOztb49OnT1t8Pv8yk8ksqK+vlyOTyZyKigr82toauLOz83teXp7fyZMnZwsLC9Hh4eFCBoPR gMfjgfz8fCkWi7XV19c3dPny5UMCgWCjvLzc4+XLl8X29vYSMBhsuKenh/znzx9FSUnJ7WfPniVy uVzwxMSE4YMHD76fPXt2565du6xLSkq+oVAo5aCgoOsAAAD6+voMMpkMxePxzOvXr9NcXFxIV69e 3U5LS+t7/PgxUiwWZ9XX1z8ZHh4uHB4e/jchIcGLxWK9z8rKUqXT6Zc3NjaUIBCIglAoXMLj8f84 Ojrura6u1u7p6anH4XCakZGRvCtXrrg+evSIm5KSIm1ubr5KoVAYKysrenQ6XUij0ayfPHnSub6+ zhSJRKs9PT1bZDJZcOPGjWUnJ6cjHR0dqKmpqXE0Gi3U0dGBAQDwc3l5eUJaWtpgbGyMZmtrS3zw 4MFqYGAg/datW3rV1dX7eTze0P79+9X+4nN9OBxuffTo0cWPHz8Kvn37xpSVleVfuXLFZmJiQmho aMgUiUTz5ubmhQQCIdXe3j6+vr7euLGx0UNBQaEYAoFUycrKUq9fv56dnp4eu7CwsNbb20sQCASc S5culRIIhDAKhSKmUqnxpqams3g8/rOjo+NJCoVCw2KxYDgcrsfj8Wbu3LkzbWBg4LGysvL78ePH iIKCApCRkZH33NzcRxAIJJKXl19lMBgS6+vrZFVVVWFVVVWHra0tNikpCeTl5TVWXV29UyAQiEEg kMypU6dyQCAQUFpa2qOmpqYFAABw/PjxyuLi4vPR0dE5HA4He/v27aX09HTFJ0+etKekpFidOXMG ymAwej5//rwBgUBA7u7u2OXl5e9ycnIPjh8/3ozD4XQBABB4enoy0tPTdYqKijQmJiZav337ppye no7o6+sbQ6FQkjo6Ot8+ffqk9uDBg+/gtbU1JBKJhFlbW6/SaDRdRUXFPGdnZ7fh4WEtZWXliM3N Tdnw8PD1zMxMxNLSEmNycvKnSCQCNDU1OVpaWmlwODw7Ly/vYUlJiSIEAoGfOXPmOZPJZG5sbDzs 7+8f8vf3P7S9vc198eLF5srKCtnJyelLWFiY9ubmJvfkyZOJdnZ2UAKBsIrFYqVv3rx5ytLScubR o0cpZDKZVl5evrOhoUFjaWnJ7tChQ1t9fX1ydXV1jTExMSEZGRlSLS0tSAAAAC6Xu721tcW8du3a LXl5ebSlpaU6jUbrfvnypbetrW1GYmLicRwOV5+YmPiPt7c32c7OTu7379+daDQaaWNjs1NaWpqT kZEho6KiogmBQBTm5+ejsrOzD62trX3fs2ePDZvNft7Q0KBFJBKNjhw5gpybm3MLCgq6c/36devN zU0uGo2W6+/vB96+fbtSUVEBffXq1VpLS4uEgoLCFo/H66uqquJJSkoSi4uLTTY3N2WLiopsc3Nz W62srGbk5eV14+Libg0NDVGmp6c3bWxsbJydnbF/o8nuMpnMAWNjY62goCDNpaWlJU1NzdaJiQnZ Q4cOVXp4eCQTCIQAPT294L+utaWWlhZmSkoKu7Gx0c7Kysq6p6fnkIaGhlFSUlLX+/fvkYuLi9Ss rKzI/fv3N1RUVAy+fv26X0ZGpjEgIGBiYmICqaOjo1dSUiJmMBjjCAQCtr6+Dnn69Klke3v7YHFx Ma65ubndwcFhiU6nM8LCwizl5OTQQUFB5QwGQ1RXV+fy6tUrob29vVgkEgGzs7P6YDBY7OPj8xqP x7dnZmaSGxsbG2RkZOTn5uasAAAA9uzZY4DD4Wamp6f3NTU1Oc/MzMiKxWKAw+GAnzx58rS4uPh/ Z86cwbi7uyuFhYWhOjo6NgkEghQej9+pra09WFNTw5iZmdnQ0dHZu729/SU4ODgbCoXqxcTE8I8d Oybl5+fnNzs7+2RgYOBjcnLyKUlJyQECgXCew+H0zs/Py3Z0dJjq6urioVAo4uDBgwpZWVkKysrK qhAIxFFRUdE9Pj4+GovF5rJYrL6RkRGDM2fOIOfm5vR6e3vrl5eXOfHx8dVlZWWrFRUV1KGhoQkP D491fX19SXt7ew6JRLIyNzf30tDQMPv+/bsjgUD4ND8/L7G5ubkOh8NlxGKxxL17977h8fhtBAIh qq2tTQAAALhy5YrsoUOHyhEIhMTVq1fJOTk5TXFxceuWlpZKRkZG7idOnHBnsViinJycJi8vryMA AEjKyclFgEAgcV1dHTkwMPBXbGws8u3bt51wOFyYlpbG7ejoaIdCoaTZ2dmHz549Ey8vL0+EhobO gQ8fPqyQmZmp2tLSMt/W1iYcGBgAvX792sXIyGgKAAC0QCBYuXbtGpjL5YKzsrLWOzs7Zd68eZMh Ly8P//Dhg+HHjx9zDx06pKOrqyuenZ2lZWRk6KampkJRKJQSgUBQu3Dhgt3Vq1fhcnJy1OXlZfTl y5dvwmCwxdraWsSxY8faZWRk/n316tWUs7OzICEhoauvr2/27t275tbW1rG/fv2q/PTp021jY2Nw eXm5REREBMfOzs5YTk5OgMFgYPfu3ZMUCATj3d3d/SwWC3nhwoWbBgYGuLNnzzLT09PbJCQk9AEA EPD5/CV7e/s4T0/P5rm5uR+XLl3a8vDwUJaQkNBFIpEifX39xZaWluwdO3ZkicXi5bS0NIvo6Gjf kydPBnt7ezetr69DUlNTBXFxcei3b9+C8Hi8qqysLOv48eMtO3fuTGSxWL8VFRWXpaWlERUVFbsE AoG4qanJ0c7Obqiqqoqzf/9+rKWlJQiPx9Ps7e0/l5eXrxgYGIgKCgq4AAAAY2Nj5YcOHUpsbW39 oa6urh0dHf29qqpqAoPBOEpLSwsCAwN7DQ0NkwwNDZOsrKwIjx8//j42Ntaur6+PamhosBQIBCMI BGK8vr5epaam5s7jx49lIBDIzs3NzXYMBjP38uVLjJmZ2R85OTlTJBIJP3DggOXz58+9jh49ahgW Fnba19c3wdra+rednd3o8PCw/7dv37p//Pix0dPTI5SRkeFDIBDe169fzRcXFzkHDhwwJ5FISkpK SqK/3Ijw5s2bi2/evJHW09Mbra+vV0pISLAvLy9fT05OHiKTydWNjY2BcDhc+9q1a/QdO3bYIhCI AwEBAYsPHz5sgsFgIllZ2dH5+fndZmZmzMOHD3dlZ2en/tU5kIeHh1W5XC6Yz+c/ePny5R93d/ep ioqKpr/JQoVEIpG9e/fuwIaGhq80Gg3MZrOb6+rqzPv7+7FeXl7LBAKBp6amtqO5uRmfkJBwDwAA 4MCBA/kMBoPU399PdHV1NS8qKvqkrq6+6/Llyz+Dg4N5XC53vbGx8SgAAEBxcfFVPp/vp6OjoyIU CkHz8/NbFhYWWwMDA0k8Hg9z4MCBkY2NDZS/v//WjRs3vLKzs8dTU1OF79+/Z+3atUuVTqdr5ufn 13p4eDT+JRuLwWCwFofDoSkrK898//49mEAg0JeWlhgKCgr0lJSUQVlZ2X0tLS0RPT09yFu3bjn1 9/d7lZeXM3Jzc0uYTCZDLBbLIhAIcHl5+SlFRUUgMTHxBofDgXV1dY3s37//yIsXL3adPn16wtLS slpXV1eVyWSqa2hoqB05cuRZU1PTPwoKCjp0Ol0iJSWFBLawsJCtqqrSJBKJGwYGBowLFy6o1dfX 9z569ChyYWHhCRwOFxUXF38sKyujKSkpbSUnJ68MDg6Snjx5ohYbG+tlaWk5rKSkpBAdHb26uroq v7KyMp2XlzfR3Nzch8Fg+MrKyigAAIDIyMg9Fy9ePOjm5hYbGxs7IxaLB1NSUnhPnjzJtbKyQnh7 e7czGAwQDofzE4vFABKJhB46dGinWCwGPnz4YPHp06fJmJiYqRcvXsgYGRnR+/v7K319fSlQKNQI i8VisFisfFBQ0GVJSUmlBw8eIE+dOuVLo9GaRCIRCwqFEi0tLevOnz//hUQiGZHJ5Cgul+uFwWBu KCsr37G2thbCYLBsEAgEAAAAnDlzxm1zc5OHw+H45ubmU+/evQMwGAwahUJ9DAsLA4NAIPmSkpL9 9+/fdxIKhY1cLtfMwMAg0tPTkxgREfHZ1tYWy2AwPmlray/u3bvXJSIi4g0AAICGhkbP9PS0+seP H9kXL14UJCUl8UQiETA+Pr4aFBRUERgYuIRCoRqnpqayp6ensxcXF1eXl5dX//33XzQAAEBbW9td BwcHnqura1B4eLi0tra24rt371ScnJwkNzY2Sv+P0e7t7X179erVFCUlpViBQBCVkZFB3LNnj+Gl S5f49+/fp+BwOM2VlZW17e1tkFAoBKBQqEVXVxfj5cuXzVNTUzw3N7cTv379ItPpdGJdXZ0oNTUV W11drayhoWGRnp6+CACAbHl5uYWzs/PUzp07/WdmZkx7enp8VVVV9Z49e/bl06dPM8+fP5cNCAgA c7lcLW9v786tra0NgUAAam1tnWSxWINkMlmnoaEheXJyEh8YGIgAAACwt7eXoVAoVl+/fjXNy8ur WlxcVHNxcZlYW1szMzIyCu3s7FQaGxszh8PhQgkJCbnS0tJbRkZGOCgUah8YGOgLh8OREAhkc2xs 7Lm5uTnj5s2bP9+/f9/k4+Oz3N7ebv7ff//tGhwcxDs5OcmGh4dPDQwMkFtaWnhPnz4dp9Pp/VZW Vqvu7u7c3t5ecFNT00pISEjBhQsXmoeGhv5sbGw4ycnJUSwsLB6TSCRJJpMJ3b17978rKyvz09PT DF1dXQ0mk7m2trYmrK6uVj9y5IgmjUaDRkZGzhUWFnptbW2JDxw4QPTw8NAxNDSEGxgYrBw9elTA 4XAAFxcXWlZWFllfX/+XsrJy+/DwcH98fLyssrLyr0+fPnXs2LHj6uXLlxX7+/sNzczMplNTU5/H xcX9U1NT8/TmzZvjd+/ePSMnJ/fP9+/fCaqqqk7a2tqyk5OT/pmZmQZnz57tJBAI0ydOnNh2c3P7 4+3tTQ4ODq7++fPnpL6+vgQ4Pj6eHBERMXbq1KkbHh4egWfOnBnw9PT0WV1dRQAAwHnz5s2EUCgE EhIS5qKjo5k8Ho9aUlLCi4qK0m5oaGBQqVQJFArlqamp6bpv377RR48ejbu5uQlKS0ulIBAIZHp6 +m1cXBwDCoVuS0lJGfX19Vn/73//2xoZGXHc2trCmJqa0p2dnSmdnZ39X79+bUlNTW0JDQ1ta2tr +1VXV/dEIBDc2N7e3i4oKEj18/MT7t69e2V8fFzd3t7+7tzcnPTw8PBHY2PjzYyMjLPFxcWWAoFg DY1GAyAQiFtcXDwAAIAIAoHgFxcXVfbu3dvJYDAglZWVja9fvz567969GQAARE1NTdDY2FheVVVV Fp/Pp8DhcPrY2NiatLQ0/N69e/daW1u1X7582Umj0UK8vLwywGAwlk6nd2xsbMyiUKiI/fv3nyST yUsYDIZfVVVFmpycvINCoUBPnz51QCAQimVlZdG5ubl/4HC41tDQEPHw4cPbpqamwgsXLsDPnj1b IRaL5V+8eKFNIpH++fr1KxQCgWi8e/fulpaWFgcMBotsbGzwMzMzjS0tLZTFxUWjffv2wbhcLkZD QwOVmJj4o6CgYBAGg8W4u7vPAQCw0dPTQ2hubjZ6/vz5XlNT05zExEQslUpFHTlyZOjixYtOKSkp devr6zwsFqsFAoGmAABY6+3tzfP392+BQqHisbGxr35+frqpqamwP3/+tFZXV3tgsVghDAYTKyoq qru4uBDPnDmzlJ+fv4ZAIDBOTk4KlpaWw0gkpvTnMwAAIABJREFUsuPZs2cely5dMsjJydGSkpLi vH79+ldWVhb7woULXyYmJtDHjx+/GBQUVBISEiIFgUDYBw8e7Lt8+TIpNzf3OIfDUf748SMjNzdX Lj4+fkdTUxOJRCK5Li0tcXfu3PnGz88PzGKxIEeOHHFdW1urO3bs2AETExOkUCjsAABg+/79+y0U CuUtkUjUn56edlxdXUVevHjxX2tra0pSUtIfeXl5c2VlZdPw8HBDNze3IxcuXODFxMQok8nkfyUl JRVHRkZQAoFAbXR0FHf8+HE9fX39DRcXl6Xy8vJ8CoWSnp2drbG0tBQsEAi4ysrK0Onp6XFzc/N/ 2Gy25IkTJ5ZRKJQwICBgC4VCvQMAANja2uLyeLy1goICDRsbGzl7e3u8jo4O1t/fP7e3t3c9Ly9v rLm5eWhlZWU9JCREcufOnVP+/v56cnJyHdra2vunpqaQTCZTs7q6OktHRwcpEAggQ0NDetnZ2fuh UChQXV2tHhERIQkGg7WGh4evhYeHT/f391uBweAJKpXaYGZmZrC0tKSIQqFKtLS0ZD98+KCtqqoa 2NXVlRYdHe1w4cIFddDw8HCVvr6+PYvFevfx40fM7t27JcFgMMDj8VoFAoEZCASiodFo1c3Nzcmc nJwVKysryrFjx8yIRCLVwcEBEIlE4PPnz+uKxWKIra3t4sjICFpBQWFhfHxcLyYmRlRSUgLW0NCo 2rNnj0Vtba1XZWVl09GjR6/GxcWVV1RUGHR0dNQZGRkd1dPTKzQzM+Og0WiempoaJjQ0VPvKlSsj J06cwFpbW5//24F2QUFBIRgKheo+f/78QnBwsF9LS8uClJTUgoqKCo/NZiuzWKwJQ0NDr5GREaau rq4mAoFQAgAA4PP5Y9vb2/iVlZUZEAg0unv3bnlpael6CwsLRG1tLXt+ft4XDofbcLlc1qtXrx6E h4dfW19fn2pubn5w9epVryNHjnx8+PBhcGRk5Ofw8HBjPB5/nEajPZ+ampq1srI6/zd08Q2NRpvE 4/HbaDT6+N9m4ImVlZVZKSkpemho6HBISAjm8uXLSmpqauMXLlzAQiCQTX19fbUHDx4s7dmzZ2R0 dBTh4uKyBYVC90VERBTcu3fPOTMzUzUqKmq4oqLCqqCgQPvDhw+NPj4+XrOzsz+2t7eRUVFRqLGx sVZHR0dVLS2tzTt37pj9+fMHOT4+vmJhYQHV0NDYu7m5+UBaWvpkb2/vDQ6H8+XLly+EoaEhu337 9kmFhYUdmpycvMZkMqFYLJavqal57q+JqsTT01PKw8Nj1d7eftrAwMB6aGiIGh4ebsTn80E4HI5w 69at7F27drFKS0ud1dXVx/Pz8x1Onz5NXVhYGHJzc1MUiUQAm81el5KS+hkSEtKbm5tb6uXltZma mipdUVGh3tDQcO7o0aM3W1paqM7OzsS7d+8WmJqaOo+Pjy9ZW1vjMRgMYXt7G4LD4bYpFApkfn6+ TygUgl69eqWYnJysKycnJ6yrq5vw8vISQiCQ/pGRETiFQpF0dnaG5eXl6WdmZi4DAMAEAKB9bm4u zdnZmfnz50/V7u7uThqNBiOTyXdjY2MfWFtbt8HhcI3W1lYLLpdLl5GRseVyuV1fv35tLi0tpe7Y sYMFhUJBUVFRuzgcjlAgEIjV1NR4AACwAQBo//Hjhx4Oh7N7/fr1/Z6eHvW4uLiq0dHRYwcPHnQU CAQACoVSF4vFjKmpqWahUEgzMDC4kpubm04kEpHr6+tVbW1thmg02mllZWXh3bt3Or9//64yNjZ+ 39LSclJCQgJka2v7z+TkZKe6urrT6OjogrGxMQIMBqvY29sfra2tPVxaWvrY29vbxMrK6hAEAuEt LS0VFRYW4q9du3a7rKwsJTo6+hqFQvnvxo0bE319fVrPnj3TXl9flwB9+fLlBIlE0h0cHJwoKSlR v3HjxoikpKTazZs3W3ft2qVVXl6+ER0d7VxSUjJ+//59yeXlZbiWlpZVUVFRW3x8vAMaje5rbW1V F4lEv7BY7KK+vr4Mn8+fWV9fD8Tj8SZ9fX1P1dXV3QwMDLCjo6MMKpX6saWlhRQZGemEQqFE1tbW ZbOzswcnJyd//yXo6FFRUerd3d18Pz8/fRkZGQGPx0Oy2eyxc+fOIcvLy2G9vb1zAAAAurq6tklJ SRXJyckua2trSwQCYVJFRSX406dPTVQqdSs0NHQPGo1WXl5eJquoqBgCADAyOzsrdnFxafzx44cu kUh8SafT96alpTVTqVRvEonUA4PBZM6cOeO7srLSq6qqmh4UFPTo8OHDsP3796tXVVW99vPzyz1+ /HhyXFwcGovFasjLy1ssLS09c3JyAjgcDoFEIjXfvXtXAAaDPd+9e7fg4+NjpaioOPv79++pjo4O /Pnz52OOHDnyuaCgQLGtra1/ZmaGQyKRUCYmJuTW1lY5Eom0qaen51lSUlIeGhoqaG9vd/D19dWS lJQM2N7efru4uPhJU1PzSn9//1M4HC6i0WhgAwMDZSwWa1xTU3Pbz8/PZ319vVtWVlZTQUFBgcvl WjU1Nb3YtWvXLjAYrFddXX0nIyODPjQ05AeFQi3YbPbQ9PT0iL6+vhWdTq968+aNUENDg+bu7p4/ NjZWzuVyt7y8vKRnZ2dXEhISZg0NDU3i4uKUwWAwWkJCAjYwMPCitLQUf+TIkWUwGAwgkciV2tpa BxaLJZaTkxtjsVgwaWlp1cDAwB5FRcXoGzduzP/7779fp6endzg6OjpDIBBtAAAALS2tW76+vlAT ExOkmpoa6/HjxyNNTU0mk5OTjn/xvkNvb288k8lEGxsbew4ODo7u3LnThsfj0ZeWlqYBAABYLFZu QEBA0vDw8FRISAjp3bt341JSUu4VFRWjgYGBQikpKTuxWKzl4uJS0dDQ4I5CoYQikUgaAABEYWFh Tlxc3OkXL158srKyUhgaGlq0s7NTzMjIGIqIiMDu3btX/uLFiwMeHh6zjY2N+hMTExIlJSUGf1HX /3p7ezPk5eUtg4KCOH19fTvS09Pvczgc1vHjx10xGAymra2tc3h4mBsSEjKPwWDskEikaHh4ePHX r18CKysrgoeHhxWDwdj518XYKSUlJVRXV5/o6uoCtre3KZubm3AcDscXi8Via2tricXFRY+LFy9W Z2VlZa6vrxfp6OigxWIxaGFhQUckEr1tb29XKCoqAp08eVKIx+NHAAAQc7lcH2dn55mpqSlCa2vr 8I4dO+wg9+/f/6+rq0soKyvbd+DAAS0mkzn/8+dP4cLCwvr79+/NAwICZBQVFb81NTWhYmJi8mZm Zii+vr4r/v7+GF1dXayFhcXWxsaGcHp6WuLJkydqPj4+0tevX4fp6+ujNjY2WpOTk6lXrlyxAYFA Hebm5lATExP7+/fvV9ra2pqnpKTMuLq6MmNjY7sxGIyLjY0N3N3dXa6oqGjd09MTnZOTQzE3N197 9OjRhpGREcLQ0HA+MjISlJ6eHlJZWUlrbm6ufvXq1f/y8/PDtbW1XQgEwj8jIyNZbW1tAi8vL4P2 9vZ6PT09+9LS0pb29vYfQqGQDADAUlpamn1paemPiooK56amJtD8/LwCEoncGhoaIt27d29fQUFB qkgkMk1JSRmNi4sb1NbWlg4ICMhmMBhjDQ0NY0ZGRjiBQAD68OEDwtbWFpOamsotKSkxys3NNY2O jq4IDQ19fvr06Zrbt2/fUlJSMsFgMI4yMjJLP3/+bKuvrydHRUXJhIaGziYnJ5srKyvLaWpqyqio qHidP38eAQAAyM3Nbbm+vp5EIBA6cDicqKGhgdfZ2dlCJpM5JiYmnkKhsEZNTS26ubm5Ew6HgzEY zNqvX796TE1N7WEw2JacnJyTg4NDjby8PK6oqKiyqqpKNykpSbGlpeXu0tISzMfHB1VTUzNrbGws vHv37kMejzdvampqLykpGUShUG5FREQo0un0Z7W1tbIPHz6EOjg4DAUHB8vIyckhFhcX0dLS0nMq KirhXV1dqe3t7ZMhISFIdXV1HYFAwHv8+LFtX1/fq0ePHhXBYLCy2tpafT8/P7qpqambr6/vvXPn zoGxWKwkj8ejKykpha6srLzY2toa3rNnDx0Gg63icDiGj49PloGBQd3Dhw/lXVxcvi4uLiIIBAJ4 dHR0mEgkqkRGRhZ3dXX179271x4Gg0HhcDg2ICBgW05OTre9vV0CjUbPmZiYKPX398s3NTUNAwDA x+FwUgoKClM7d+78mJSUpL2xsbEoFosFSCRyc2NjY9bV1XWPSCQSX79+vXvHjh04Pz8/TG1t7baZ mRn/yJEjR2ZnZ998/fpVUU5Ojh0fH5+2e/ducxAI9PPvAjhHoVBU9fX1Y4yMjJ7V1dWV6+vrg799 +2bi6ura297e3sjj8Qzj4+NDOBxO/+Li4rKEhASRzWYvenp6Yi9dukSenJz84+7u3o3BYEbQaLTB 6dOnn378+PGQvb19u5KSksDQ0FDvxIkTrZ8+faK0trb+8+zZs5JTp07l/f2C9cXFxalra2v/mJmZ +bqysmIcGBioaW1tPXvp0iVeYmKioKGhAVJVVQXKy8uT1dPTc+VyuVwAADiQzMzMChKJZOzg4NBD oVCgwcHBbo8fPx7Q0tISgEAgI1tbW/ybN29GHR0dFQUCwebhw4fp1tbWEnfv3lXlcDgP/Pz8sHQ6 XWJ2dpbj7e1NWV5elrOwsBg6f/58H4/HE9y7dy//1KlTClFRUcu3bt1q3N7eZvr7++/Izc0dRCAQ ZFdXV2kqlSohEokkbWxs2FAoVK2lpWUpIiKCHRgY6DgwMMAhEokweXl5kYaGhm1lZeWKj4/PSy8v r3APDw83bW3tZ4aGhn4AAIAAAAAGBwdHh4aGOGfOnBEtLy+TDh06pOPu7r5PS0vro6ysrKpIJJJ8 9OgR5+LFixlkMrn3+PHjv/v7+12ampo8mpub63fv3m1Lp9PBNBpNwtzcHNnT09O6c+dObX19/RwI BII8c+bMDyqVunDu3LliR0dHSygUqrpr1y7U5uYmWUFB4bhYLIY4OjqGT09PzxkYGAiSk5MbORzO q+3tbVRTU5OKrKwsJzc3lx0ZGTl25swZeQQCwUMgEMvNzc3r29vb5K6urgV7e/uh06dPy3t7ewek pKQIIyIiGFgsVmljY2O8oKCgvbCwUPJ///ufs7GxsZtQKPw+Pz8Pc3BwOITBYIg/fvy4SSQSnd++ fSuhqKjIefPmjToWi72hq6tLOH369KebN2/eNTQ0tH3w4EF9Q0PDpLa2tsG+ffv4S0tLNcXFxV1Y LBbM5/P7t7e3Nebm5uQlJCTE0dHRLywtLZNu3bqFdnZ29iYQCJYgEIg3Ojr6yczMDIdEIndwuVwE DofDamlpMXx9fT0kJSW5eDxePywsbAeBQFCm0WhceXn5ZSgUil5YWJDasWPHhenp6f8EAoGITCbT y8rKFrFY7G8LCwsJsVgM/ffff5c9PT2HIyMjfScmJr7Jyclhb9++jXJ0dBQmJSUdunz5skBGRqYC AoFQhoeHu8bGxtC1tbW6DAbDsKGhgejj48NUU1ND0mg0aT8/PxEWix2JiIhYYDKZqKmpqZHdu3db lJWVPXBwcLATi8VbGAzGDQCAteLi4mU2m80Ri8UYDQ2NKTMzM6itra2FWCweuXr1akR7e3tLc3Nz PRqNxuXm5gpsbW2hUCjUTkJCQhKBQEgBAPBmbm5OsqGhwfTZs2c2ExMTZEdHxygqlUqdm5trunTp 0nJ8fLwXmUxGmpqa4iAQiD2FQuHRaDRxXV2dgpOT09ahQ4fe8Pl8pePHjy8IBAJebGws9cqVK49T U1MjAwICtPh8/pSDg0PKkSNHbnh4eGwNDg7SVFVVtVRVVVtlZWVhOTk5DD6fv3bgwIGFly9fXvnx 48fQ0NCQalFR0Qk0Gj1mYWExKxQK1w0NDcWgxMTE89euXXMBAEBUWlpaTaFQJL29vRdVVVWVFxYW SBYWFnrb29tkoVCImZycHFFVVTV+9+7dSy0tLYy0tLRAIBAI6+rqLFxcXDrV1NR8QCCQeHZ2dgiH wxF1dXWV0tLSmLdv3w58//59raGhIW1lZWUZiUTqGBsbewMAAHR0dNSYmZnhpaSkIoRC4RQEAtG6 efPmUR0dHSNXV1dTCoXS9/bt214ymazc0NCgxOfziZGRkUNnz55NmZ2d/Tg0NDQUEBDw/xNzEhIS jsTHx9vp6+uHvnr1KjE4OLjI0tLydX9/fxiPx5sAgUCzIBBIXUZG5mp7ezuut7cXHB0dfQoMBuP/ Sj7/IBAI3adPn97lcrkQFAq1raSkxDxz5swiHA53np6e7hoYGDBXUlKKBAAADAAA8ObNmytEInHY 2tr6xd8TrjU/P39ULBav2trasqhUqqq1tbWKo6OjyMTEpBOHw1HGx8dJg4ODF6hUapulpeUEm82G hIWFzYHB4BUikTiioqKiWVxcvDMoKKh3e3tb28XFhdzV1SXV1NQkg0AgeNbW1pyDBw9uysrKGq6s rCy0tLSs7d271wYMBksMDQ3Rr1+/vvbu3bv0np4eHykpKbOZmZmZ7e3tzbS0NGJ/f/9kdHS0/61b t5pv3ryJsre3d7h9+zZTLBb//PLly6vh4eFCBoMBSk1NFUOh0CoHBwd9DAbzKTIy0m59fd2Fx+Ph AAAATExMDHt7e29ZWVkdnZ2dHQEAADh//nw1GAwGodFop3v37gU4OTl9ysnJEeLx+C0dHR3vhYWF W/Ly8rubm5sH3N3dLc6ePbseGho6oaOjY9TT09NtYGDAx2KxMmw2e2NpaQluaWm548ePH3BDQ0M2 CoUy+fbt21V1dXX30tLSOjKZ7F1fX69NIBBo+fn5zFOnTrF7enrc0Gj0N2Vl5VUOh6Px8OHDzYcP H6KXlpaa//nnH2koFMoLDAz0mJmZWYXD4eWfPn1CXbx4sePjx49n0tPT5zo6OgIPHjz4u7S01F9a WtqRTqe3Hz169O3m5ibA5/PRL1++VN3c3IR2d3dva2pqonk8Xg+Xy6Xi8fh1Q0PDKwKBYHF0dLTe yMjoQGNjY5OxsbE6kUi0DgwMPL6wsIAeHx8/dffu3QUMBsMPDAx0olKpC3A4XGRiYlI+Ozubb2pq WoLBYOb8/PxgX758Afbt2yc1MzOjfPjwYXUSibQrKirqYUZGhsz29jbLx8eHbWJiwq+trT3758+f U9LS0lgCgZA+OTmZrKGhcQoEAgEPHz585Ofnp04gEMIMDAzSCgsL9Y8ePSp2c3Mbl5SU5EM+fvy4 7+fPn3lGRkaM4eHhgLm5OeXQ0FAsiUTyMTY2lj537px4bGxsoLGxcXFgYIA9NzdHEQqF2JGREYml pSXJtrY2ZTc3N6yXl1fsz58/JwUCwZaMjIysWCyek5OTU15bW2tXUlJi6OrqblVWVm5oaGgw9u3b J1NQUPD9+fPnr69cuZLHZrO/0en0HhgMJrO1tbXs4ODgoaGhIREfH9/v7e1tNDAwQOZyudtBQUET kZGRhiQSSaG+vr63pqaG5efnJ2hubh40MjKyFQgEC319fR93796tAYFAjHR1dc17enpK/vvvvwQA AIB37949v3Hjxgc3Nze5b9++Sbu5ua3q6emp8vn8nywWa6u3t/cjiUTyaW1tvV9VVbXZ19eHNTc3 by0rK7M8dOgQamxsbOD06dMYS0tLMwkJCa3/Wzq3bt0adnJyMpaXlzdZX1+/KRaL5aqrq39mZ2fv olKpm729vZRr167N8fl8eRUVlZ9VVVXxQUFBG3A4nDM/P/+7qamJsrW1xYPD4ZJPnjz5b2trqz4l JcVCTU2N6ePjM0Ymk3UdHR1Zm5ubUlZWVkMHDhww4/P5M/Ly8uZUKnXMz89vIy0tTRcEAnEwGIzs 6urqxMzMjIqmpmZ3dHS0gkgkGoiOjn4aERHBnp2dNayvrydevXp1BAwGK4vFYoDNZv/68eOHioGB wUBRUdFsV1cX5/379+jy8nIFBAJBFAgEGyKRSHt1dZWmra29IisrqykhIfFHSkrKSigUzl66dOlX WFjYnrKysq8kEmmAzWYj8/PzA2AwGLGysvLXzZs3iXV1dYOJiYnOSUlJtMXFxe87duzwnJqaKgSB QGsIBEI2NzcXdeLECeuampoXTk5O58LCwtjOzs76LBYLJC0tza+tre1aW1vbrK2tRd67d4/233// 2VVWVoq9vb2fycrKKpqYmEDs7e1HOjs7qS0tLepBQUG1qamp6tbW1oC5uTlDV1eXbGJiIuvq6mpJ IBD+Nzc314HFYncTCARhR0dHq4eHBy4iIkIJgUDoQyAQIQwGmz1z5kwDhUJZkJGR2aipqdn95csX CQkJCSAhIaHjn3/+waytrS2ZmZlh8vPzcf7+/v5QKBTBZDJfnjhxotfDw8MyJCQESaVSn3h7e/tQ qdTWysrKvLKysnv+/v6aaDSap6Cg4M3hcOa+ffvWV1xcfA4CgeAjIyMlgoODBXv37nVaW1tTu3// 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 L6RfvHhB2rt3ryAyMjLg6dOnzjo6OrX19fUrTU1N7NLS0lO2trYnvb29n7S2tl6jUCjNAwMDZfn5 +XwfH5+O0NBQ9/z8fGRUVJRgampK3d/ff2llZaVrcHBQtby8HDk9PS3l5eU1eOnSJRk+nz8uIyOT CIfD0aGhoYekpaX7AABotbW1VVJUVITp6uq64nA4YP/+/VPr6+urCARC6Obm1nr16lUEkUiUb2lp MamqqvKrrq72OXPmjEZgYCAKh8Op7Nq1K66np+ePUChcNzAwABsbG4tzc3PJ7969m4+OjrbB4/Fl x48fz52bm8vH4XAN8fHx/gMDA2/V1dWNZWVltxkaGnrp6emp2drahuFwuFEpKSlET09Pi5ycHNfS 0lKdTCaL09LSank8npmLi0tJbm6upo2Njayuri4eDofTFhcXqS4uLhQOhyNhsVjQuLi4k1QqtWpj Y6OdSqWOlJeXF9y6detgRkZGZWJioguJRBp59OiRYnR0NKazsxNJpVKXOzo6ahEIhACJRA7fvn3b FwQCPdLX11fS19dfefLkyRqJRBqPioqyX19fX8nLy4M8evRI2NPTY3b69Onfi4uLK2g0micWi9Wt ra23MpnMGRQKNX/jxo0sV1dXyerqakVzc7PWlStXGnR1dSMuX76sUlJSAg8NDe1VVFRci4mJcdLT 0zPR09ObePz4sTQMBpMKCgryb2trq6PT6bbh4eHI0tLSucDAwMClpSUOHo/HKSoqNigpKXF+/vyJ NTIyKi0qKuKpqakxyWQyOCsry+Pp06fDwcHBqqA/f/5k0el06tOnT403bdrUn5KSkiwSiZY2NjZ6 USiUg7+/f761tTUFiUTK2dra0goKCkzOnj0729vbywwKCronEAgag4ODK758+XLjn70X3tLScio/ P995x44dHH19/Q8kEsnl8ePHY3w+fyMyMtISh8N5Q6FQ2ODgYB0AACA9PT1XFArlsLi4mA0Gg41C QkJKAADQHh0dRfv7+w/fvHnT9MmTJ33m5uZSxsbGBAAAAC8vL5knT560fP36VcPMzEzO09NToKWl daK8vDzH3d1d6siRI5SoqCihq6urk4qKSjGdTn8kIyNzsrOzc5OOjo7z8vLy2O3btzt0dXXlo6Oj LVtbW8MCAwPTnz592p+Xlzf+8OFDMovFOgmFQpm3b9+mEIlE8PPnz/WkpaWp+vr6DKFQCHn48KFq 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 zPbt2/coKyvbnzlz5ktISIgsISFhs4KCwlRSUlL5wMDAptraWp0rV644oNHoeXl5eY2VlZXvpqam 1hwOZ2X79u1kNBpNSEhIaLOysurG4XAkExOT1cjISERWVha9pqbGKzAwULBlyxZFKyurPVAodFlF RUXf1NRUa3l5Wezk5HRxamqqpKioaN7KysocjUZbtLa2vjY3N7/w48eP3k+fPoFAIFCvj4+PdH5+ HlNXVzfT3d2N9fT01Dx//vy++fl5dRcXF/D27dtnORzOZ3V1devu7u74uro6vJeXF/7ChQsBPB6P amlpaYpGo8V4PJ7t5eX1T25u7qy7uzteIpHMcjgc2tzcnCA8PNwhMzOzcWFhYT02NlaByWR+ZbFY S0+ePLH18vKiWFlZKXZ1dbX5+Pis2NvbK66vr8NaWlpQPT09QqlUipicnOTPzMwgIRCInK6ubiuY QCBQXF1dUXfv3u0eHR2V3bhxA3Bxcem8f//+y5s3b3Z4eHi4JCQkBDGZzOKIiIjm+Pj44bCwsBqR SARqa2t7CgAAoKqqKpTJZPMEAkGgoKAwHxsbm7K2tpZHoVAEN27cUFtZWcnKzMx0q6mpMY2Jifl7 69atLaqqqjsfPXq08f37934ulztuY2NT293dbbq4uPi7tbU1hEAgQOPi4qxhMJiZsbGx/cOHDw0M DAwEf/780QaDwTIymWybl5e318HBgT4+Pv7X1NQ078mTJz/Onz9P+/nz55ynpyd7enrazNnZmd/c 3IyYnp5GAwAAXLt2jRgcHDx84cKFsdbW1oMkEkmIRqPlnZ2dlbS0tGhKSkrEqqqqGldXVxUOhwML DAw0+/Lli2FaWtqsUChkv337lsnj8Y4NDw9XJyUliYlEIjU7O1tOTU3NkEQi6VpZWZHy8/MbyWSy bHZ2VhIbG4ujUCgmampqZjQaDXfw4EEHHo/XraysfAmHw2Xo6OhUCgSCMDKZPHXhwoW26OhoTSUl JVJ6ejqMwWC0CYXCjzo6OnVsNnvh4MGDp+vq6r6AwWCguLj4OZVKvW1lZfWPQCDgfv36Vchms+Gx sbFaPB6PQSKRlmUyGainp0dPJpNxNjY2QMrKyiHW1tamXV1drtPT0/Xl5eWdNBqt1dvb+/bNmzdn v337hnZxcUHW1NTU6+npzQEAANjb23/q6uqKKioqypubm9OIjY01SU5OLvr58+fCmTNngvLy8oZR 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 " />
+ </pattern>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4587"
+ id="linearGradient4409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(7.2600571e-6,-4)"
+ x1="-93.925926"
+ y1="250.78546"
+ x2="-93.925926"
+ y2="236.95479" />
+ <linearGradient
+ id="linearGradient4587">
+ <stop
+ id="stop4589"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.2"
+ offset="0.36738181"
+ id="stop4591" />
+ <stop
+ id="stop4593"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3736"
+ id="radialGradient4411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.7232143,0,0,0.4738388,330.2295,54.412704)"
+ cx="-130.70314"
+ cy="54.000004"
+ fx="-130.70314"
+ fy="54.000004"
+ r="112" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3736">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3738" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3740" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3725"
+ id="radialGradient4413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(4.078596,-0.738361,0.09259268,0.5114682,-472.0284,191.70725)"
+ cx="148"
+ cy="177.0788"
+ fx="148"
+ fy="177.0788"
+ r="108" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3725">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3727" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3729" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter6068"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.94"
+ id="feGaussianBlur6070" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4601"
+ id="linearGradient4415"
+ gradientUnits="userSpaceOnUse"
+ x1="-72.5"
+ y1="153"
+ x2="-58.5"
+ y2="240" />
+ <linearGradient
+ id="linearGradient4601">
+ <stop
+ style="stop-color:#ce5c00;stop-opacity:1"
+ offset="0"
+ id="stop4603" />
+ <stop
+ style="stop-color:#502300;stop-opacity:1"
+ offset="1"
+ id="stop4605" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3666"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.995"
+ id="feGaussianBlur3668" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3759"
+ id="linearGradient4417"
+ gradientUnits="userSpaceOnUse"
+ x1="116"
+ y1="234"
+ x2="116"
+ y2="176.96492" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3759">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3761" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3763" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3771"
+ x="-0.16311838"
+ width="1.3262368"
+ y="-0.45396429"
+ height="1.9079286"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="13.240625"
+ id="feGaussianBlur3773" />
+ </filter>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath3694">
+ <path
+ style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="M 65.28125,60 C 63.667126,60 62.453307,60.54563 60,63 L 42,81 c -2.14944,2.15037 -2.92888,4.372857 -3,8 l -3,153 c 0,3.324 2.676,6 6,6 l 212,0 c 3.324,0 6,-2.676 6,-6 L 258,90 c 0,-3.324 -2.676,-6 -6,-6 l -101,0 c -2.26854,0 -3.85056,-0.84963 -6,-3 L 127,63 c -2.80378,-2.805 -4.03169,-3 -6,-3 -19.57287,0 -36.146033,0 -55.71875,0 z"
+ id="path3696"
+ sodipodi:nodetypes="cccsccccccccccc"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4573"
+ id="linearGradient4403"
+ gradientUnits="userSpaceOnUse"
+ x1="85"
+ y1="60"
+ x2="86"
+ y2="130" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="radialGradient4405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1882494,0.00892859,-0.00275729,0.3669515,-2.7184136,37.513228)"
+ cx="36"
+ cy="27.702126"
+ fx="36"
+ fy="27.702126"
+ r="112" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3815">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3817" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3819" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3698"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.035"
+ id="feGaussianBlur3700" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter6060"
+ x="-0.10583568"
+ width="1.2116714"
+ y="-0.13783251"
+ height="1.275665"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="9.8779965"
+ id="feGaussianBlur6062" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter6080"
+ x="-0.13155462"
+ width="1.2631092"
+ y="-1.8429236"
+ height="4.6858473"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="2.3036545"
+ id="feGaussianBlur6082" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter6094"
+ x="-0.043561131"
+ width="1.0871223"
+ y="-0.61023957"
+ height="2.2204792"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.76279949"
+ id="feGaussianBlur6096" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4573"
+ id="linearGradient4553"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.463546,0,0,0.4513833,332.87493,177.2169)"
+ x1="32.390526"
+ y1="19.460125"
+ x2="34.008488"
+ y2="32.654655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561"
+ id="linearGradient4555"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(30,-0.03396343)"
+ x1="316.00003"
+ y1="194.28383"
+ x2="314.62503"
+ y2="178.09633" />
+ <linearGradient
+ id="linearGradient4561">
+ <stop
+ id="stop4563"
+ offset="0"
+ style="stop-color:#a04700;stop-opacity:1;" />
+ <stop
+ id="stop4565"
+ offset="1"
+ style="stop-color:#f57900;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3422"
+ id="radialGradient4557"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.657371,-0.7120403,0.2236891,0.8348191,-562.74688,254.36346)"
+ cx="314.24353"
+ cy="189.91002"
+ fx="314.24353"
+ fy="189.91002"
+ r="9" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3422">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3424" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3426" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3457"
+ id="radialGradient4559"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0315572,0,0,0.5073276,-288.72043,90.93469)"
+ cx="308.70206"
+ cy="180.10979"
+ fx="308.70206"
+ fy="180.10979"
+ r="9" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3457">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3459" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3461" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4579"
+ id="linearGradient4549"
+ gradientUnits="userSpaceOnUse"
+ x1="309.41669"
+ y1="181.35483"
+ x2="309.41669"
+ y2="185.87077" />
+ <linearGradient
+ id="linearGradient4579">
+ <stop
+ style="stop-color:#fdc065;stop-opacity:1"
+ offset="0"
+ id="stop4581" />
+ <stop
+ id="stop4583"
+ offset="0.5"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ style="stop-color:#ce5c00;stop-opacity:1"
+ offset="1"
+ id="stop4585" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561"
+ id="linearGradient4551"
+ gradientUnits="userSpaceOnUse"
+ x1="309.93472"
+ y1="189.04424"
+ x2="307.54169"
+ y2="176.85674" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4573"
+ id="linearGradient4541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.463546,0,0,0.4513833,331.87493,217.2169)"
+ x1="32.120865"
+ y1="18.075493"
+ x2="33.469166"
+ y2="29.331537" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561"
+ id="linearGradient4543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(29,39.966037)"
+ x1="315.75003"
+ y1="193.40883"
+ x2="314.62503"
+ y2="178.09633" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3521"
+ id="radialGradient4545"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9351285,-0.3451479,0.09239383,0.7857146,-622.84454,156.09092)"
+ cx="310.9476"
+ cy="229.1644"
+ fx="310.9476"
+ fy="229.1644"
+ r="7" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3521">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3523" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3525" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3457"
+ id="radialGradient4547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0315572,0,0,0.451772,-290.72043,140.94079)"
+ cx="308.70206"
+ cy="180.10979"
+ fx="308.70206"
+ fy="180.10979"
+ r="9" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4579"
+ id="linearGradient4537"
+ gradientUnits="userSpaceOnUse"
+ x1="309.41669"
+ y1="181.35483"
+ x2="309.41669"
+ y2="185.87077" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561"
+ id="linearGradient4539"
+ gradientUnits="userSpaceOnUse"
+ x1="309.93472"
+ y1="189.04424"
+ x2="307.54169"
+ y2="176.85674" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4573"
+ id="linearGradient4525"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(296,50)"
+ x1="37.25"
+ y1="16.987871"
+ x2="39.25"
+ y2="30.861963" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561"
+ id="linearGradient4527"
+ gradientUnits="userSpaceOnUse"
+ x1="323.13388"
+ y1="83.197594"
+ x2="318.375"
+ y2="50.75" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7393"
+ id="radialGradient4529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.8110991,-0.6803459,0.1038044,0.5814819,-70.061489,26.791251)"
+ cx="24"
+ cy="25"
+ fx="24"
+ fy="25"
+ r="20" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7393">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop7395" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop7397" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7410"
+ id="linearGradient4531"
+ gradientUnits="userSpaceOnUse"
+ x1="318.625"
+ y1="87.75"
+ x2="318.625"
+ y2="79.999748" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7410">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop7412" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop7414" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter7434"
+ x="-0.052306268"
+ width="1.1046125"
+ y="-0.23355357"
+ height="1.4671072"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.78459405"
+ id="feGaussianBlur7436" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7440"
+ id="linearGradient4533"
+ gradientUnits="userSpaceOnUse"
+ x1="18.54916"
+ y1="39.69405"
+ x2="18.54916"
+ y2="32.404938" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7440">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop7442" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop7444" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7497"
+ id="radialGradient4535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.576092,0,0,0.5376453,-488.98255,30.429507)"
+ cx="310.25"
+ cy="55"
+ fx="310.25"
+ fy="55"
+ r="20" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7497">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop7499" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop7501" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3478"
+ x="-0.065303303"
+ width="1.1306067"
+ y="-0.73882252"
+ height="2.4776449"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.54419417"
+ id="feGaussianBlur3480" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter7474"
+ x="-0.091054901"
+ width="1.1821098"
+ y="-1.2755708"
+ height="3.5511415"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.5944635"
+ id="feGaussianBlur7476" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4579"
+ id="linearGradient4521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(296,50)"
+ x1="13.523417"
+ y1="7.0550132"
+ x2="13.523417"
+ y2="16.191435" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561"
+ id="linearGradient4523"
+ gradientUnits="userSpaceOnUse"
+ x1="305.5"
+ y1="69.875"
+ x2="303.625"
+ y2="51.5" />
+ <filter
+ inkscape:collect="always"
+ id="filter5595"
+ x="-0.064314604"
+ width="1.1286292"
+ y="-0.89437503"
+ height="2.7887499"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.7453125"
+ id="feGaussianBlur5597" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4579"
+ id="linearGradient4505"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(296,50)"
+ x1="13.523417"
+ y1="7.0550132"
+ x2="13.523417"
+ y2="16.191435" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561"
+ id="linearGradient4507"
+ gradientUnits="userSpaceOnUse"
+ x1="305.5"
+ y1="69.875"
+ x2="303.625"
+ y2="51.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4573"
+ id="linearGradient4509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9933522,0,0,0.9937906,296.29582,50.058988)"
+ x1="37.25"
+ y1="16.987871"
+ x2="39.25"
+ y2="30.861963" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561"
+ id="linearGradient4511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9933522,0,0,0.9937906,2.2635728,0.3694585)"
+ x1="323.13388"
+ y1="83.197594"
+ x2="318.375"
+ y2="50.75" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7393"
+ id="radialGradient4513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.8110991,-0.6803459,0.1038044,0.5814819,-70.061489,26.791251)"
+ cx="24"
+ cy="25"
+ fx="24"
+ fy="25"
+ r="20" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7410"
+ id="linearGradient4515"
+ gradientUnits="userSpaceOnUse"
+ x1="318.625"
+ y1="87.75"
+ x2="318.625"
+ y2="79.999748" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7440"
+ id="linearGradient4517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9651477,0,0,0.9543049,296.93503,51.210923)"
+ x1="18.54916"
+ y1="39.69405"
+ x2="18.54916"
+ y2="32.404938" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7497"
+ id="radialGradient4519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.5084213,0,0,0.53107,-467.7316,30.965419)"
+ cx="310.25"
+ cy="55"
+ fx="310.25"
+ fy="55"
+ r="20" />
+ <radialGradient
+ r="5"
+ fy="51"
+ fx="239"
+ cy="51"
+ cx="239"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4143-9"
+ xlink:href="#linearGradient5820-1-2-5-2"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5820-1-2-5-2">
+ <stop
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
+ offset="0"
+ id="stop5822-0-2-6-5" />
+ <stop
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
+ offset="1"
+ id="stop5824-8-1-9-7" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5820-1-2-5-2"
+ id="radialGradient7892-7-4"
+ gradientUnits="userSpaceOnUse"
+ cx="239"
+ cy="51"
+ fx="239"
+ fy="51"
+ r="5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15762-5-9"
+ id="radialGradient7894-2-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.30883,0.778447,-0.343019,0.576472,-3.48119,-69.9836)"
+ cx="179.52461"
+ cy="178.16356"
+ fx="179.52461"
+ fy="178.16356"
+ r="68.868492" />
+ <linearGradient
+ id="linearGradient15762-5-9"
+ inkscape:collect="always">
+ <stop
+ id="stop15764-4-4"
+ offset="0"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
+ <stop
+ id="stop15766-7-5"
+ offset="1"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" />
+ </linearGradient>
+ <filter
+ color-interpolation-filters="sRGB"
+ height="1.2122222"
+ y="-0.10611111"
+ width="1.2028052"
+ x="-0.10140261"
+ id="filter15758-4-9"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur15760-4-3"
+ stdDeviation="4.6353635"
+ inkscape:collect="always" />
+ </filter>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5820-1-2-5-2"
+ id="radialGradient12066-6-5"
+ gradientUnits="userSpaceOnUse"
+ cx="239"
+ cy="51"
+ fx="239"
+ fy="51"
+ r="5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5820-1-2-5-2"
+ id="radialGradient12068-3-7"
+ gradientUnits="userSpaceOnUse"
+ cx="239"
+ cy="51"
+ fx="239"
+ fy="51"
+ r="5" />
+ <linearGradient
+ id="linearGradient4573-2">
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0"
+ id="stop4575-1" />
+ <stop
+ style="stop-color:#f57900;stop-opacity:1"
+ offset="1"
+ id="stop4577-0" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4561-8">
+ <stop
+ id="stop4563-5"
+ offset="0"
+ style="stop-color:#a04700;stop-opacity:1;" />
+ <stop
+ id="stop4565-5"
+ offset="1"
+ style="stop-color:#f57900;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3422-7">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3424-38" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3426-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3457-0">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3459-7" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3461-7" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4579-6">
+ <stop
+ style="stop-color:#fdc065;stop-opacity:1"
+ offset="0"
+ id="stop4581-9" />
+ <stop
+ id="stop4583-1"
+ offset="0.5"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ style="stop-color:#ce5c00;stop-opacity:1"
+ offset="1"
+ id="stop4585-1" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3478-0"
+ x="-0.065303303"
+ width="1.1306067"
+ y="-0.73882252"
+ height="2.4776449"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.54419417"
+ id="feGaussianBlur3480-8" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4579-6"
+ id="linearGradient5155"
+ gradientUnits="userSpaceOnUse"
+ x1="309.41669"
+ y1="181.35483"
+ x2="309.41669"
+ y2="185.87077" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561-8"
+ id="linearGradient5157"
+ gradientUnits="userSpaceOnUse"
+ x1="309.93472"
+ y1="189.04424"
+ x2="307.54169"
+ y2="176.85674" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4573-2"
+ id="linearGradient5159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.463546,0,0,0.4513833,332.87493,177.2169)"
+ x1="32.390526"
+ y1="19.460125"
+ x2="34.008488"
+ y2="32.654655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4561-8"
+ id="linearGradient5161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(30,-0.03396343)"
+ x1="316.00003"
+ y1="194.28383"
+ x2="314.62503"
+ y2="178.09633" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3422-7"
+ id="radialGradient5163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.657371,-0.7120403,0.2236891,0.8348191,-562.74688,254.36346)"
+ cx="314.24353"
+ cy="189.91002"
+ fx="314.24353"
+ fy="189.91002"
+ r="9" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3457-0"
+ id="radialGradient5165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0315572,0,0,0.5073276,-288.72043,90.93469)"
+ cx="308.70206"
+ cy="180.10979"
+ fx="308.70206"
+ fy="180.10979"
+ r="9" />
+ </defs>
+ <g
+ inkscape:groupmode="layer"
+ id="layer17"
+ inkscape:label="artwork:sparkleshare"
+ style="display:inline"
+ transform="translate(0,300)"
+ sodipodi:insensitive="true">
+ <g
+ inkscape:groupmode="layer"
+ id="layer18"
+ inkscape:label="baseplate"
+ style="display:none"
+ sodipodi:insensitive="true">
+ <rect
+ height="24"
+ id="rect3589"
+ inkscape:label="24x24"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ width="120"
+ x="331"
+ y="16"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/process-syncing-sparkleshare-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-200"
+ x="321"
+ width="48"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="48x48"
+ id="rect4698"
+ height="48"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-124"
+ x="328"
+ width="32"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="32x32"
+ id="rect4700"
+ height="32"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/rect4700.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-74"
+ x="327"
+ width="24"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="24x24"
+ id="rect4706"
+ height="24"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/folder-sparkleshare-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-73"
+ x="328"
+ width="22"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="22x22"
+ id="rect4702"
+ height="22"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/rect4702.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-31"
+ x="328"
+ width="16"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="16x16"
+ id="rect4704"
+ height="16"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/rect4704.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ y="-222"
+ x="45"
+ width="256"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:label="256x256"
+ id="rect4708"
+ height="256"
+ inkscape:export-filename="/home/hbons/github/SparkleShare/data/icons/sparkleshare-mist.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ y="-228.48639"
+ xml:space="preserve"
+ x="45.970734"
+ style="font-size:18.30070686px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;display:inline;enable-background:new;font-family:Bitstream Vera Sans"
+ inkscape:label="context"
+ id="text4710"><tspan
+ y="-228.48639"
+ x="45.970734"
+ sodipodi:role="line"
+ id="tspan4712">places</tspan></text>
+ <text
+ y="-228.48639"
+ xml:space="preserve"
+ x="166.9707"
+ style="font-size:18.30070686px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;display:inline;enable-background:new;font-family:Droid Sans;-inkscape-font-specification:Droid Sans Bold"
+ sodipodi:linespacing="125%"
+ inkscape:label="icon-name"
+ id="text4714"><tspan
+ y="-228.48639"
+ x="166.9707"
+ sodipodi:role="line"
+ id="tspan4716">sparkleshare</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="anim"
+ style="display:inline">
+ <g
+ style="display:inline;enable-background:new"
+ id="g5128"
+ transform="translate(0,30)">
+ <rect
+ transform="matrix(1.0213388,0,0,1.2853553,22.299541,-245.9016)"
+ ry="0.88388348"
+ rx="0.88388348"
+ y="194.35162"
+ x="304"
+ height="1.767767"
+ width="20"
+ id="rect4455-9"
+ style="opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter3478-0);enable-background:new" />
+ <g
+ transform="translate(28.999941,-190.00038)"
+ id="g4489-8"
+ style="display:inline;enable-background:new">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:url(#linearGradient5155);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5157);stroke-width:0.99999905;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 306.50003,179.53383 -2,2 -0.003,10.85416 c 0,0.50784 0.41128,0.91666 0.92215,0.91666 l 16.13768,0 c 0.51087,0 0.92215,-0.40882 0.92215,-0.91666 l -0.21871,-9.93749 c 0,-0.50783 -0.41128,-0.91667 -0.92215,-0.91667 l -7.8383,0 -2,-2 -5,0 z"
+ id="path4491-8"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ d="m 306.90625,180.5 -1.4375,1.4375 0,10.40625 16.03125,0 -0.21875,-9.84375 -7.78125,0 a 0.96884687,0.96884687 0 0 1 -0.6875,-0.28125 l -1.71875,-1.71875 -4.1875,0 z"
+ id="path4493-0"
+ style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:0.99999905;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:original="M 306.5 179.53125 L 304.5 181.53125 L 304.5 192.375 C 304.49999 192.88284 304.89538 193.3125 305.40625 193.3125 L 321.5625 193.3125 C 322.07337 193.31249 322.46875 192.88284 322.46875 192.375 L 322.25 182.4375 C 322.25001 181.92967 321.85462 181.53125 321.34375 181.53125 L 313.5 181.53125 L 311.5 179.53125 L 306.5 179.53125 z "
+ inkscape:radius="-0.96875"
+ sodipodi:type="inkscape:offset" />
+ </g>
+ <g
+ transform="translate(-1.000059,-190.00038)"
+ id="g4495-3"
+ style="display:inline;enable-background:new">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:url(#linearGradient5159);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5161);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 343.50003,181.49999 -2,2 -6,0 c -0.51361,0 -1,0.49987 -1,1 l 0,10 c 0,0.50014 0.48639,1.00001 1,1.00001 l 17,0 c 0.51361,0 1,-0.49987 1,-1.00001 l 0,-12 c 0,-0.50013 -0.48639,-1 -1,-1 l -9,0 z"
+ id="path4497-7"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1"
+ inkscape:original="M 313.5 181.53125 L 311.5 183.53125 L 305.5 183.53125 C 304.98639 183.53125 304.5 184.03112 304.5 184.53125 L 304.5 194.53125 C 304.5 195.03138 304.98639 195.53125 305.5 195.53125 L 322.5 195.53125 C 323.01361 195.53125 323.5 195.03138 323.5 194.53125 L 323.5 182.53125 C 323.5 182.03112 323.01361 181.53125 322.5 181.53125 L 313.5 181.53125 z "
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient5163);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="path4499-0"
+ d="M 313.9375,182.53125 312.21875,184.25 A 1.0001,1.0001 0 0 1 311.5,184.53125 l -6,0 0,10 17,0 0,-12 -8.5625,0 z"
+ transform="translate(30,0)" />
+ <path
+ inkscape:connector-curvature="0"
+ style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999946;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 343.65625,182 -1.84375,1.84375 c -0.0798,0.0908 -0.19196,0.14686 -0.3125,0.15625 l -6,0 c -0.10626,0 -0.26313,0.0434 -0.375,0.15625 -0.11187,0.11289 -0.15625,0.27537 -0.15625,0.375 l 0,1 c 0,-0.0996 0.0444,-0.26211 0.15625,-0.375 C 335.23687,185.04336 335.39374,185 335.5,185 l 6,0 c 0.12054,-0.009 0.23266,-0.0654 0.3125,-0.15625 L 343.65625,183 352.5,183 c 0.10626,0 0.26313,0.0434 0.375,0.15625 0.11187,0.11289 0.15625,0.27537 0.15625,0.375 l 0,-1 c 0,-0.0996 -0.0444,-0.26211 -0.15625,-0.375 C 352.76313,182.04336 352.60626,182 352.5,182 l -8.84375,0 z"
+ id="path4501-6" />
+ <path
+ inkscape:connector-curvature="0"
+ style="opacity:0.3;fill:url(#radialGradient5165);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 343.6875,182 -1.84375,1.84375 c -0.0898,0.095 -0.21315,0.15109 -0.34375,0.15625 l -6,0 c -0.0946,0 -0.23761,0.0491 -0.34375,0.15625 C 335.05011,184.26336 335,184.41202 335,184.5 l 0,3.5 18,0 0,-5.5 c 0,-0.088 -0.0501,-0.23664 -0.15625,-0.34375 C 352.7376,182.04914 352.59459,182 352.5,182 l -8.8125,0 z"
+ id="path4503-9" />
+ </g>
+ </g>
+ <g
+ id="g3385"
+ style="display:inline;enable-background:new"
+ transform="translate(-1567.6885,-800.09618)">
+ <path
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 1910.9687,825.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ id="path3387"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ id="path3389"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <use
+ style="display:inline;enable-background:new"
+ x="0"
+ y="0"
+ xlink:href="#g5128"
+ id="use5227"
+ transform="translate(24,0)"
+ width="500"
+ height="400" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g5139"
+ transform="translate(-4.6208518e-5,-1.00001)">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3425"
+ d="m 368.25206,26.980758 c -0.16799,-0.02255 -0.34544,0.06673 -0.42812,0.214939 l -1.24741,1.890927 c -0.0282,0.03198 -0.051,0.06677 -0.0687,0.105557 -0.0318,-0.02828 -0.0671,-0.05091 -0.1053,-0.06911 l -2.11209,-0.565934 c -0.11804,-0.03163 -0.24976,-9.75e-4 -0.34847,0.07146 -0.20245,0.132734 -0.24637,0.452731 -0.0885,0.635596 l 1.38816,1.731845 -0.0127,0.194385 -1.19865,1.862717 c -0.17601,0.293703 0.16393,0.727363 0.49081,0.62599 l 2.06788,-0.805674 0.2212,0.05927 1.3882,1.731729 c 0.12392,0.138701 0.34383,0.179198 0.50931,0.09558 0.14114,-0.07427 0.23406,-0.232524 0.22886,-0.392024 l -0.10689,-2.212537 c -0.0585,-0.02883 0.0571,-0.116559 0.0862,-0.174705 l 2.06792,-0.8058 c 0.22871,-0.07928 0.35,-0.378542 0.24113,-0.594694 -0.0487,-0.111916 -0.14894,-0.200646 -0.26595,-0.236089 l -2.15054,-0.576235 c -0.0439,0.0014 -0.0835,-0.0013 -0.12575,0.0072 -0.002,-0.04393 0.002,-0.0839 -0.007,-0.125744 l -0.0966,-2.251039 c 1.4e-4,-0.07781 -0.0222,-0.15655 -0.064,-0.223251 -0.06,-0.100464 -0.16209,-0.173981 -0.27618,-0.197955 l 0.0135,0.0037 -5.8e-4,-1.45e-4 z"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3427"
+ d="m 368.25206,25.980758 c -0.16799,-0.02255 -0.34544,0.06673 -0.42812,0.214939 l -1.24741,1.890927 c -0.0282,0.03198 -0.051,0.06677 -0.0687,0.105557 -0.0318,-0.02828 -0.0671,-0.05091 -0.1053,-0.06911 l -2.11209,-0.565934 c -0.11804,-0.03163 -0.24976,-9.75e-4 -0.34847,0.07146 -0.20245,0.132734 -0.24637,0.452731 -0.0885,0.635596 l 1.38816,1.731845 -0.0127,0.194385 -1.19865,1.862717 c -0.17601,0.293703 0.16393,0.727363 0.49081,0.62599 l 2.06788,-0.805674 0.2212,0.05927 1.3882,1.731729 c 0.12392,0.138701 0.34383,0.179198 0.50931,0.09558 0.14114,-0.07427 0.23406,-0.232524 0.22886,-0.392024 l -0.10689,-2.212537 c -0.0585,-0.02883 0.0571,-0.116559 0.0862,-0.174705 l 2.06792,-0.8058 c 0.22871,-0.07928 0.35,-0.378542 0.24113,-0.594694 -0.0487,-0.111916 -0.14894,-0.200646 -0.26595,-0.236089 l -2.15054,-0.576235 c -0.0439,0.0014 -0.0835,-0.0013 -0.12575,0.0072 -0.002,-0.04393 0.002,-0.0839 -0.007,-0.125744 l -0.0966,-2.251039 c 1.4e-4,-0.07781 -0.0222,-0.15655 -0.064,-0.223251 -0.06,-0.100464 -0.16209,-0.173981 -0.27618,-0.197955 l 0.0135,0.0037 -5.8e-4,-1.45e-4 z"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </g>
+ <use
+ style="display:inline;enable-background:new"
+ x="0"
+ y="0"
+ xlink:href="#g5128"
+ id="use5227-1"
+ transform="translate(48,0)"
+ width="500"
+ height="400" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g5143"
+ transform="translate(-4.6208518e-5,-1.00001)">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 393.23868,27.305591 c -0.15643,-0.06526 -0.35094,-0.02495 -0.46916,0.09681 l -1.69431,1.503642 c -0.0355,0.02359 -0.0666,0.0513 -0.0937,0.08418 -0.0234,-0.03555 -0.0516,-0.06654 -0.0838,-0.09401 l -1.89364,-1.0933 c -0.10584,-0.0611 -0.241,-0.06558 -0.3551,-0.02116 -0.2299,0.07581 -0.35515,0.373539 -0.24999,0.591033 l 0.89263,2.032116 -0.0626,0.184474 -1.63991,1.489013 c -0.24603,0.238141 -0.0299,0.745007 0.31207,0.731691 l 2.20594,-0.243015 0.19832,0.114502 0.8927,2.032014 c 0.0838,0.166048 0.28573,0.262082 0.46721,0.224142 0.15556,-0.03521 0.28627,-0.164021 0.32253,-0.319432 l 0.4694,-2.164812 c -0.049,-0.04299 0.0853,-0.09781 0.12848,-0.146442 l 2.20601,-0.243126 c 0.24144,-0.01738 0.43605,-0.275057 0.38683,-0.512021 -0.0181,-0.120707 -0.0919,-0.232358 -0.19578,-0.296878 l -1.92812,-1.113201 c -0.0428,-0.01001 -0.0803,-0.02287 -0.12333,-0.02559 0.009,-0.04295 0.0236,-0.08052 0.0258,-0.123272 l 0.48931,-2.199338 c 0.0203,-0.07512 0.0191,-0.156962 -0.004,-0.232209 -0.032,-0.112569 -0.11154,-0.210004 -0.21554,-0.26269 l 0.0121,0.0071 -5.3e-4,-2.9e-4 z"
+ id="path3463"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 393.23868,26.305591 c -0.15643,-0.06526 -0.35094,-0.02495 -0.46916,0.09681 l -1.69431,1.503642 c -0.0355,0.02359 -0.0666,0.0513 -0.0937,0.08418 -0.0234,-0.03555 -0.0516,-0.06654 -0.0838,-0.09401 l -1.89364,-1.0933 c -0.10584,-0.0611 -0.241,-0.06558 -0.3551,-0.02116 -0.2299,0.07581 -0.35515,0.373539 -0.24999,0.591033 l 0.89263,2.032116 -0.0626,0.184474 -1.63991,1.489013 c -0.24603,0.238141 -0.0299,0.745007 0.31207,0.731691 l 2.20594,-0.243015 0.19832,0.114502 0.8927,2.032014 c 0.0838,0.166048 0.28573,0.262082 0.46721,0.224142 0.15556,-0.03521 0.28627,-0.164021 0.32253,-0.319432 l 0.4694,-2.164812 c -0.049,-0.04299 0.0853,-0.09781 0.12848,-0.146442 l 2.20601,-0.243126 c 0.24144,-0.01738 0.43605,-0.275057 0.38683,-0.512021 -0.0181,-0.120707 -0.0919,-0.232358 -0.19578,-0.296878 l -1.92812,-1.113201 c -0.0428,-0.01001 -0.0803,-0.02287 -0.12333,-0.02559 0.009,-0.04295 0.0236,-0.08052 0.0258,-0.123272 l 0.48931,-2.199338 c 0.0203,-0.07512 0.0191,-0.156962 -0.004,-0.232209 -0.032,-0.112569 -0.11154,-0.210004 -0.21554,-0.26269 l 0.0121,0.0071 -5.3e-4,-2.9e-4 z"
+ id="path3465"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ </g>
+ <use
+ style="display:inline;enable-background:new"
+ x="0"
+ y="0"
+ xlink:href="#g5128"
+ id="use5227-9"
+ transform="translate(72,0)"
+ width="500"
+ height="400" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g5147"
+ transform="translate(-4.6208518e-5,-1.00001)">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3499"
+ d="m 418.15853,27.927989 c -0.13421,-0.103523 -0.33252,-0.11493 -0.47823,-0.02792 l -2.02575,1.013887 c -0.0404,0.0136 -0.0776,0.03231 -0.11229,0.05706 -0.0134,-0.0404 -0.0326,-0.07763 -0.0566,-0.112496 l -1.54615,-1.546157 c -0.0864,-0.08641 -0.21582,-0.12572 -0.33753,-0.112345 -0.24168,0.01372 -0.43972,0.268891 -0.39444,0.506192 l 0.33627,2.193903 -0.10822,0.161986 -1.96941,1.013836 c -0.29929,0.166349 -0.22171,0.711883 0.11206,0.787529 l 2.19367,0.336205 0.16193,0.161929 0.33635,2.193823 c 0.038,0.182079 0.20817,0.327104 0.39328,0.337427 0.15937,0.0063 0.31897,-0.08434 0.39422,-0.225071 l 1.0137,-1.969558 c -0.0362,-0.05421 0.10771,-0.0724 0.162,-0.108199 l 2.19377,0.336116 c 0.23771,0.0457 0.49238,-0.152827 0.50617,-0.394456 0.0138,-0.121278 -0.0286,-0.248226 -0.11227,-0.337433 l -1.57431,-1.574304 c -0.0388,-0.02075 -0.0716,-0.04287 -0.1125,-0.05664 0.0198,-0.03916 0.0436,-0.07167 0.0568,-0.112394 l 1.04186,-1.997755 c 0.039,-0.06731 0.0591,-0.14667 0.0562,-0.225332 -0.002,-0.117015 -0.0534,-0.231717 -0.14021,-0.309525 l 0.01,0.01 -4.3e-4,-4.17e-4 z"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path3501"
+ d="m 418.15853,26.927989 c -0.13421,-0.103523 -0.33252,-0.11493 -0.47823,-0.02792 l -2.02575,1.013887 c -0.0404,0.0136 -0.0776,0.03231 -0.11229,0.05706 -0.0134,-0.0404 -0.0326,-0.07763 -0.0566,-0.112496 l -1.54615,-1.546157 c -0.0864,-0.08641 -0.21582,-0.12572 -0.33753,-0.112345 -0.24168,0.01372 -0.43972,0.268891 -0.39444,0.506192 l 0.33627,2.193903 -0.10822,0.161986 -1.96941,1.013836 c -0.29929,0.166349 -0.22171,0.711883 0.11206,0.787529 l 2.19367,0.336205 0.16193,0.161929 0.33635,2.193823 c 0.038,0.182079 0.20817,0.327104 0.39328,0.337427 0.15937,0.0063 0.31897,-0.08434 0.39422,-0.225071 l 1.0137,-1.969558 c -0.0362,-0.05421 0.10771,-0.0724 0.162,-0.108199 l 2.19377,0.336116 c 0.23771,0.0457 0.49238,-0.152827 0.50617,-0.394456 0.0138,-0.121278 -0.0286,-0.248226 -0.11227,-0.337433 l -1.57431,-1.574304 c -0.0388,-0.02075 -0.0716,-0.04287 -0.1125,-0.05664 0.0198,-0.03916 0.0436,-0.07167 0.0568,-0.112394 l 1.04186,-1.997755 c 0.039,-0.06731 0.0591,-0.14667 0.0562,-0.225332 -0.002,-0.117015 -0.0534,-0.231717 -0.14021,-0.309525 l 0.01,0.01 -4.3e-4,-4.17e-4 z"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ </g>
+ <use
+ style="display:inline;enable-background:new"
+ x="0"
+ y="0"
+ xlink:href="#g5128"
+ id="use5227-0"
+ transform="translate(96,0)"
+ width="500"
+ height="400" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g5151"
+ transform="translate(-4.6208518e-5,-1.00001)">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 442.8614,28.823817 c -0.10285,-0.134731 -0.29145,-0.197076 -0.45471,-0.150743 l -2.21914,0.455037 c -0.0425,0.0027 -0.0833,0.01112 -0.12323,0.02605 -0.002,-0.04249 -0.0114,-0.08342 -0.0256,-0.123312 l -1.09329,-1.893646 c -0.0611,-0.105828 -0.17592,-0.177295 -0.29695,-0.195877 -0.23699,-0.0493 -0.49433,0.145921 -0.51201,0.386856 l -0.24301,2.20618 -0.14646,0.128457 -2.1647,0.46957 c -0.33215,0.08322 -0.39841,0.630243 -0.0956,0.789698 l 2.03191,0.892513 0.1145,0.198322 -0.24292,2.206124 c -0.0104,0.18571 0.11642,0.369836 0.29255,0.427717 0.15231,0.04733 0.32993,0.0011 0.43904,-0.11537 l 1.48892,-1.640082 c -0.0209,-0.06173 0.12278,-0.04206 0.18448,-0.06258 l 2.03203,0.892452 c 0.21778,0.105667 0.51516,-0.02018 0.59101,-0.250009 0.0447,-0.113574 0.0366,-0.24717 -0.0211,-0.354993 l -1.1132,-1.928122 c -0.0321,-0.03008 -0.0581,-0.05994 -0.094,-0.08383 0.0293,-0.0327 0.0607,-0.05794 0.084,-0.09386 l 1.52342,-1.66003 c 0.0551,-0.05492 0.0951,-0.126376 0.11261,-0.203109 0.0283,-0.113545 0.008,-0.237642 -0.0553,-0.335267 l 0.007,0.01225 -3.1e-4,-5.15e-4 z"
+ id="path3535"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 442.8614,27.823817 c -0.10285,-0.134731 -0.29145,-0.197076 -0.45471,-0.150743 l -2.21914,0.455037 c -0.0425,0.0027 -0.0833,0.01112 -0.12323,0.02605 -0.002,-0.04249 -0.0114,-0.08342 -0.0256,-0.123312 l -1.09329,-1.893646 c -0.0611,-0.105828 -0.17592,-0.177295 -0.29695,-0.195877 -0.23699,-0.0493 -0.49433,0.145921 -0.51201,0.386856 l -0.24301,2.20618 -0.14646,0.128457 -2.1647,0.46957 c -0.33215,0.08322 -0.39841,0.630243 -0.0956,0.789698 l 2.03191,0.892513 0.1145,0.198322 -0.24292,2.206124 c -0.0104,0.18571 0.11642,0.369836 0.29255,0.427717 0.15231,0.04733 0.32993,0.0011 0.43904,-0.11537 l 1.48892,-1.640082 c -0.0209,-0.06173 0.12278,-0.04206 0.18448,-0.06258 l 2.03203,0.892452 c 0.21778,0.105667 0.51516,-0.02018 0.59101,-0.250009 0.0447,-0.113574 0.0366,-0.24717 -0.0211,-0.354993 l -1.1132,-1.928122 c -0.0321,-0.03008 -0.0581,-0.05994 -0.094,-0.08383 0.0293,-0.0327 0.0607,-0.05794 0.084,-0.09386 l 1.52342,-1.66003 c 0.0551,-0.05492 0.0951,-0.126376 0.11261,-0.203109 0.0283,-0.113545 0.008,-0.237642 -0.0553,-0.335267 l 0.007,0.01225 -3.1e-4,-5.15e-4 z"
+ id="path3537"
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="small sizes">
+ <g
+ style="display:inline;enable-background:new"
+ id="g4419"
+ transform="translate(24.99994,-250.00038)">
+ <rect
+ transform="matrix(1,0,0,0.875,0,19.265625)"
+ ry="1"
+ rx="1"
+ y="152.125"
+ x="305.0625"
+ height="2"
+ width="27.8125"
+ id="rect4421"
+ style="opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999982;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5595);enable-background:new" />
+ <g
+ transform="matrix(0.6669716,0,0,0.5372994,105.73605,99.677101)"
+ id="g4423"
+ style="display:inline;enable-background:new">
+ <path
+ style="fill:url(#linearGradient4505);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4507);stroke-width:1.67046797;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 303.5,55.5 -4,4 0,24 c 0,1.108 0.892,2.000001 2,2 l 35,0 c 1.108,0 2,-0.891999 2,-2 l 0,-22 c 0,-1.108 -0.892,-2 -2,-2 l -17,0 -4,-4 -12,0 z"
+ id="path4425"
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(0.9725274,0,0,0.9690594,8.7637723,2.6144844)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1"
+ inkscape:original="M 303.5 55.5 L 299.5 59.5 L 299.5 83.5 C 299.5 84.608 300.392 85.500001 301.5 85.5 L 336.5 85.5 C 337.608 85.5 338.5 84.608001 338.5 83.5 L 338.5 61.5 C 338.5 60.392 337.608 59.5 336.5 59.5 L 319.5 59.5 L 315.5 55.5 L 303.5 55.5 z "
+ style="opacity:0.2;fill:none;stroke:#ffffff;stroke-width:1.72072732;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="path4427"
+ d="m 303.9375,56.5 -3.4375,3.4375 0,23.5625 c 0,0.571297 0.4287,1.000001 1,1 l 35,0 c 0.5713,0 1,-0.428701 1,-1 l 0,-22 c 0,-0.571297 -0.4287,-1 -1,-1 l -17,0 a 1.0001,1.0001 0 0 1 -0.71875,-0.28125 L 315.0625,56.5 l -11.125,0 z" />
+ <path
+ style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 303.95755,56.435758 -3.69896,3.498601 0,0.932961 3.69896,-3.498602 11.34349,0 3.82226,3.615222 c 0.10161,0.08449 0.23501,0.126543 0.3699,0.11662 l 16.76863,0 c 0.82386,0 1.47958,0.620204 1.47958,1.39944 l 0,-0.93296 c 0,-0.779237 -0.65572,-1.399441 -1.47958,-1.399441 l -16.76863,0 c -0.13489,0.0099 -0.26829,-0.03214 -0.3699,-0.11662 l -3.82226,-3.615221 -11.34349,0 z"
+ id="path4429"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="matrix(0.6641736,0,0,0.7134979,106.39898,89.065782)"
+ id="g4431"
+ style="display:inline;enable-background:new">
+ <path
+ style="fill:url(#linearGradient4509);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4511);stroke-width:1.45265615;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 319.6396,59.499999 -3.97341,4.194155 -12.91358,0 -0.99335,0 c -1.10063,0 -1.9867,0.886461 -1.9867,1.987581 l 0,22.638192 c 0,1.10112 0.88607,1.98758 1.9867,1.987581 l 36.75403,0 c 1.10064,0 1.98671,-0.88646 1.98671,-1.987581 l 0,-26.832347 c 0,-1.10112 -0.88607,-1.987581 -1.98671,-1.987581 l -0.99335,0 -17.88034,0 z"
+ id="path4433"
+ sodipodi:nodetypes="ccccccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.99436891"
+ inkscape:original="M 23.5 9.5 L 19.5 13.5 L 6.5 13.5 L 5.5 13.5 C 4.392 13.5 3.5 14.392 3.5 15.5 L 3.5 38.5 C 3.5 39.608 4.392 40.499999 5.5 40.5 L 42.5 40.5 C 43.608 40.5 44.5 39.608001 44.5 38.5 L 44.5 11.5 C 44.5 10.392 43.608 9.5 42.5 9.5 L 41.5 9.5 L 23.5 9.5 z "
+ style="opacity:0.5;fill:none;stroke:url(#radialGradient4513);stroke-width:1.5039947;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path4435"
+ d="m 23.875,10.5 -3.6875,3.6875 A 0.99446835,0.99446835 0 0 1 19.5,14.5 l -13,0 -1,0 c -0.5743195,0 -1,0.425681 -1,1 l 0,23 c 0,0.574319 0.4256795,0.999999 1,1 l 37,0 c 0.57432,0 1,-0.425679 1,-1 l 0,-27 c 0,-0.574319 -0.425681,-1 -1,-1 l -1,0 -17.625,0 z"
+ transform="matrix(0.9651479,0,0,0.9665833,296.93502,50.725922)" />
+ <path
+ style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 319.69571,60.174274 -3.74278,4.143994 c -0.0865,0.103789 -0.20721,0.164527 -0.33472,0.168454 l -12.65851,0 -0.97373,0 c -0.82484,0 -1.4606,0.703911 -1.4606,1.617168 l 0,1.078113 c 0,-0.913258 0.63576,-1.617168 1.4606,-1.617168 l 0.97373,0 12.65851,0 c 0.12751,-0.0039 0.2482,-0.06467 0.33472,-0.168456 l 3.74278,-4.143994 17.34459,0 0.97373,0 c 0.82484,0 1.4606,0.703911 1.4606,1.617169 l 0,-1.078112 c 0,-0.913258 -0.63576,-1.617168 -1.4606,-1.617168 l -0.97373,0 -17.34459,0 z"
+ id="path4437"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:0.15;fill:url(#linearGradient4515);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7434);enable-background:new"
+ id="rect4439"
+ width="36"
+ height="8.0625"
+ x="302"
+ y="80"
+ rx="0.8025012"
+ ry="0.8025012"
+ transform="matrix(1.0555556,0,0,1,-17.777778,-1.4015458)" />
+ <path
+ style="opacity:0.2;fill:none;stroke:url(#linearGradient4517);stroke-width:1.45265615;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 301.2782,80.317223 0,7.634439 c 0,0.548075 0.41083,0.954304 0.96515,0.954305 l 35.71046,0 c 0.5543,0 0.96515,-0.406228 0.96515,-0.954305 l 0,-11.451659"
+ id="path4441"
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccccccccccc"
+ style="opacity:0.2;fill:url(#radialGradient4519);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 319.69571,60.174274 -3.74278,4.147128 c -0.0874,0.09384 -0.20755,0.149244 -0.33472,0.154339 l -12.65851,0 -0.97373,0 c -0.81759,0 -1.4606,0.652275 -1.4606,1.481655 l 0,8.292604 38.94926,0 0,-12.594071 c 0,-0.82938 -0.64301,-1.481655 -1.4606,-1.481655 l -0.97373,0 -17.34459,0 z"
+ id="path4443"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4445"
+ transform="translate(24.99994,-250.00038)">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ id="path4447"
+ d="m 303.5,55.5 -4,4 0,24 c 0,1.108 0.892,2.000001 2,2 l 35,0 c 1.108,0 2,-0.891999 2,-2 l 0,-22 c 0,-1.108 -0.892,-2 -2,-2 l -17,0 -4,-4 -12,0 z"
+ style="fill:url(#linearGradient4521);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4523);stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 303.9375,56.5 -3.4375,3.4375 0,23.5625 c 0,0.571297 0.4287,1.000001 1,1 l 35,0 c 0.5713,0 1,-0.428701 1,-1 l 0,-22 c 0,-0.571297 -0.4287,-1 -1,-1 l -17,0 a 1.0001,1.0001 0 0 1 -0.71875,-0.28125 L 315.0625,56.5 l -11.125,0 z"
+ id="path4449"
+ style="opacity:0.2;fill:none;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:original="M 303.5 55.5 L 299.5 59.5 L 299.5 83.5 C 299.5 84.608 300.392 85.500001 301.5 85.5 L 336.5 85.5 C 337.608 85.5 338.5 84.608001 338.5 83.5 L 338.5 61.5 C 338.5 60.392 337.608 59.5 336.5 59.5 L 319.5 59.5 L 315.5 55.5 L 303.5 55.5 z "
+ inkscape:radius="-1"
+ sodipodi:type="inkscape:offset" />
+ <path
+ id="path4451"
+ d="m 303.75,56 -3.75,3.75 0,1 3.75,-3.75 11.5,0 3.875,3.875 c 0.10301,0.09056 0.23825,0.135636 0.375,0.125 l 17,0 c 0.83523,0 1.5,0.66477 1.5,1.5 l 0,-1 c 0,-0.83523 -0.66477,-1.5 -1.5,-1.5 l -17,0 c -0.13675,0.01064 -0.27199,-0.03444 -0.375,-0.125 L 315.25,56 l -11.5,0 z"
+ style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <rect
+ style="opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7474);enable-background:new"
+ id="rect4453"
+ width="42.026428"
+ height="3"
+ x="298.97357"
+ y="88"
+ rx="1.5"
+ ry="1.5"
+ transform="matrix(1.0208202,0,0,0.6666667,18.33774,-219.41705)" />
+ <rect
+ style="opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter3478);enable-background:new"
+ id="rect4455"
+ width="20"
+ height="1.767767"
+ x="304"
+ y="194.35162"
+ rx="0.88388348"
+ ry="0.88388348"
+ transform="matrix(1.0213388,0,0,1.2853553,18.29954,-305.9016)" />
+ <g
+ style="display:inline;enable-background:new"
+ id="g4457"
+ transform="translate(24.99994,-250.00038)">
+ <path
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path4459"
+ d="m 319.5,59.5 -4,4 -13,0 -1,0 c -1.108,0 -2,0.892 -2,2 l 0,23 c 0,1.108 0.892,1.999999 2,2 l 37,0 c 1.108,0 2,-0.891999 2,-2 l 0,-27 c 0,-1.108 -0.892,-2 -2,-2 l -1,0 -18,0 z"
+ style="fill:url(#linearGradient4525);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4527);stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(296,50)"
+ d="m 23.875,10.5 -3.6875,3.6875 A 0.99446835,0.99446835 0 0 1 19.5,14.5 l -13,0 -1,0 c -0.5743195,0 -1,0.425681 -1,1 l 0,23 c 0,0.574319 0.4256795,0.999999 1,1 l 37,0 c 0.57432,0 1,-0.425679 1,-1 l 0,-27 c 0,-0.574319 -0.425681,-1 -1,-1 l -1,0 -17.625,0 z"
+ id="path4461"
+ style="opacity:0.5;fill:none;stroke:url(#radialGradient4529);stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible"
+ inkscape:original="M 23.5 9.5 L 19.5 13.5 L 6.5 13.5 L 5.5 13.5 C 4.392 13.5 3.5 14.392 3.5 15.5 L 3.5 38.5 C 3.5 39.608 4.392 40.499999 5.5 40.5 L 42.5 40.5 C 43.608 40.5 44.5 39.608001 44.5 38.5 L 44.5 11.5 C 44.5 10.392 43.608 9.5 42.5 9.5 L 41.5 9.5 L 23.5 9.5 z "
+ inkscape:radius="-0.99436891"
+ sodipodi:type="inkscape:offset" />
+ <path
+ id="path4463"
+ d="m 319.6875,60 -3.84375,3.84375 C 315.7549,63.940019 315.63095,63.996357 315.5,64 l -13,0 -1,0 c -0.84709,0 -1.5,0.65291 -1.5,1.5 l 0,1 c 0,-0.84709 0.65291,-1.5 1.5,-1.5 l 1,0 13,0 c 0.13095,-0.0036 0.2549,-0.05998 0.34375,-0.15625 L 319.6875,61 337.5,61 l 1,0 c 0.84709,0 1.5,0.65291 1.5,1.5 l 0,-1 c 0,-0.84709 -0.65291,-1.5 -1.5,-1.5 l -1,0 -17.8125,0 z"
+ style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <rect
+ transform="matrix(1.0555556,0,0,1,-17.777778,0)"
+ ry="0.8025012"
+ rx="0.8025012"
+ y="80"
+ x="302"
+ height="8.0625"
+ width="36"
+ id="rect4465"
+ style="opacity:0.1;fill:url(#linearGradient4531);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7434);enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ id="path4467"
+ d="m 4.5,30.5 0,8 c 0,0.574319 0.4256795,0.999999 1,1 l 37,0 c 0.57432,0 1,-0.425679 1,-1 l 0,-12"
+ style="opacity:0.2;fill:none;stroke:url(#linearGradient4533);stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ transform="translate(296,50)"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4469"
+ d="m 319.6875,60 -3.84375,3.84375 C 315.75399,63.938756 315.6306,63.994842 315.5,64 l -13,0 -1,0 c -0.83965,0 -1.5,0.660351 -1.5,1.5 l 0,8.75 40,0 0,-12.75 c 0,-0.839649 -0.66035,-1.5 -1.5,-1.5 l -1,0 -17.8125,0 z"
+ style="opacity:0.2;fill:url(#radialGradient4535);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4471"
+ transform="translate(24.99994,-250.00038)">
+ <g
+ transform="translate(-1,40)"
+ id="g4473"
+ style="display:inline;enable-background:new">
+ <path
+ style="fill:url(#linearGradient4537);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4539);stroke-width:0.99999905;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 306.50003,179.53383 -2,2 -0.003,9.85416 c 0,0.50784 0.41128,0.91666 0.92215,0.91666 l 11.13768,0 c 0.51087,0 0.92215,-0.40882 0.92215,-0.91666 l -0.21871,-8.93749 c 0,-0.50783 -0.41128,-0.91667 -0.92215,-0.91667 l -2.8383,0 -2,-2 -5,0 z"
+ id="path4475"
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ id="path4477"
+ d="m 306.90625,180.5 -1.4375,1.4375 0,8.40625 11.03125,0 -0.21875,-7.84375 -2.78125,0 c -0.25743,0.001 -0.5048,-0.0999 -0.6875,-0.28125 l -1.71875,-1.71875 -4.1875,0 z"
+ style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:0.99999905;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4479"
+ transform="translate(-5.00006,-250.00038)">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ id="path4481"
+ d="m 341.50003,221.49999 -2,2 -5,0 c -0.51361,0 -1,0.49987 -1,1 l 0,8 c 0,0.50014 0.48639,1.00001 1,1.00001 l 13,0 c 0.51361,0 1,-0.49987 1,-1.00001 l 0,-10 c 0,-0.50013 -0.48639,-1 -1,-1 l -6,0 z"
+ style="fill:url(#linearGradient4541);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4543);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(30,0)"
+ d="m 311.9375,222.5 -1.71875,1.71875 A 1.0001,1.0001 0 0 1 309.5,224.5 l -5,0 0,8 13,0 0,-10 -5.5625,0 z"
+ id="path4483"
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient4545);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:original="M 311.5 221.5 L 309.5 223.5 L 304.5 223.5 C 303.98639 223.50001 303.5 223.99987 303.5 224.5 L 303.5 232.5 C 303.5 233.00015 303.98639 233.5 304.5 233.5 L 317.5 233.5 C 318.01361 233.5 318.5 233.00014 318.5 232.5 L 318.5 222.5 C 318.5 221.99988 318.01361 221.5 317.5 221.5 L 311.5 221.5 z "
+ inkscape:radius="-1"
+ sodipodi:type="inkscape:offset" />
+ <path
+ sodipodi:nodetypes="ccccsccccscc"
+ id="path4485"
+ d="m 341.6875,222 -1.84375,1.84375 c -0.0898,0.095 -0.21315,0.15109 -0.34375,0.15625 l -5,0 c -0.0946,0 -0.23761,0.0491 -0.34375,0.15625 C 334.05011,224.26336 334,224.41202 334,224.5 l 0,3.5 14,0 0,-5.5 c 0,-0.088 -0.0501,-0.23664 -0.15625,-0.34375 C 347.7376,222.04914 347.59459,222 347.5,222 l -5.8125,0 z"
+ style="opacity:0.3;fill:url(#radialGradient4547);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4487"
+ d="m 341.6875,222 -1.84375,1.84375 c -0.0898,0.095 -0.21315,0.15109 -0.34375,0.15625 l -5,0 c -0.0946,0 -0.23761,0.0491 -0.34375,0.15625 C 334.05011,224.26336 334,224.41202 334,224.5 l 0,1 c 0,-0.088 0.0501,-0.23664 0.15625,-0.34375 C 334.26239,225.04914 334.4054,225 334.5,225 l 5,0 c 0.1306,-0.005 0.25399,-0.0612 0.34375,-0.15625 L 341.6875,223 347.5,223 c 0.0946,0 0.2376,0.0491 0.34375,0.15625 C 347.9499,223.26336 348,223.41203 348,223.5 l 0,-1 c 0,-0.088 -0.0501,-0.23664 -0.15625,-0.34375 C 347.7376,222.04914 347.59459,222 347.5,222 l -5.8125,0 z"
+ style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4489"
+ transform="translate(24.99994,-250.00038)">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ id="path4491"
+ d="m 306.50003,179.53383 -2,2 -0.003,10.85416 c 0,0.50784 0.41128,0.91666 0.92215,0.91666 l 16.13768,0 c 0.51087,0 0.92215,-0.40882 0.92215,-0.91666 l -0.21871,-9.93749 c 0,-0.50783 -0.41128,-0.91667 -0.92215,-0.91667 l -7.8383,0 -2,-2 -5,0 z"
+ style="fill:url(#linearGradient4549);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4551);stroke-width:0.99999905;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.96875"
+ inkscape:original="M 306.5 179.53125 L 304.5 181.53125 L 304.5 192.375 C 304.49999 192.88284 304.89538 193.3125 305.40625 193.3125 L 321.5625 193.3125 C 322.07337 193.31249 322.46875 192.88284 322.46875 192.375 L 322.25 182.4375 C 322.25001 181.92967 321.85462 181.53125 321.34375 181.53125 L 313.5 181.53125 L 311.5 179.53125 L 306.5 179.53125 z "
+ style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:0.99999905;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ id="path4493"
+ d="m 306.90625,180.5 -1.4375,1.4375 0,10.40625 16.03125,0 -0.21875,-9.84375 -7.78125,0 a 0.96884687,0.96884687 0 0 1 -0.6875,-0.28125 l -1.71875,-1.71875 -4.1875,0 z" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4495"
+ transform="translate(-5.00006,-250.00038)">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ id="path4497"
+ d="m 343.50003,181.49999 -2,2 -6,0 c -0.51361,0 -1,0.49987 -1,1 l 0,10 c 0,0.50014 0.48639,1.00001 1,1.00001 l 17,0 c 0.51361,0 1,-0.49987 1,-1.00001 l 0,-12 c 0,-0.50013 -0.48639,-1 -1,-1 l -9,0 z"
+ style="fill:url(#linearGradient4553);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4555);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="translate(30,0)"
+ d="M 313.9375,182.53125 312.21875,184.25 A 1.0001,1.0001 0 0 1 311.5,184.53125 l -6,0 0,10 17,0 0,-12 -8.5625,0 z"
+ id="path4499"
+ style="opacity:0.4;fill:none;stroke:url(#radialGradient4557);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:original="M 313.5 181.53125 L 311.5 183.53125 L 305.5 183.53125 C 304.98639 183.53125 304.5 184.03112 304.5 184.53125 L 304.5 194.53125 C 304.5 195.03138 304.98639 195.53125 305.5 195.53125 L 322.5 195.53125 C 323.01361 195.53125 323.5 195.03138 323.5 194.53125 L 323.5 182.53125 C 323.5 182.03112 323.01361 181.53125 322.5 181.53125 L 313.5 181.53125 z "
+ inkscape:radius="-1"
+ sodipodi:type="inkscape:offset" />
+ <path
+ id="path4501"
+ d="m 343.65625,182 -1.84375,1.84375 c -0.0798,0.0908 -0.19196,0.14686 -0.3125,0.15625 l -6,0 c -0.10626,0 -0.26313,0.0434 -0.375,0.15625 -0.11187,0.11289 -0.15625,0.27537 -0.15625,0.375 l 0,1 c 0,-0.0996 0.0444,-0.26211 0.15625,-0.375 C 335.23687,185.04336 335.39374,185 335.5,185 l 6,0 c 0.12054,-0.009 0.23266,-0.0654 0.3125,-0.15625 L 343.65625,183 352.5,183 c 0.10626,0 0.26313,0.0434 0.375,0.15625 0.11187,0.11289 0.15625,0.27537 0.15625,0.375 l 0,-1 c 0,-0.0996 -0.0444,-0.26211 -0.15625,-0.375 C 352.76313,182.04336 352.60626,182 352.5,182 l -8.84375,0 z"
+ style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999946;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4503"
+ d="m 343.6875,182 -1.84375,1.84375 c -0.0898,0.095 -0.21315,0.15109 -0.34375,0.15625 l -6,0 c -0.0946,0 -0.23761,0.0491 -0.34375,0.15625 C 335.05011,184.26336 335,184.41202 335,184.5 l 0,3.5 18,0 0,-5.5 c 0,-0.088 -0.0501,-0.23664 -0.15625,-0.34375 C 352.7376,182.04914 352.59459,182 352.5,182 l -8.8125,0 z"
+ style="opacity:0.3;fill:url(#radialGradient4559);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g5833"
+ transform="translate(-1574.6884,-851.09623)">
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path5717-2"
+ d="m 1910.9687,825.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ style="fill:none;stroke:#c66f11;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path5717"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-1571.6885,-890.0962)"
+ style="display:inline;enable-background:new"
+ id="g5833-3">
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path5717-2-7"
+ d="m 1910.9687,825.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ style="fill:none;stroke:#c56b0c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccsccsccccccccsccccsccsccscc"
+ id="path5717-0"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c -0.019,0.0382 -0.032,0.0777 -0.039,0.11973 -0.038,-0.0191 -0.078,-0.0318 -0.1196,-0.0395 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c -0.042,0.0127 -0.081,0.0204 -0.1196,0.0395 -0.013,-0.042 -0.02,-0.0815 -0.039,-0.11973 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 z"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="matrix(2.2593567,0,0,2.2593567,-3972.3217,-2045.7357)"
+ style="stroke:#c36e11;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ id="g5833-3-4-4">
+ <path
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc"
+ id="path5717-0-9-7"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 -0.1586,0.0802 -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 -0.1586,-0.0802 -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 0,0 z"
+ style="fill:none;stroke:#c36e11;stroke-width:0.88520771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="matrix(2.2593567,0,0,2.2593567,-3972.3217,-2046.7357)"
+ style="stroke:#fde2c0;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ id="g5833-3-4">
+ <path
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc"
+ id="path5717-0-9"
+ d="m 1910.9687,824.95775 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 -0.1586,0.0802 -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 -0.1586,-0.0802 -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,1e-5 0,0 z"
+ style="fill:none;stroke:#fde2c0;stroke-width:0.88520771;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc"
+ id="path5717-0-9-4-5"
+ d="m 344.28924,-112.20762 c -0.2567,0.0331 -0.4832,0.23499 -0.5466,0.48632 l -1.0927,3.28267 c 0,0 -0.1467,0.0739 -0.2423,0.12249 l -3.3395,0 c -0.1867,0 -0.3689,0.0973 -0.4859,0.24315 -0.2462,0.27585 -0.1844,0.76528 0.1207,0.97266 l 2.7325,2.00616 0.058,0.2918 -1.032,3.22178 c -0.1435,0.50286 0.5294,1.00823 0.9715,0.72947 l 2.7322,-2.00598 0.3497,0 2.7325,2.00598 c 0.2376,0.15564 0.5781,0.12845 0.7891,-0.0603 0.1789,-0.16536 0.2534,-0.43555 0.1827,-0.66879 l -1.0323,-3.22178 c -0.098,-0.0194 0.038,-0.19453 0.058,-0.29178 l 2.7321,-2.00618 c 0.3061,-0.20736 0.3667,-0.6968 0.1207,-0.97264 -0.1161,-0.14585 -0.2991,-0.23713 -0.4857,-0.24316 l -3.4004,0 c 0,0 -0.153,-0.0774 -0.2422,-0.12249 l -1.0323,-3.28265 c -0.031,-0.11485 -0.095,-0.22216 -0.1826,-0.30405 -0.1283,-0.12447 -0.3079,-0.19259 -0.4857,-0.18286 l 0.021,2e-4 -9e-4,1e-5 4e-4,-3e-5 z"
+ style="fill:none;stroke:#bb660b;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="matrix(1.5272842,0,0,1.5272842,-2574.303,-1372.1525)"
+ style="stroke:#fde8d0;stroke-width:0.98213547;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ id="g5833-3-4-9">
+ <path
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc"
+ id="path5717-0-9-4"
+ d="m 1910.9687,824.30299 c -0.1681,0.0217 -0.3164,0.15386 -0.3579,0.31842 l -0.7155,2.14935 c 0,0 -0.096,0.0484 -0.1586,0.0802 l -2.1866,0 c -0.1222,0 -0.2415,0.0637 -0.3181,0.15921 -0.1612,0.18061 -0.1208,0.50107 0.079,0.63685 l 1.7891,1.31355 0.038,0.19106 -0.6757,2.10948 c -0.094,0.32925 0.3466,0.66015 0.6361,0.47763 l 1.7889,-1.31343 0.229,0 1.7891,1.31343 c 0.1556,0.1019 0.3785,0.0841 0.5167,-0.0395 0.1171,-0.10827 0.1659,-0.28518 0.1196,-0.4379 l -0.6759,-2.10948 c -0.064,-0.0127 0.025,-0.12737 0.038,-0.19105 l 1.7889,-1.31356 c 0.2004,-0.13577 0.2401,-0.45623 0.079,-0.63684 -0.076,-0.0955 -0.1958,-0.15526 -0.318,-0.15921 l -2.2264,0 c 0,0 -0.1002,-0.0507 -0.1586,-0.0802 l -0.6759,-2.14934 c -0.02,-0.0752 -0.062,-0.14546 -0.1196,-0.19908 -0.084,-0.0815 -0.2016,-0.1261 -0.318,-0.11973 l 0.014,1.3e-4 -6e-4,10e-6 0,0 z"
+ style="fill:none;stroke:#fde8d0;stroke-width:0.98213547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="hires"
+ style="display:inline">
+ <g
+ style="display:inline;enable-background:new"
+ id="g4365"
+ transform="translate(23.99982,-251.00038)">
+ <rect
+ transform="matrix(5.1338485,0,0,-2.6666661,-1494.7637,484.66662)"
+ ry="1.5"
+ rx="1.5"
+ y="88"
+ x="298.97357"
+ height="3"
+ width="42.026428"
+ id="rect4367"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6080);enable-background:new" />
+ <rect
+ transform="matrix(5.1338485,0,0,-2.6666661,-1494.7637,484.66662)"
+ ry="1.5"
+ rx="1.5"
+ y="88"
+ x="298.97357"
+ height="3"
+ width="42.026428"
+ id="rect4369"
+ style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6094);enable-background:new" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4371"
+ clip-path="url(#clipPath3694)"
+ transform="matrix(0.9643653,0,0,0.9946809,29.26485,-250.68123)">
+ <path
+ sodipodi:nodetypes="cccsccccccccccc"
+ id="path4373"
+ d="M 65.28125,60 C 63.667126,60 62.453307,60.54563 60,63 L 42,81 c -2.14944,2.15037 -2.92888,4.372857 -3,8 l -3,153 c 0,3.324 2.676,6 6,6 l 212,0 c 3.324,0 6,-2.676 6,-6 L 258,90 c 0,-3.324 -2.676,-6 -6,-6 l -101,0 c -2.26854,0 -3.85056,-0.84963 -6,-3 L 127,63 c -2.80378,-2.805 -4.03169,-3 -6,-3 -19.57287,0 -36.146033,0 -55.71875,0 z"
+ style="fill:url(#linearGradient4403);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccsccccccccccc"
+ id="path4375"
+ d="M 65.28125,60 C 63.667126,60 62.453307,60.54563 60,63 L 42,81 c -2.14944,2.15037 -2.92888,4.372857 -3,8 l -3,153 c 0,3.324 2.676,6 6,6 l 212,0 c 3.324,0 6,-2.676 6,-6 L 258,90 c 0,-3.324 -2.676,-6 -6,-6 l -101,0 c -2.26854,0 -3.85056,-0.84963 -6,-3 L 127,63 c -2.80378,-2.805 -4.03169,-3 -6,-3 -19.57287,0 -36.146033,0 -55.71875,0 z"
+ style="opacity:0.03999999;fill:url(#pattern15742);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.01830792;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.2;fill:url(#radialGradient4405);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 68.21875,60 c -1.556608,0 -2.727866,0.54563 -5.09375,3 L 45.78125,81 c -2.072845,2.15037 -2.837664,4.372857 -2.90625,8 l -0.03125,1 211.21875,0 c 1e-5,-3.324 -2.5757,-6 -5.78125,-6 L 150.875,84 c -2.18771,0 -3.7084,-0.84963 -5.78125,-3 L 127.75,63 c -2.70387,-2.805 -3.88308,-3 -5.78125,-3 -18.87539,0 -34.874751,0 -53.75,0 z"
+ id="path4377"
+ transform="matrix(1.0369515,0,0,1,-5.459584,0)"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 68.21875,61 c -1.556609,0 -2.727865,0.54563 -5.09375,3 L 45.78125,82 c -2.072844,2.15037 -2.837664,4.372857 -2.90625,8 l -2.90625,153 c 0,0.18703 0.01526,0.37994 0.03125,0.5625 L 42.875,92 c 0.06859,-3.627143 0.833406,-5.84963 2.90625,-8 L 63.125,66 c 2.365885,-2.45437 3.537141,-3 5.09375,-3 18.875249,0 34.87461,0 53.75,0 1.89817,0 3.07738,0.195 5.78125,3 l 17.34375,18 c 2.07285,2.15037 3.59355,3 5.78125,3 l 97.40625,0 c 3.20555,0 5.78126,2.676 5.78125,6 l 1.90625,150.40625 C 255.97716,243.27331 256,243.13522 256,243 L 254.0625,91 c 1e-5,-3.324 -2.5757,-6 -5.78125,-6 L 150.875,85 c -2.1877,0 -3.7084,-0.84963 -5.78125,-3 L 127.75,64 c -2.70387,-2.805 -3.88308,-3 -5.78125,-3 -18.87539,0 -34.874751,0 -53.75,0 z"
+ id="path4379"
+ transform="matrix(1.0369515,0,0,1,-5.459584,0)"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccsccccccccccc"
+ id="path4381"
+ d="M 65.28125,60 C 63.667126,60 62.453307,60.54563 60,63 L 42,81 c -2.14944,2.15037 -2.92888,4.372857 -3,8 l -3,153 c 0,3.324 2.676,6 6,6 l 212,0 c 3.324,0 6,-2.676 6,-6 L 258,90 c 0,-3.324 -2.676,-6 -6,-6 l -101,0 c -2.26854,0 -3.85056,-0.84963 -6,-3 L 127,63 c -2.80378,-2.805 -4.03169,-3 -6,-3 -19.57287,0 -36.146033,0 -55.71875,0 z"
+ style="fill:none;stroke:#ce5c00;stroke-width:1.02102733;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter3698);enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(0.9999175,0,0,1,230.00247,0)"
+ sodipodi:nodetypes="csssccccccccs"
+ id="path4383"
+ d="m -78.862262,80 c -1.96831,0 -3.194941,0.195024 -5.9987,3 l -17.992188,18 c -2.14943,2.15036 -3.73016,3 -5.9987,3 L -188,104 c -3.324,0 -6,2.676 -6,6 l 0,136 c 0,3.324 2.676,6 6,6 l 212,0 c 3.324,0 6,-2.676 6,-6 L 30,86 c 0,-3.324 -2.676,-6 -6,-6 l -102.862262,0 z"
+ style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6060);enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4385"
+ clip-path="url(#clipPath4720)"
+ transform="matrix(0.9642857,0,0,1,251.07125,-251.00038)">
+ <path
+ sodipodi:nodetypes="csssccccccccs"
+ id="path4387"
+ d="m -83.01041,80 c -1.96831,0 -3.19431,0.19561 -5.9987,3 l -17.99219,18 c -2.14991,2.14991 -3.73016,3 -5.9987,3 l -75,0 c -3.324,0 -6,2.676 -6,6 l 0,132 c 0,3.324 2.676,6 6,6 l 212,0 c 3.324,0 6,-2.676 6,-6 L 30,86 c 0,-3.324 -2.676,-6 -6,-6 l -107.01041,0 z"
+ style="fill:url(#linearGradient4407);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="csssccccccccs"
+ id="path4389"
+ d="m -83.01041,80 c -1.96831,0 -3.19431,0.19561 -5.9987,3 l -17.99219,18 c -2.14991,2.14991 -3.73016,3 -5.9987,3 l -75,0 c -3.324,0 -6,2.676 -6,6 l 0,132 c 0,3.324 2.676,6 6,6 l 212,0 c 3.324,0 6,-2.676 6,-6 L 30,86 c 0,-3.324 -2.676,-6 -6,-6 l -107.01041,0 z"
+ style="opacity:0.03999999;fill:url(#pattern15742);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.01835001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.3;fill:url(#linearGradient4409);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m -194.00001,228 0,14 c 0,3.324 2.67137,6 5.99537,6 l 212.009277,0 c 3.324005,0 5.995371,-2.676 5.995371,-6 l 0,-14 -224.000018,0 z"
+ id="path4391"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.1;fill:url(#radialGradient4411);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 146.34375,80 c -1.53478,0.07578 -2.72755,0.546159 -5.09375,3 l -17.34375,18 c -2.07313,2.14991 -3.62498,3 -5.8125,3 l -72.3125,0 C 42.575966,104 40,106.676 40,110 l 0,47 216,0 0,-71 c 0,-3.324 -2.57596,-6 -5.78125,-6 l -103.1875,0 c -0.23725,0 -0.46825,-0.01083 -0.6875,0 z"
+ transform="matrix(1.0370371,0,0,1,-235.48149,0)"
+ id="path4393"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m -83.717592,81 c -1.591624,0.07578 -2.82857,0.546159 -5.282408,3 l -17.98611,18 c -2.14991,2.14991 -3.75924,3 -6.02778,3 l -74.99075,0 c -3.32399,0 -5.99537,2.676 -5.99537,6 l 0,2 c 0,-3.324 2.67138,-6 5.99537,-6 l 74.99075,0 c 2.26854,0 3.87787,-0.85009 6.02778,-3 L -89,86 c 2.804387,-2.80439 4.027064,-3 5.995371,-3 l 107.009266,0 c 3.323994,0 5.995371,2.676 5.995371,6 l 0,-2 c 0,-3.324 -2.671366,-6 -5.995371,-6 l -107.009266,0 c -0.246037,0 -0.485593,-0.01083 -0.712963,0 z"
+ id="path4395"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#radialGradient4413);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6068);enable-background:new"
+ d="M 248.3125,80 C 251.45843,80 254,82.676 254,86 l 0,156 c 0,3.324 -2.54157,6 -5.6875,6 l 1.90625,0 C 253.42404,248 256,245.324 256,242 l 0,-156 c 0,-3.324 -2.57596,-6 -5.78125,-6 l -1.90625,0 z M 45.78125,104 C 42.575966,104 40,106.676 40,110 l 0,132 c 0,3.324 2.575964,6 5.78125,6 l 1.90625,0 C 44.541572,248 41.999999,245.324 42,242 l 0,-132 c 0,-3.324 2.541572,-6 5.6875,-6 l -1.90625,0 z"
+ id="path4397"
+ sodipodi:nodetypes="cccccccccccccccccc"
+ transform="matrix(1.0370371,0,0,1,-235.48149,0)"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="csssccccccccs"
+ id="path4399"
+ d="m -83.01041,80 c -1.96831,0 -3.19431,0.19561 -5.9987,3 l -17.99219,18 c -2.14991,2.14991 -3.73016,3 -5.9987,3 l -75,0 c -3.324,0 -6,2.676 -6,6 l 0,132 c 0,3.324 2.676,6 6,6 l 212,0 c 3.324,0 6,-2.676 6,-6 L 30,86 c 0,-3.324 -2.676,-6 -6,-6 l -107.01041,0 z"
+ style="fill:none;stroke:url(#linearGradient4415);stroke-width:1.01835012;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter3666);enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.1;fill:url(#linearGradient4417);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter3771);enable-background:new"
+ d="m 50.59375,171 0,70 194.8125,0 0,-70 -194.8125,0 z"
+ id="path4401"
+ transform="matrix(1.0902697,0,0,0.8142857,-243.35991,35.757143)"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g7670"
+ transform="translate(-397.002,-260.89567)">
+ <path
+ style="fill:none;stroke:#d77711;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 569.6321,136.60228 c -1.8678,0.24167 -3.5157,1.71451 -3.9769,3.54822 l -7.9492,23.95046 -1.7625,0.89368 -24.294,0 c -1.3579,0 -2.6831,0.70979 -3.5342,1.77407 -1.7911,2.01255 -1.342,5.58346 0.8777,7.09649 l 19.8777,14.63704 0.4228,2.12898 -7.5075,23.50619 c -1.044,3.66885 3.8509,7.3561 7.0675,5.3223 l 19.8756,-14.63571 2.5444,0 19.8777,14.63571 c 1.7284,1.13544 4.2055,0.93713 5.7406,-0.43994 1.3013,-1.20646 1.8432,-3.17782 1.3288,-4.8796 l -7.5094,-23.50619 c -0.7113,-0.14154 0.2801,-1.41925 0.4228,-2.12888 l 19.8751,-14.63715 c 2.2268,-1.51287 2.6678,-5.08382 0.8779,-7.09637 -0.8444,-1.06418 -2.1756,-1.7301 -3.5328,-1.77409 l -24.7367,0 -1.7619,-0.89367 -7.5096,-23.95036 c -0.2213,-0.83794 -0.689,-1.62085 -1.3288,-2.21836 -0.9333,-0.90818 -2.2399,-1.40516 -3.5332,-1.33413 l 0.1573,8.6e-4 0,1.1e-4 -0.009,3.4e-4 z"
+ id="path5717-0-9-5-0"
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#fbc98d;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 569.6321,135.60228 c -1.8678,0.24167 -3.5157,1.71451 -3.9769,3.54822 l -7.9492,23.95046 -1.7625,0.89368 -24.294,0 c -1.3579,0 -2.6831,0.70979 -3.5342,1.77407 -1.7911,2.01255 -1.342,5.58346 0.8777,7.09649 l 19.8777,14.63704 0.4228,2.12898 -7.5075,23.50619 c -1.044,3.66885 3.8509,7.3561 7.0675,5.3223 l 19.8756,-14.63571 2.5444,0 19.8777,14.63571 c 1.7284,1.13544 4.2055,0.93713 5.7406,-0.43994 1.3013,-1.20646 1.8432,-3.17782 1.3288,-4.8796 l -7.5094,-23.50619 c -0.7113,-0.14154 0.2801,-1.41925 0.4228,-2.12888 l 19.8751,-14.63715 c 2.2268,-1.51287 2.6678,-5.08382 0.8779,-7.09637 -0.8444,-1.06418 -2.1756,-1.7301 -3.5328,-1.77409 l -24.7367,0 -1.7619,-0.89367 -7.5096,-23.95036 c -0.2213,-0.83794 -0.689,-1.62085 -1.3288,-2.21836 -0.9333,-0.90818 -2.2399,-1.40516 -3.5332,-1.33413 l 0.1573,8.6e-4 0,1.1e-4 -0.009,3.4e-4 z"
+ id="path5717-0-9-5"
+ sodipodi:nodetypes="cccccsccccccccsccccsccccsccc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4864"
+ transform="translate(24.91295,-27.612698)">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.45783099;fill:url(#radialGradient4143-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path14841-3"
+ sodipodi:cx="239"
+ sodipodi:cy="51"
+ sodipodi:rx="5"
+ sodipodi:ry="5"
+ d="m 244,51 a 5,5 0 1 1 -10,0 5,5 0 1 1 10,0 z"
+ transform="matrix(2.7092,0,0,2.7092,-468.22285,-205.6789)" />
+ <path
+ d="m 244,51 a 5,5 0 1 1 -10,0 5,5 0 1 1 10,0 z"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="51"
+ sodipodi:cx="239"
+ id="path14843-0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(0.507975,0,0,0.507975,58.548148,-92.738895)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.45783099;fill:url(#radialGradient7892-7-4);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path14849-7"
+ sodipodi:cx="239"
+ sodipodi:cy="51"
+ sodipodi:rx="5"
+ sodipodi:ry="5"
+ d="m 244,51 a 5,5 0 1 1 -10,0 5,5 0 1 1 10,0 z"
+ transform="matrix(3.8092,0,0,3.8092,-726.49787,-264.7792)" />
+ <path
+ d="m 244,51 a 5,5 0 1 1 -10,0 5,5 0 1 1 10,0 z"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="51"
+ sodipodi:cx="239"
+ id="path14851-8"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(0.714225,0,0,0.714225,14.155148,-105.9829)" />
+ <path
+ transform="matrix(0.795516,0.351305,-0.351384,0.795695,88.379148,-256.9333)"
+ inkscape:transform-center-y="-4.4264044"
+ inkscape:transform-center-x="0.042578782"
+ d="m 206.67379,217.35364 -40.25404,-8.01083 -22.18276,34.4648 -4.82043,-40.75934 -39.632833,-10.44685 37.274853,-17.17984 -2.31168,-40.92131 27.85756,30.14162 38.20413,-14.84391 -20.05793,35.80838 25.92313,31.74728 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.1714918"
+ sodipodi:arg1="0.5417155"
+ sodipodi:r2="23.586105"
+ sodipodi:r1="57.682449"
+ sodipodi:cy="187.61218"
+ sodipodi:cx="157.25"
+ sodipodi:sides="5"
+ id="path14984-6"
+ style="fill:none;stroke:url(#radialGradient7894-2-9);stroke-width:11.49779987;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter15758-4-9)"
+ sodipodi:type="star" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ inkscape:connector-curvature="0"
+ id="path11982-8"
+ d="m 135.06415,-25.260715 c 0,0 6.625,-3.125 12.625,0.125 l 21,15.25 c 3.875,2.125 9.5,-1.25 10.375,-4.875 0,0 -6.25,0.75 -8.5,-2.75 l -19.5,-14.75 c -1.625,-1.25 -4.25,-1.25 -6.25,-0.25 z"
+ style="opacity:0.56223204;color:#000000;fill:#fdeddd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:0.56223204;color:#000000;fill:#fde6cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 126.76138,-10.228385 c -3.125,-1 -4.44279,-3.02729 -2.88943,-8.81716 l 3.92665,-12.82661 c 0.46212,-4.39519 0.2966,-7.85179 -5.25988,-11.00768 0,0 -0.75133,6.08163 -2.2258,10.03988 l -4.31672,13.4356 c -0.30418,5.80015 4.7754,9.8299 10.76518,9.17597 z"
+ id="path11986-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="opacity:0.56223204;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 143.09007,-80.304705 c 0,0 -3.59929,6.37976 -10.37392,7.19639 l -23.7013,0.19632 c -5.89034,0.006 -9.404132,7.38683 -7.27253,12.85056 0,0 0.66626,-4.72505 7.77552,-4.79485 l 24.5633,-0.48717 c 2.04857,0.0806 4.1905,-1.43692 5.24435,-3.40907 z"
+ id="path12005-4"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path12007-3"
+ d="m 142.998,-99.121645 c 0,0 2.26003,1.34292 5.63167,7.27542 l 3.70793,12.16311 c 2.16374,3.8535 4.09997,7.29893 10.45829,6.6619 0,0 -4.81661,-15.45027 -7.5324,-23.08512 -3.10481,-4.908615 -7.96832,-4.716455 -12.26549,-3.01531 z"
+ style="opacity:0.56223204;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
+ <g
+ id="g12056-1"
+ transform="translate(307.13515,-213.3706)">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.45783099;fill:url(#radialGradient12066-6-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path12058-4"
+ sodipodi:cx="239"
+ sodipodi:cy="51"
+ sodipodi:rx="5"
+ sodipodi:ry="5"
+ d="m 244,51 a 5,5 0 1 1 -10,0 5,5 0 1 1 10,0 z"
+ transform="matrix(3.8092,0,0,3.8092,-1042.5,0.95285)" />
+ <path
+ d="m 244,51 a 5,5 0 1 1 -10,0 5,5 0 1 1 10,0 z"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="51"
+ sodipodi:cx="239"
+ id="path12060-9"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(0.714225,0,0,0.714225,-301.847,159.749)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.45783099;fill:url(#radialGradient12068-3-7);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path12062-2"
+ sodipodi:cx="239"
+ sodipodi:cy="51"
+ sodipodi:rx="5"
+ sodipodi:ry="5"
+ d="m 244,51 a 5,5 0 1 1 -10,0 5,5 0 1 1 10,0 z"
+ transform="matrix(1.8092,0,0,1.8092,-568.584,103.68)" />
+ <path
+ d="m 244,51 a 5,5 0 1 1 -10,0 5,5 0 1 1 10,0 z"
+ sodipodi:ry="5"
+ sodipodi:rx="5"
+ sodipodi:cy="51"
+ sodipodi:cx="239"
+ id="path12064-0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(0.339225,0,0,0.339225,-216.807,179.101)" />
+ </g>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g3695"
+ transform="translate(81,-71)" />
+</svg>
diff --git a/gnome-doc-utils.make b/gnome-doc-utils.make
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/gnome-doc-utils.make
diff --git a/help/Makefile.am b/help/Makefile.am
new file mode 100644
index 0000000..7fa2e1e
--- /dev/null
+++ b/help/Makefile.am
@@ -0,0 +1,17 @@
+if HAVE_GNOME_DOC_UTILS
+include $(top_srcdir)/gnome-doc-utils.make
+
+DOC_ID = sparkleshare
+
+DOC_INCLUDES = legal.xml
+
+DOC_PAGES = account-creation.page \
+ advanced.page \
+ index.page \
+ introduction.page \
+ share.page
+
+DOC_LINGUAS =
+
+dist-hook: doc-dist-hook
+endif
diff --git a/help/Makefile.in b/help/Makefile.in
new file mode 100644
index 0000000..544bd5b
--- /dev/null
+++ b/help/Makefile.in
@@ -0,0 +1,403 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/gnome-doc-utils.make
+subdir = help
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/gnome-doc-utils.m4 \
+ $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/nautilus-python.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/notify-sharp.m4 \
+ $(top_srcdir)/build/m4/sparkleshare/smartirc4net.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GMSGFMT = @GMSGFMT@
+GNOME_DOC_UTILS_CFLAGS = @GNOME_DOC_UTILS_CFLAGS@
+GNOME_DOC_UTILS_LIBS = @GNOME_DOC_UTILS_LIBS@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+NAUTILUS_PREFIX = @NAUTILUS_PREFIX@
+NAUTILUS_PYTHON_CFLAGS = @NAUTILUS_PYTHON_CFLAGS@
+NAUTILUS_PYTHON_DIR = @NAUTILUS_PYTHON_DIR@
+NAUTILUS_PYTHON_LIBS = @NAUTILUS_PYTHON_LIBS@
+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+Q = @Q@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SMARTIRC4NET_ASSEMBLY = @SMARTIRC4NET_ASSEMBLY@
+SMARTIRC4NET_FILES = @SMARTIRC4NET_FILES@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WEBKIT_SHARP_CFLAGS = @WEBKIT_SHARP_CFLAGS@
+WEBKIT_SHARP_LIBS = @WEBKIT_SHARP_LIBS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_GNOME_DOC_UTILS_TRUE@DOC_ID = sparkleshare
+@HAVE_GNOME_DOC_UTILS_TRUE@DOC_INCLUDES = legal.xml
+@HAVE_GNOME_DOC_UTILS_TRUE@DOC_PAGES = account-creation.page \
+@HAVE_GNOME_DOC_UTILS_TRUE@ advanced.page \
+@HAVE_GNOME_DOC_UTILS_TRUE@ index.page \
+@HAVE_GNOME_DOC_UTILS_TRUE@ introduction.page \
+@HAVE_GNOME_DOC_UTILS_TRUE@ share.page
+
+@HAVE_GNOME_DOC_UTILS_TRUE@DOC_LINGUAS =
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gnome-doc-utils.make $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign help/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign help/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+@HAVE_GNOME_DOC_UTILS_FALSE@dist-hook:
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ dist-hook distclean distclean-generic distclean-libtool \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am
+
+
+@HAVE_GNOME_DOC_UTILS_TRUE@dist-hook: doc-dist-hook
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..6781b98
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dst_arg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ -*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100755
index 0000000..d8efb57
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,8745 @@
+# Generated from ltmain.m4sh.
+
+# libtool (GNU libtool) 2.2.10
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010 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.
+
+# GNU Libtool is free software; you can redistribute 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [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
+# --mode=MODE use operation mode MODE
+# --preserve-dup-deps don't remove duplicate dependency libraries
+# --quiet, --silent don't print informational messages
+# --no-quiet, --no-silent
+# print informational messages (default)
+# --tag=TAG use configuration variables from tag TAG
+# -v, --verbose print more informational messages than default
+# --no-verbose don't print the extra informational messages
+# --version print version information
+# -h, --help, --help-all print short, long, or detailed help message
+#
+# 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. When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+# host-triplet: $host
+# shell: $SHELL
+# compiler: $LTCC
+# compiler flags: $LTCFLAGS
+# linker: $LD (gnu? $with_gnu_ld)
+# $progname: (GNU libtool) 2.2.10
+# automake: $automake_version
+# autoconf: $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.2.10
+TIMESTAMP=""
+package_revision=1.3175
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# NLS nuisances: We save the old values to restore during execute mode.
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test \"\${$lt_var+set}\" = set; then
+ save_$lt_var=\$$lt_var
+ $lt_var=C
+ export $lt_var
+ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+ fi"
+done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
+
+$lt_unset CDPATH
+
+
+# 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"
+
+
+
+: ${CP="cp -f"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+ func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+ s@/\./@/@g
+ t dotsl
+ s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+# value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+ # Start from root dir and reassemble the path.
+ func_normal_abspath_result=
+ func_normal_abspath_tpath=$1
+ func_normal_abspath_altnamespace=
+ case $func_normal_abspath_tpath in
+ "")
+ # Empty path, that just means $cwd.
+ func_stripname '' '/' "`pwd`"
+ func_normal_abspath_result=$func_stripname_result
+ return
+ ;;
+ # The next three entries are used to spot a run of precisely
+ # two leading slashes without using negated character classes;
+ # we take advantage of case's first-match behaviour.
+ ///*)
+ # Unusual form of absolute path, do nothing.
+ ;;
+ //*)
+ # Not necessarily an ordinary path; POSIX reserves leading '//'
+ # and for example Cygwin uses it to access remote file shares
+ # over CIFS/SMB, so we conserve a leading double slash if found.
+ func_normal_abspath_altnamespace=/
+ ;;
+ /*)
+ # Absolute path, do nothing.
+ ;;
+ *)
+ # Relative path, prepend $cwd.
+ func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+ ;;
+ esac
+ # Cancel out all the simple stuff to save iterations. We also want
+ # the path to end with a slash for ease of parsing, so make sure
+ # there is one (and only one) here.
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+ while :; do
+ # Processed it all yet?
+ if test "$func_normal_abspath_tpath" = / ; then
+ # If we ascended to the root using ".." the result may be empty now.
+ if test -z "$func_normal_abspath_result" ; then
+ func_normal_abspath_result=/
+ fi
+ break
+ fi
+ func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$pathcar"`
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$pathcdr"`
+ # Figure out what to do with it
+ case $func_normal_abspath_tcomponent in
+ "")
+ # Trailing empty path component, ignore it.
+ ;;
+ ..)
+ # Parent dir; strip last assembled component from result.
+ func_dirname "$func_normal_abspath_result"
+ func_normal_abspath_result=$func_dirname_result
+ ;;
+ *)
+ # Actual path component, append it.
+ func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+ ;;
+ esac
+ done
+ # Restore leading double-slash if one was found on entry.
+ func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+# value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+ func_relative_path_result=
+ func_normal_abspath "$1"
+ func_relative_path_tlibdir=$func_normal_abspath_result
+ func_normal_abspath "$2"
+ func_relative_path_tbindir=$func_normal_abspath_result
+
+ # Ascend the tree starting from libdir
+ while :; do
+ # check if we have found a prefix of bindir
+ case $func_relative_path_tbindir in
+ $func_relative_path_tlibdir)
+ # found an exact match
+ func_relative_path_tcancelled=
+ break
+ ;;
+ $func_relative_path_tlibdir*)
+ # found a matching prefix
+ func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+ func_relative_path_tcancelled=$func_stripname_result
+ if test -z "$func_relative_path_result"; then
+ func_relative_path_result=.
+ fi
+ break
+ ;;
+ *)
+ func_dirname $func_relative_path_tlibdir
+ func_relative_path_tlibdir=${func_dirname_result}
+ if test "x$func_relative_path_tlibdir" = x ; then
+ # Have to descend all the way to the root!
+ func_relative_path_result=../$func_relative_path_result
+ func_relative_path_tcancelled=$func_relative_path_tbindir
+ break
+ fi
+ func_relative_path_result=../$func_relative_path_result
+ ;;
+ esac
+ done
+
+ # Now calculate path; take care to avoid doubling-up slashes.
+ func_stripname '' '/' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ func_stripname '/' '/' "$func_relative_path_tcancelled"
+ if test "x$func_stripname_result" != x ; then
+ func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+ fi
+
+ # Normalisation. If bindir is libdir, return empty string,
+ # else relative path ending with a slash; either way, target
+ # file name can be directly appended.
+ if test ! -z "$func_relative_path_result"; then
+ func_stripname './' '' "$func_relative_path_result/"
+ func_relative_path_result=$func_stripname_result
+ fi
+}
+
+# The name of this program:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=$func_dirname_result
+ progdir=`cd "$progdir" && pwd`
+ progpath="$progdir/$progname"
+ ;;
+ *)
+ save_IFS="$IFS"
+ IFS=:
+ for progdir in $PATH; do
+ IFS="$save_IFS"
+ test -x "$progdir/$progname" && break
+ done
+ IFS="$save_IFS"
+ test -n "$progdir" || progdir=`pwd`
+ progpath="$progdir/$progname"
+ ;;
+esac
+
+# 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'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+ s/$bs4/&\\
+/g
+ s/^$bs2$dollar/$bs&/
+ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+ s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+ $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $opt_verbose && func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+ $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+ # bash bug again:
+ :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ func_error ${1+"$@"}
+ func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information." ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ my_directory_path="$1"
+ my_dir_list=
+
+ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+ # Protect directory names starting with `-'
+ case $my_directory_path in
+ -*) my_directory_path="./$my_directory_path" ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$my_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ my_dir_list="$my_directory_path:$my_dir_list"
+
+ # If the last portion added has no slash in it, the list is done
+ case $my_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+ done
+ my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+
+ save_mkdir_p_IFS="$IFS"; IFS=':'
+ for my_dir in $my_dir_list; do
+ IFS="$save_mkdir_p_IFS"
+ # mkdir can fail with a `File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$my_dir" 2>/dev/null || :
+ done
+ IFS="$save_mkdir_p_IFS"
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$my_directory_path" || \
+ func_fatal_error "Failed to create \`$1'"
+ fi
+}
+
+
+# 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 "$opt_dry_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" || \
+ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+ fi
+
+ $ECHO "$my_tmpdir"
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+ case $1 in
+ *[\\\`\"\$]*)
+ func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
+ *)
+ func_quote_for_eval_unquoted_result="$1" ;;
+ esac
+
+ case $func_quote_for_eval_unquoted_result in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and and variable
+ # expansion for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+ ;;
+ *)
+ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+ esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ case $1 in
+ *[\\\`\"]*)
+ my_arg=`$ECHO "$1" | $SED \
+ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ my_arg="$1" ;;
+ esac
+
+ case $my_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ my_arg="\"$my_arg\""
+ ;;
+ esac
+
+ func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$my_cmd"
+ my_status=$?
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$lt_user_locale
+ $my_cmd"
+ my_status=$?
+ eval "$lt_safe_locale"
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $SED -n '/(C)/!b go
+ :more
+ /\./!{
+ N
+ s/\n# / /
+ b more
+ }
+ :go
+ /^# '$PROGRAM' (GNU /,/# warranty; / {
+ s/^# //
+ s/^# *$//
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $SED -n '/^# Usage:/,/^# *.*--help/ {
+ s/^# //
+ s/^# *$//
+ s/\$progname/'$progname'/
+ p
+ }' < "$progpath"
+ echo
+ $ECHO "run \`$progname --help | more' for full usage"
+ exit $?
+}
+
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
+func_help ()
+{
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
+ s/^# //
+ s/^# *$//
+ s*\$progname*'$progname'*
+ s*\$host*'"$host"'*
+ s*\$SHELL*'"$SHELL"'*
+ s*\$LTCC*'"$LTCC"'*
+ s*\$LTCFLAGS*'"$LTCFLAGS"'*
+ s*\$LD*'"$LD"'*
+ s/\$with_gnu_ld/'"$with_gnu_ld"'/
+ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+ p
+ }' < "$progpath"
+ ret=$?
+ if test -z "$1"; then
+ exit $ret
+ fi
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ func_error "missing argument for $1."
+ exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# 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=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_error ${1+"$@"}
+ func_error "See the $PACKAGE documentation for more information."
+ func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_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 $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname="$1"
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+# Parse options once, thoroughly. This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ esac
+
+ # Parse non-mode specific arguments:
+ while test "$#" -gt 0; do
+ opt="$1"
+ shift
+
+ case $opt in
+ --config) func_config ;;
+
+ --debug) preserve_args="$preserve_args $opt"
+ func_echo "enabling shell trace mode"
+ opt_debug='set -x'
+ $opt_debug
+ ;;
+
+ -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ execute_dlfiles="$execute_dlfiles $1"
+ shift
+ ;;
+
+ --dry-run | -n) opt_dry_run=: ;;
+ --features) func_features ;;
+ --finish) mode="finish" ;;
+
+ --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ case $1 in
+ # Valid mode arguments:
+ clean) ;;
+ compile) ;;
+ execute) ;;
+ finish) ;;
+ install) ;;
+ link) ;;
+ relink) ;;
+ uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+
+ mode="$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_duplicate_deps=: ;;
+
+ --quiet|--silent) preserve_args="$preserve_args $opt"
+ opt_silent=:
+ opt_verbose=false
+ ;;
+
+ --no-quiet|--no-silent)
+ preserve_args="$preserve_args $opt"
+ opt_silent=false
+ ;;
+
+ --verbose| -v) preserve_args="$preserve_args $opt"
+ opt_silent=false
+ opt_verbose=:
+ ;;
+
+ --no-verbose) preserve_args="$preserve_args $opt"
+ opt_verbose=false
+ ;;
+
+ --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ preserve_args="$preserve_args $opt $1"
+ func_enable_tag "$1" # tagname is set here
+ shift
+ ;;
+
+ # Separate optargs to long options:
+ -dlopen=*|--mode=*|--tag=*)
+ func_opt_split "$opt"
+ set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+ shift
+ ;;
+
+ -\?|-h) func_usage ;;
+ --help) opt_help=: ;;
+ --help-all) opt_help=': help-all' ;;
+ --version) func_version ;;
+
+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
+
+ *) nonopt="$opt"
+ break
+ ;;
+ esac
+ done
+
+
+ case $host in
+ *cygwin* | *mingw* | *pw32* | *cegcc*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+ ;;
+ esac
+
+ # Having warned about all mis-specified options, bail out if
+ # anything was wrong.
+ $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+$opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ func_fatal_configuration "not configured to build any kind of library"
+ fi
+
+ test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ func_error "unrecognized option \`-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null \
+ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case "$lalib_p_line" in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_ltwrapper_scriptname_result=""
+ if func_ltwrapper_executable_p "$1"; then
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+ fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $opt_debug
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$save_ifs
+ eval cmd=\"$cmd\"
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE 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.
+func_source ()
+{
+ $opt_debug
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# 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 ()
+{
+ $opt_debug
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ 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 "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+ # 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.
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case "$@ " in
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+ # 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
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with \`--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=${1}
+ if test "$build_libtool_libs" = yes; then
+ write_lobj=\'${2}\'
+ else
+ write_lobj=none
+ fi
+
+ if test "$build_old_libs" = yes; then
+ write_oldobj=\'${3}\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "${write_libobj}"
+ }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $opt_debug
+ # 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=
+ pie_flag=
+
+ 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)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify \`-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ pie_flag="$pie_flag $arg"
+ continue
+ ;;
+
+ -shared | -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,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$arg"
+ lastarg="$lastarg $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # 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.
+ func_quote_for_eval "$lastarg"
+ base_compile="$base_compile $func_quote_for_eval_result"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with \`-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj="$func_basename_result"
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from \`$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name \`$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname="$func_basename_result"
+ xdir="$func_dirname_result"
+ lobj=${xdir}$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # 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
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ 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 "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ 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 $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "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."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ removelist="$removelist $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ removelist="$removelist $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+ # 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
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ 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."
+
+ $opt_dry_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
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test "$suppress_opt" = yes; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ 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$pie_flag"
+ 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"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ 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."
+
+ $opt_dry_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
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+ test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [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: $progname [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
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to build PIC objects only
+ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a \`.o' file suitable for static linking
+ -static only build a \`.o' file suitable for static linking
+ -Wc,FLAG pass FLAG directly to the compiler
+
+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: $progname [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: $progname [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: $progname [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 following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [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
+ -bindir BINDIR specify path to binaries directory (for systems where
+ libraries must be found in the PATH setting at runtime)
+ -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
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+ -Wc,FLAG
+ -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wl,FLAG
+ -Xlinker FLAG pass linker-specific FLAG directly to the linker
+ -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
+
+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: $progname [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."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode \`$mode'"
+ ;;
+ esac
+
+ echo
+ $ECHO "Try \`$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+ if test "$opt_help" = :; then
+ func_mode_help
+ else
+ {
+ func_help noexit
+ for mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | sed -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+ for mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+ } |
+ sed '1d
+ /^When reporting/,/^Report/{
+ H
+ d
+ }
+ $x
+ /information about other modes/d
+ /more detailed .*MODE/d
+ s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+ fi
+ exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $opt_debug
+ # The first argument is the command name.
+ cmd="$nonopt"
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ test -f "$file" \
+ || func_fatal_help "\`$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "\`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ ;;
+
+ *)
+ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+ 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
+ -* | *.la | *.lo ) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_quote_for_eval "$file"
+ args="$args $func_quote_for_eval_result"
+ done
+
+ if test "X$opt_dry_run" = Xfalse; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # 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
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $opt_debug
+ 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.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_silent && exit $EXIT_SUCCESS
+
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ echo
+ echo "If you ever happen to want to link against installed libraries"
+ echo "in a given directory, LIBDIR, you must either use libtool, and"
+ echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ echo
+
+ echo "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ echo "pages."
+ ;;
+ *)
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ echo "----------------------------------------------------------------------"
+ exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $opt_debug
+ # 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.
+ case $nonopt in *shtool*) :;; *) false;; esac; then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog$func_quote_for_eval_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+ *) install_cp=false ;;
+ esac
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ no_mode=:
+ for arg
+ do
+ arg2=
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f)
+ if $install_cp; then :; else
+ prev=$arg
+ fi
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ if test "x$prev" = x-m && test -n "$install_override_mode"; then
+ arg2=$install_override_mode
+ no_mode=false
+ fi
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog $func_quote_for_eval_result"
+ if test -n "$arg2"; then
+ func_quote_for_eval "$arg2"
+ fi
+ install_shared_prog="$install_shared_prog $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prev' option requires an argument"
+
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_for_eval "$install_override_mode"
+ install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result"
+ fi
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir="$func_dirname_result"
+ destname="$func_basename_result"
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "\`$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "\`$destdir' must be an absolute directory name"
+ ;;
+ 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.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # 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
+
+ func_dirname "$file" "/" ""
+ dir="$func_dirname_result"
+ 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 -e "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.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking \`$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname="$1"
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme="$stripme"
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=""
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_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
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name="$func_basename_result"
+ instname="$dir/$name"i
+ func_show_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
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to \`$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_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
+ func_basename "$file"
+ destfile="$func_basename_result"
+ 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
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "\`$lib' has not been installed in \`$libdir'"
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if test "$finalize" = yes; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file="$func_basename_result"
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_silent || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink \`$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ func_warning "cannot relink \`$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "$file$stripped_ext" | $SED "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)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name="$func_basename_result"
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $opt_debug
+ my_outputname="$1"
+ my_originator="$2"
+ my_pic_p="${3-no}"
+ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms="${my_outputname}S.c"
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${my_outputname}.nm"
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ func_verbose "generating symbol list for \`$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_verbose "extracting global C symbols from \`$progfile'"
+ $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$outputname.exp"
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from \`$dlprefile'"
+ func_basename "$dlprefile"
+ name="$func_basename_result"
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ done
+
+ $opt_dry_run || {
+ # 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/$my_dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ echo >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+ runtime relocations are performed -- see ld's documentation
+ on pseudo-relocs. */"
+ lt_dlsym_const= ;;
+ *osf5*)
+ echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+ lt_dlsym_const= ;;
+ *)
+ lt_dlsym_const=const ;;
+ esac
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+ { \"$my_originator\", (void *) 0 },"
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ 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*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ if test "X$my_pic_p" != Xno; then
+ pic_flag_for_symtable=" $pic_flag"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) symtab_cflags="$symtab_cflags $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj="$output_objdir/${my_outputname}S.$objext"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for \`$my_dlsyms'"
+ ;;
+ 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 "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+ fi
+}
+
+# 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.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+ $opt_debug
+ 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
+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/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_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $opt_debug
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+ if test "$lock_old_archive_extraction" = yes; then
+ lockfile=$f_ex_an_ar_oldlib.lock
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ fi
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+ 'stat=$?; rm -f "$lockfile"; exit $stat'
+ if test "$lock_old_archive_extraction" = yes; then
+ $opt_dry_run || rm -f "$lockfile"
+ fi
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $opt_debug
+ my_gentop="$1"; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=""
+ my_xlib=""
+ my_xabs=""
+ my_xdir=""
+
+ 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
+ func_basename "$my_xlib"
+ my_xlib="$func_basename_result"
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib_u"
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ darwin_base_archive=`basename "$darwin_archive"`
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches ; do
+ func_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've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result="$my_oldobjs"
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=${1-no}
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# 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.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# 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 variables:
+ generated_by_libtool_version='$macro_version'
+ 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
+ file=\"\$0\""
+
+ qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+ $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+ ECHO=\"$qECHO\"
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=\$0
+ shift
+ for lt_opt
+ do
+ case \"\$lt_opt\" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+ cat \"\$lt_dump_D/\$lt_dump_F\"
+ exit 0
+ ;;
+ --lt-*)
+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n \"\$lt_option_debug\"; then
+ echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done
+ func_exec_program_core \${1+\"\$@\"}
+}
+
+ # Parse options
+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED '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 \"\$file\" | $SED '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 \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $ECHO "\
+ 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 "\
+
+ # 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 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ 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 "\
+ # 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 \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+ func_exec_program \${1+\"\$@\"}
+ 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 1
+ fi
+fi\
+"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+# $build $host
+# mingw (msys) mingw [e.g. native]
+# cygwin mingw
+# *nix + wine mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin. Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+ func_to_host_path_result="$1"
+ if test -n "$1"; then
+ case $host in
+ *mingw* )
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+ case $build in
+ *mingw* ) # actually, msys
+ # awkward: cmd appends spaces to result
+ func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+ ;;
+ *cygwin* )
+ func_to_host_path_result=`cygpath -w "$1" |
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ * )
+ # Unfortunately, winepath does not exit with a non-zero
+ # error code, so we are forced to check the contents of
+ # stdout. On the other hand, if the command is not
+ # found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both
+ # error code of zero AND non-empty stdout, which explains
+ # the odd construction:
+ func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+ func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" |
+ $SED -e "$lt_sed_naive_backslashify"`
+ else
+ # Allow warning below.
+ func_to_host_path_result=
+ fi
+ ;;
+ esac
+ if test -z "$func_to_host_path_result" ; then
+ func_error "Could not determine host path corresponding to"
+ func_error " \`$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_path_result="$1"
+ fi
+ ;;
+ esac
+ fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+# $build $host
+# mingw (msys) mingw [e.g. native]
+# cygwin mingw
+# *nix + wine mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+ func_to_host_pathlist_result="$1"
+ if test -n "$1"; then
+ case $host in
+ *mingw* )
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_pathlist_tmp1=$func_stripname_result
+ case $build in
+ *mingw* ) # Actually, msys.
+ # Awkward: cmd appends spaces to result.
+ func_to_host_pathlist_result=`
+ ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+ ;;
+ *cygwin* )
+ func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" |
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ * )
+ # unfortunately, winepath doesn't convert pathlists
+ func_to_host_pathlist_result=""
+ func_to_host_pathlist_oldIFS=$IFS
+ IFS=:
+ for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+ IFS=$func_to_host_pathlist_oldIFS
+ if test -n "$func_to_host_pathlist_f" ; then
+ func_to_host_path "$func_to_host_pathlist_f"
+ if test -n "$func_to_host_path_result" ; then
+ if test -z "$func_to_host_pathlist_result" ; then
+ func_to_host_pathlist_result="$func_to_host_path_result"
+ else
+ func_append func_to_host_pathlist_result ";$func_to_host_path_result"
+ fi
+ fi
+ fi
+ done
+ IFS=$func_to_host_pathlist_oldIFS
+ ;;
+ esac
+ if test -z "$func_to_host_pathlist_result"; then
+ func_error "Could not determine the host path(s) corresponding to"
+ func_error " \`$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This may break if $1 contains DOS-style drive
+ # specifications. The fix is not to complicate the expression
+ # below, but for the user to provide a working wine installation
+ # with winepath so that path translation in the cross-to-mingw
+ # case works properly.
+ lt_replace_pathsep_nix_to_dos="s|:|;|g"
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+ $SED -e "$lt_replace_pathsep_nix_to_dos"`
+ fi
+ # Now, add the leading and trailing path separators back
+ case "$1" in
+ :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+ ;;
+ esac
+ case "$1" in
+ *: ) func_append func_to_host_pathlist_result ";"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+ 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.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+# define _INTPTR_T_DEFINED
+# define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#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
+# define FOPEN_WB "wb"
+# 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 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+ cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_pathlist "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_pathlist "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test "$fast_install" = yes; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ intptr_t rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp (argv[i], dumpscript_opt) == 0)
+ {
+EOF
+ case "$host" in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (strcmp (argv[i], debug_opt) == 0)
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "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;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+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;
+
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
+
+ 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 (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ 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 (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ 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 *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ lt_debugprintf (__FILE__, __LINE__,
+ "checking path component for symlinks: %s\n",
+ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+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;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+ va_list args;
+ if (lt_debug)
+ {
+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+ }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+ return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+ return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_setenv) setting '%s' to '%s'\n",
+ nonnull (name), nonnull (value));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ int len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ int orig_value_len = strlen (orig_value);
+ int add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ int len = strlen (new_value);
+ while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[len-1] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+EOF
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+ Note that spawn() does not by itself call the command interpreter
+ (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+ ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&v);
+ v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+ }) ? "cmd.exe" : "command.com").
+ Instead it simply concatenates the arguments, separated by ' ', and calls
+ CreateProcess(). We must quote the arguments since Win32 CreateProcess()
+ interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+ special way:
+ - Space and tab are interpreted as delimiters. They are not treated as
+ delimiters if they are surrounded by double quotes: "...".
+ - Unescaped double quotes are removed from the input. Their only effect is
+ that within double quotes, space and tab are treated like normal
+ characters.
+ - Backslashes not followed by double quotes are not special.
+ - But 2*n+1 backslashes followed by a double quote become
+ n backslashes followed by a double quote (n >= 0):
+ \" -> "
+ \\\" -> \"
+ \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+ size_t argc;
+ char **new_argv;
+ size_t i;
+
+ /* Count number of arguments. */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ ;
+
+ /* Allocate new argument vector. */
+ new_argv = XMALLOC (char *, argc + 1);
+
+ /* Put quoted arguments into the new argument vector. */
+ for (i = 0; i < argc; i++)
+ {
+ const char *string = argv[i];
+
+ if (string[0] == '\0')
+ new_argv[i] = xstrdup ("\"\"");
+ else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+ {
+ int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+ size_t length;
+ unsigned int backslashes;
+ const char *s;
+ char *quoted_string;
+ char *p;
+
+ length = 0;
+ backslashes = 0;
+ if (quote_around)
+ length++;
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ length += backslashes + 1;
+ length++;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ length += backslashes + 1;
+
+ quoted_string = XMALLOC (char, length + 1);
+
+ p = quoted_string;
+ backslashes = 0;
+ if (quote_around)
+ *p++ = '"';
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ {
+ unsigned int j;
+ for (j = backslashes + 1; j > 0; j--)
+ *p++ = '\\';
+ }
+ *p++ = c;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ {
+ unsigned int j;
+ for (j = backslashes; j > 0; j--)
+ *p++ = '\\';
+ *p++ = '"';
+ }
+ *p = '\0';
+
+ new_argv[i] = quoted_string;
+ }
+ else
+ new_argv[i] = (char *) string;
+ }
+ new_argv[argc] = NULL;
+
+ return new_argv;
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+ func_emit_wrapper yes |
+ $SED -e 's/\([\\"]\)/\\\1/g' \
+ -e 's/^/ fputs ("/' -e 's/$/\\n", f);/'
+
+ cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+ $opt_debug
+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $opt_debug
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # 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=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ bindir=
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ 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
+ weak_libs=
+ single_module="${wl}-single_module"
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ 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
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ bindir)
+ bindir="$arg"
+ prev=
+ continue
+ ;;
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append 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"
+ test -f "$arg" \
+ || func_fatal_error "symbol file \`$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$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 func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ 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.
+ func_append 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
+ func_append 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"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file \`$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ 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
+ ;;
+ shrext)
+ shrext_cmds="$arg"
+ prev=
+ continue
+ ;;
+ weak)
+ weak_libs="$weak_libs $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ 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
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -bindir)
+ prev=bindir
+ 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
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ 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*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname '-L' '' "$arg"
+ dir=$func_stripname_result
+ if test -z "$dir"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between \`-L' and \`$1'"
+ else
+ func_fatal_error "need path for \`-L' option"
+ fi
+ fi
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of \`$dir'"
+ 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* | *-cegcc*)
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$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* | *-cegcc* | *-*-haiku*)
+ # 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 System.ltframework"
+ 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
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module="${wl}-multi_module"
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "\`-no-install' is ignored for $host"
+ func_warning "assuming \`-no-fast-install' instead"
+ 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*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # 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
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ arg="$arg $func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+ linker_flags="$linker_flags $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ # Flags to be passed through unchanged, with rationale:
+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
+ # -r[0-9][0-9]* specify processor for the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+ # +DA*, +DD* enable 64-bit mode for the HP compiler
+ # -q* compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+ # -F/path path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # @file GCC response files
+ # -tp=* Portland pgcc target processor selection
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ compiler_flags="$compiler_flags $arg"
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ *.$objext)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ 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.
+ func_append 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
+ func_append 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"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool 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.
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prevarg' option requires an argument"
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname="$func_basename_result"
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'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\"
+
+ func_dirname "$output" "/" ""
+ output_objdir="$func_dirname_result$objdir"
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ 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 $opt_duplicate_deps ; 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 $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+ ;;
+ 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
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test "$linkmode,$pass" = "lib,link"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs="$tmp_deplibs"
+ fi
+
+ 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% $dependency_libs" ;;
+ esac
+ fi
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ case $lib in
+ *.la) func_source "$lib" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) deplibs="$deplibs $deplib" ;;
+ esac
+ done
+ done
+ libs="$dlprefiles"
+ 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|-threads)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags $deplib"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ func_warning "\`-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test "$linkmode" = lib; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; 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 func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ 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
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+ 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
+ *.ltframework)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ 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
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ *)
+ func_warning "\`-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ func_stripname '-R' '' "$deplib"
+ dir=$func_stripname_result
+ # 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)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=no
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ 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 use here."
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ ;;
+ esac
+ 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
+ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+ fi
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # 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
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ 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
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ 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"
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ func_fatal_error "\`$lib' is not a convenience library"
+ fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ 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
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+ 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
+ func_warning "cannot determine absolute directory name of \`$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname="$func_basename_result"
+
+ # 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
+ func_warning "library \`$lib' was moved."
+ 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
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir" && test "$linkmode" = prog; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+ 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"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ dlpreconveniencelibs="$dlpreconveniencelibs $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*) func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ 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 $opt_duplicate_deps ; 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 "$prefer_static_libs,$installed" = "built,yes"; } ||
+ 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
+ *"$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
+ case $host in
+ *cygwin* | *mingw* | *cegcc*)
+ # No point in relinking DLLs because paths are not encoded
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=no
+ ;;
+ *)
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=""
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule="$dlpremoduletest"
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && 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
+ shift
+ realname="$1"
+ 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* | *cegcc*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ func_basename "$soroot"
+ soname="$func_basename_result"
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from \`$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for \`$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ 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 (non-dlopened) module then we can not
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null ; then
+ if test "X$dlopenmodule" != "X$lib"; 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
+ elif test -n "$old_library"; then
+ 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 &&
+ test "$hardcode_direct_absolute" = no; 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
+ func_fatal_configuration "unsupported hardcode properties"
+ 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 &&
+ test "$hardcode_direct_absolute" = no; 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*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ 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 $opt_duplicate_deps ; 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
+ path=
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ func_dirname "$deplib" "" "."
+ dir="$func_dirname_result"
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of \`$dir'"
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ 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 "$absdir/$objdir/$depdepl" ; then
+ depdepl="$absdir/$objdir/$depdepl"
+ darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+ linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path="-L$absdir/$objdir"
+ ;;
+ esac
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "\`$deplib' seems to be moved"
+
+ path="-L$absdir"
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test "$pass" = link; then
+ if test "$linkmode" = "prog"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ 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"
+ fi
+ if test "$linkmode" = prog || test "$linkmode" = lib; then
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "\`-export-symbols' is ignored for archives"
+
+ # 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*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test "$module" = no && \
+ func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
+ fi
+
+ test "$dlself" != no && \
+ func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test "$#" -gt 1 && \
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+ install_libdir="$1"
+
+ 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
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ shift
+ IFS="$save_ifs"
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to \`-version-info'"
+
+ # 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="$1"
+ number_minor="$2"
+ number_revision="$3"
+ #
+ # 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|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|qnx|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_minor"
+ lt_irix_increment=no
+ ;;
+ esac
+ ;;
+ no)
+ current="$1"
+ revision="$2"
+ age="$3"
+ ;;
+ 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]) ;;
+ *)
+ func_error "CURRENT \`$current' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ 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]) ;;
+ *)
+ func_error "REVISION \`$revision' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ 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]) ;;
+ *)
+ func_error "AGE \`$age' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE \`$age' is greater than the current interface number \`$current'"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ 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
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ irix | nonstopux)
+ if test "X$lt_irix_increment" = "Xno"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ 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
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ 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
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ qnx)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type \`$version_type'"
+ ;;
+ 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
+ func_warning "undefined symbols not allowed in $host shared libraries"
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" "yes"
+ libobjs="$libobjs $symfileobj"
+ test "X$libobjs" = "X " && libobjs=
+
+ 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 | *.gcno)
+ ;;
+ $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
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ 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 "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+ # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "$dependency_libs " | $SED "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* | *-cegcc* | *-*-haiku*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs System.ltframework"
+ ;;
+ *-*-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.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ 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; shift
+ deplib_match=$1
+ 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
+ ;;
+ *)
+ newdeplibs="$newdeplibs $i"
+ ;;
+ esac
+ 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
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; 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; shift
+ deplib_match=$1
+ 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
+ ;;
+ *)
+ newdeplibs="$newdeplibs $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ 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 "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 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
+ ;;
+ *)
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ 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
+ ;;
+ *)
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; 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 " $tmp_deplibs" | $SED "s,$i,,"`
+ done
+ fi
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ 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
+ ;;
+ esac
+ ;;
+ 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 with the System framework
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ 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
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ 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 " $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
+ shift
+ realname="$1"
+ 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 "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols="$output_objdir/$libname.uexp"
+ delfiles="$delfiles $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols="$export_symbols"
+ export_symbols=
+ always_export_symbols=yes
+ fi
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ func_len " $cmd"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "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" && test "X$skipped_export" != "X:"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $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" &&
+ test "$compiler_needs_object" = yes &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ 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
+ $opt_dry_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:" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # 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
+ func_basename "$output"
+ output_la=$func_basename_result
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+ output=${output_objdir}/${output_la}.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ $ECHO "$obj" >> $output
+ done
+ echo ')' >> $output
+ delfiles="$delfiles $output"
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ output=${output_objdir}/${output_la}.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test "$compiler_needs_object" = yes; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ $ECHO "$obj" >> $output
+ done
+ delfiles="$delfiles $output"
+ output=$firstobj\"$file_list_spec$output\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-${k}.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test "X$objlist" = X ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append 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.
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-${k}.$objext
+ objlist=" $obj"
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ 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~
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+ fi
+ delfiles="$delfiles $output"
+
+ else
+ output=
+ fi
+
+ if ${skipped_export-false}; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ fi
+
+ test -n "$save_libobjs" &&
+ func_verbose "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"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ if ${skipped_export-false}; then
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ fi
+
+ 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\"
+ test "X$libobjs" = "X " && libobjs=
+ 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
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( 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
+ $opt_dry_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
+ func_show_eval '${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
+ func_show_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 "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_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 and hope we can get by with
+ # turning comma into space..
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ 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 "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ func_show_eval '${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"
+ # $opt_dry_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"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for programs"
+
+ test "$preload" = yes \
+ && test "$dlopen_support" = unknown \
+ && test "$dlopen_self" = unknown \
+ && test "$dlopen_self_static" = unknown && \
+ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test "$tagname" = CXX ; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ 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* | *-cegcc*)
+ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$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 "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=yes
+ case $host in
+ *cegcc* | *mingw32ce*)
+ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+ wrappers_required=no
+ ;;
+ *cygwin* | *mingw* )
+ if test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ *)
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ esac
+ if test "$wrappers_required" = no; then
+ # Replace the output file specification.
+ compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+ fi
+
+ exit $exit_status
+ 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 "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_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"
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "\`$output' will be relinked during installation"
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ # Now create the wrapper script.
+ func_verbose "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}\" || $lt_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
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ 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
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host" ; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ 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 $symfileobj"
+ 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"
+ if test "$preload" = yes && test -f "$symfileobj"; then
+ oldobjs="$oldobjs $symfileobj"
+ fi
+ 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
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
+
+ # 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
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase="$func_basename_result"
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ oldobjs="$oldobjs $gentop/$newobj"
+ ;;
+ *) oldobjs="$oldobjs $obj" ;;
+ esac
+ done
+ fi
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$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
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$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
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$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=
+ len=$len0
+ 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
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ func_verbose "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}\" || $lt_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
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; 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 "$relink_command" | $SED "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ 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)
+ func_basename "$deplib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlfiles="$newdlfiles $libdir/$name"
+ ;;
+ *) newdlfiles="$newdlfiles $lib" ;;
+ esac
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ ;;
+ esac
+ 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
+ # In fact, it would be nice if we could use this code for all target
+ # systems that can't hard-code library paths into their executables
+ # and that have no shared library path variable independent of PATH,
+ # but it turns out we can't easily determine that from inspecting
+ # libtool variables, so we have to hard-code the OSs to which it
+ # applies here; at the moment, that means platforms that use the PE
+ # object format with DLL files. See the long comment at the top of
+ # tests/bindir.at for full details.
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ # If a -bindir argument was supplied, place the dll there.
+ if test "x$bindir" != x ;
+ then
+ func_relative_path "$install_libdir" "$bindir"
+ tdlname=$func_relative_path_result$dlname
+ else
+ # Otherwise fall back on heuristic.
+ tdlname=../bin/$dlname
+ fi
+ ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# 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'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_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
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+ func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $opt_debug
+ 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
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ origobjdir="$objdir"
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ if test "X$dir" = X.; then
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
+ func_basename "$file"
+ name="$func_basename_result"
+ 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 func_lalib_p "$file"; then
+ func_source $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.
+ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $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)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $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 func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # 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
+ func_show_eval "$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
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+ func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+ help="$generic_help"
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/man/sparkleshare.1 b/man/sparkleshare.1
new file mode 100644
index 0000000..20e11ef
--- /dev/null
+++ b/man/sparkleshare.1
@@ -0,0 +1,36 @@
+.TH sparkleshare 1 "August 16, 2010" "version 0.2" "USER COMMANDS"
+.SH NAME
+sparkleshare \- sharing work made easy
+.SH SYNOPSIS
+.B sparkleshare
+[start|stop|restart|help]
+.SH DESCRIPTION
+A file sharing system for the desktop that retains a full history of
+changes made, and allows work to be sychronized across many systems.
+Based on the underlying `git' version control system, sparkleshare is
+fast and secure, but the interface is straightforward enough for all
+to use.
+.SH OPTIONS
+.TP
+start
+Start the sparkleshare system, presenting an introductory dialog if
+this is the first time that it has been run.
+.TP
+stop
+Stop sparkleshare, halting all current file sharing and no longer watch
+for changes in the configured shares.
+.TP
+restart
+Restart sparkleshare.
+.SH RETURN VALUES
+Currently sparkleshare only ever returns 0 on exit.
+.SH FILES
+.TP
+~/SparkleShare
+Directories set up to be shared are placed under this directory.
+.SH BUGS
+SparkleShare is currently under development, it is likely that there
+are a number of bugs present in the system. Since the underlying
+file sharing is simply based on `git', even if SparkleShare itself fails,
+the data is retrievable in an open format. On-disk corruption is
+extremely unlikely.
diff --git a/missing b/missing
new file mode 100755
index 0000000..28055d2
--- /dev/null
+++ b/missing
@@ -0,0 +1,376 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program). This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ tar*)
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ exit 1
+ fi
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running `$TOOL --version' or `$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te*)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison*|yacc*)
+ echo 1>&2 "\
+WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex*|flex*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit $?
+ fi
+ ;;
+
+ makeinfo*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ tar*)
+ shift
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case $firstarg in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case $firstarg in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..d2a3522
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,23 @@
+bg
+ca
+cs_CZ
+da
+de
+el
+eo
+es
+fi
+fr
+he
+it
+ja
+nl
+no_NO
+pl
+pt_BR
+ru
+sv
+te
+uk
+zh_CN
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..cc8a222
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,217 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# Copyright (C) 2004-2008 Rodney Dawes <dobey.pwns@gmail.com>
+#
+# This file may be copied and used freely without restrictions. It may
+# be used in projects which are not available under a GNU Public License,
+# but which still want to provide support for the GNU gettext functionality.
+#
+# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
+# instead of PACKAGE and to look for po2tbl in ./ not in intl/
+#
+# - Modified by jacob berkman <jacob@ximian.com> to install
+# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
+#
+# - Modified by Rodney Dawes <dobey.pwns@gmail.com> for use with intltool
+#
+# We have the following line for use by intltoolize:
+# INTLTOOL_MAKEFILE
+
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+datarootdir = @datarootdir@
+libdir = @libdir@
+DATADIRNAME = @DATADIRNAME@
+itlocaledir = $(prefix)/$(DATADIRNAME)/locale
+subdir = po
+install_sh = @install_sh@
+# Automake >= 1.8 provides @mkdir_p@.
+# Until it can be supposed, use the safe fallback:
+mkdir_p = $(install_sh) -d
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
+GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
+
+ALL_LINGUAS = @ALL_LINGUAS@
+
+PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi)
+
+USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi)
+
+USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done)
+
+POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done)
+
+DISTFILES = Makefile.in.in POTFILES.in $(POFILES)
+EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS
+
+POTFILES = \
+# This comment gets stripped out
+
+CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done)
+
+.SUFFIXES:
+.SUFFIXES: .po .pox .gmo .mo .msg .cat
+
+.po.pox:
+ $(MAKE) $(GETTEXT_PACKAGE).pot
+ $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox
+
+.po.mo:
+ $(MSGFMT) -o $@ $<
+
+.po.gmo:
+ file=`echo $* | sed 's,.*/,,'`.gmo \
+ && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+.po.cat:
+ sed -f ../intl/po2msg.sed < $< > $*.msg \
+ && rm -f $@ && gencat $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: $(CATALOGS)
+all-no:
+
+$(GETTEXT_PACKAGE).pot: $(POTFILES)
+ $(GENPOT)
+
+install: install-data
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+ linguas="$(USE_LINGUAS)"; \
+ for lang in $$linguas; do \
+ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $$dir; \
+ if test -r $$lang.gmo; then \
+ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \
+ else \
+ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+ echo "installing $(srcdir)/$$lang.gmo as" \
+ "$$dir/$(GETTEXT_PACKAGE).mo"; \
+ fi; \
+ if test -r $$lang.gmo.m; then \
+ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \
+ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \
+ else \
+ if test -r $(srcdir)/$$lang.gmo.m ; then \
+ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \
+ $$dir/$(GETTEXT_PACKAGE).mo.m; \
+ echo "installing $(srcdir)/$$lang.gmo.m as" \
+ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \
+ else \
+ true; \
+ fi; \
+ fi; \
+ done
+
+# Empty stubs to satisfy archaic automake needs
+dvi info ctags tags CTAGS TAGS ID:
+
+# Define this as empty until I found a useful application.
+install-exec installcheck:
+
+uninstall:
+ linguas="$(USE_LINGUAS)"; \
+ for lang in $$linguas; do \
+ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \
+ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \
+ done
+
+check: all $(GETTEXT_PACKAGE).pot
+ rm -f missing notexist
+ srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m
+ if [ -r missing -o -r notexist ]; then \
+ exit 1; \
+ fi
+
+mostlyclean:
+ rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
+ rm -f .intltool-merge-cache
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES stamp-it
+ rm -f *.mo *.msg *.cat *.cat.m *.gmo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f Makefile.in.in
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ extra_dists="$(EXTRA_DISTFILES)"; \
+ for file in $$extra_dists; do \
+ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \
+ done; \
+ for file in $$dists; do \
+ test -f $$file || file="$(srcdir)/$$file"; \
+ ln $$file $(distdir) 2> /dev/null \
+ || cp -p $$file $(distdir); \
+ done
+
+update-po: Makefile
+ $(MAKE) $(GETTEXT_PACKAGE).pot
+ tmpdir=`pwd`; \
+ linguas="$(USE_LINGUAS)"; \
+ for lang in $$linguas; do \
+ echo "$$lang:"; \
+ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \
+ if $$result; then \
+ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.gmo failed!"; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi; \
+ done
+
+Makefile POTFILES: stamp-it
+ @if test ! -f $@; then \
+ rm -f stamp-it; \
+ $(MAKE) stamp-it; \
+ fi
+
+stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \
+ $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..870d29e
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,18 @@
+# List of source files containing translatable strings.
+# Please keep this file in alphabetical order; run ./sort-potfiles
+# after adding files here.
+[encoding: UTF-8]
+SparkleShare/Mac/SparkleStatusIcon.cs
+SparkleShare/Mac/SparkleUI.cs
+SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in
+SparkleShare/SparkleAbout.cs
+SparkleShare/SparkleBubble.cs
+SparkleShare/SparkleController.cs
+SparkleShare/SparkleIntro.cs
+SparkleShare/SparkleLog.cs
+SparkleShare/SparkleShare.cs
+SparkleShare/SparkleSpinner.cs
+SparkleShare/SparkleStatusIcon.cs
+SparkleShare/SparkleUI.cs
+SparkleShare/SparkleWindow.cs
+
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
new file mode 100644
index 0000000..da3e04d
--- /dev/null
+++ b/po/POTFILES.skip
@@ -0,0 +1,2 @@
+SparkleShare/Nautilus/sparkleshare-nautilus-extension.py
+SparkleLib/SparkleOptions.cs
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..a08aac6
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,429 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# Łukasz Jernaś <deejay1@srem.org>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Здравейте в SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Синхронизирането не е приключило"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Обновено"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Синхронизиране…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Копиране на адреса"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Копиране в буфера на адреса на връзката към този файл"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Предишна версия"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Копие в тази папка на по-ранна версия"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Изберете за копие на версията"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Относно SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Заслуги"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Към уеб сайта"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "добавен е „{0}“"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "редактиран е „{0}“"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "изтрит е „{0}“"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Трябва да попълните някои данни за себе си, преди да се създаде папка на "
+"компютъра, ползваща SparkleShare."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Лично име:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Е-поща:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Нататък"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Настройване…"
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Къде е отдалечената папка?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "адрес.на.сървъра.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "На основния сървър:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Безплатен хостинг за свободни проекти и такива с отворен код."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr "За непублично пространство и допълнителни ресурси се плаща."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "Проектът GNOME"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME е разбираем интерфейс за компютъра ви."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr "Ако работите по GNOME, изберете тази версия."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Свободен като инфраструктурата на свободата."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Безплатно за свободни проекти и такива с отворен код."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Потребител/Папка"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Проект/Папка"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Проект"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Папка"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Име на папка:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Синхронизиране"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Отказване"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Прескачане"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Поканата е приета!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Получихте покана за споделена папка. Ако искате,\n"
+"можете да я приемете, за да започне синхронизирането."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Приемате ли поканата?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Адрес на сървър:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Отхвърляне"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Приемане и синхронизиране"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Получи се грешка…"
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Опитайте отново"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Папката е успешно синхронизирана!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Можете да достъпите синхронизираните файлове от „{0}“ в папката ви за "
+"SparkleShare."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Отваряне на папката"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Завършване"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Синхронизиране на папка „{0}“…"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Това може да отнеме малко време.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Не е ли време за кафенце?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare е готов!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Можете да приемате покани от други хора. \n"
+"Когато ги получите по е-пощата, просто натиснете върху връзката. SparkleShare се грижи за останалото."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Научете как да създадете свой сървър за SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Събития в „{0}“"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Отваряне на папка"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "С настоящите права не може да стартирате SparkleShare."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Нещата могат изцяло да се объркат."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Без икона в областта за уведомяване"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Извеждане на информация за версията"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Показване на този помощен текст"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Авторски права: © 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Тази програма идва БЕЗ НИКАКВИ ГАРАНЦИИ."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr ""
+"Това е свободен софтуер, можете да го разпространявате при определени "
+"условия."
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "За повече информация вижте Общия публичен лиценз на GNU, версия 3."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare автоматично синхронизира хранилища на Git"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "в папката ~/SparkleShare с отдалечените им източници."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Употреба: sparkleshare [start|stop|restart] [ОПЦИЯ]…"
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr ""
+"Синхронизиране на папката ви за SparkleShare с отдалечените източници."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Аргументи:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare "
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Все още няма отдалечени папки"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Добавяне на отдалечена папка…"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Изключване на уведомяванията"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Включване на уведомленията"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Спиране на програмата"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Опс, конфликт на версии!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr "Без паника! SparkleShare е създал копие на всеки файл в конфликт."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..84e319c
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,435 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# Carles Mateu <carlesm@carlesm.com>, 2011
+# alexandresaiz <a@alexandresaiz.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Benvinguts a SparkleShare"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "No està tot sincronitzat"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Al dia"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Sincronitzant ..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Copiar adreça web"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Copia l'adreça web d'aquest fitxer al portapapers"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Obtenir versió anterior"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Fer una còpia d'una versió anterior d'aquesta carpeta"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Selecciona per obtenir una còpia d'aquesta versió"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Visitar lloc web"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "afegit '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "editat '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "eliminat '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Abans de crear una carpeta de SparkleShare en aquest ordinador, necessitem "
+"algunes informacions sobre tu"
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Nom sencer:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Correu electrònic:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Següent"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Configurant..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "On és la teva carpeta remota?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "adreça-del-servidor.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "En el meu propi servidor:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Allotjament gratuït per a projectes de programari lliure."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr "També te comptes de pagament per espai i ample de banda addicional."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "El projecte GNOME"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME és una interfície fàcil d'usar i aprendre pel teu ordinador."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Escull aquesta opció si ets un desenvolupador o dissenyador treballant a "
+"GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Infrastructura totalment lliure, com en llibertat."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Comptes gratuïts per a projectes lliures i de codi obert."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Usuari/Carpeta"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projecte/Carpeta"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projecte"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Carpeta"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Nom de Carpeta:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Sincronitza"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Salta"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Invitació rebuda!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Has rebut una invitació per compartir una carpeta. Estem preparats per "
+"connectar-t'hi immediatament si així ho vols."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Acceptes aquesta invitació?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Adreça del servidor:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Rebutjar"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Acceptar i sincronitzar"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Alguna cosa ha fallat..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Torna-ho a provar"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Carpeta sincronitzada amb èxit!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Ja pots accedir els fitxers sincronitzas de ‘{0}’ a la teva carpeta de "
+"SparkleShare."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Obrir Carpeta"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Finalitzar"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Sincronitzant carpeta '{0}' ..."
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr ""
+"Això pot trigar una estona.\n"
+"\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare està llest!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Ara pots començar a acceptar invitacions d'altres usuaris. Només cal que "
+"facis clic a les invitacions que rebràs per correu electrònic i nosaltres "
+"ens encarreguem de la resta."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Apren com gestionar el teu propi servidor SparkleShare"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Obrir Carpeta"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Ho sentim, no pots executar SparkleShare amb aquests permisos."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Les coses anirien molt malament."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "No mostrar la icona de notificació"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Imprimir la informació de versió"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Mostra aquest text d'ajuda"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Aquest programa ve sense, absolutament, cap garantia."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Aquest és programari lliure, i estas convidat a redistribuir-lo"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+"sota certes condicions. Si us plau, llegeix la GNU GPLv3 per obtenir més "
+"detalls."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare sincronitza automàticament repositoris Git a"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "carpeta ~ / SparkleShare amb els seus orígens remots."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Ús: sparkleshare [start|stop|restart] [OPCIÓ] ..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Sincronitza carpeta SparkleShare amb repositoris remots."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Arguments:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "No hi ha carpetes remotes encara"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Sortir"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Ai! Col·lisió en ple vol!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"No et preocupis, SparkleShare ha fet una còpia de cada fitxer en conflicte."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
new file mode 100644
index 0000000..01ba989
--- /dev/null
+++ b/po/cs_CZ.po
@@ -0,0 +1,432 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# zzanzare <zzanzare@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs_CZ\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Vítejte ve SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Něco není synchronizováno"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Aktuální"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Synchronizuji…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Zkopírovat odkaz"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Zkopírovat webovou adresu tohoto souboru do schránky"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Získat dřívější verzi"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Vytvořit kopii dřívější verze souboru v tomto adresáři"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Vyberte pro získání kopie této verze"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "O SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Zásluhy"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Navštívit domovskou stránku"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ddd d. MMM, yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ddd d. MMM"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "přidal(a) ‘{0}’"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "upravil(a) ‘{0}’"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "smazal(a) ‘{0}’"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Než vytvoříme SparkeShare složku v tomto počítači, potřebujeme od Vás pár "
+"drobných informací."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Celé jméno:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Email:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Další"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Nastavuji…"
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Kde je vaše vzdálená složka?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "adresa-k-serveru.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "Na mém vlastním serveru:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Hosting zdarma pro Free a Open Source softwarové projekty."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Nabízí také placené účty pro extra soukromý prostor a rychlost připojení."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "Projekt GNOME"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME je jednoduše pochopitelné rozhraní pro váš počítač."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Vyberte tuto možnost, pokud jste vývojář nebo designer pracujíci na GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Zcela svobodný, jako ve výrazu svobodná infrastruktura."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Účty zdarma pro Free a Open Source projekty."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Uživatel/Složka"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projekt/Složka"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projekt"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Složka"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Název složky:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synchronizovat"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Přeskočit"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Obdržená pozvánka!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Přišla vám pozvánka ke sdílené složce.\n"
+"Můžeme vás rovnou zapojit, jestli chcete."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Přijímáte tuto pozvánku?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Adresa serveru?"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Odmítnout"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Přijmout a synchronizovat"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Něco se pokazilo..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Zkusit znova"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "'{0}' byl úspěšně přidán"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Složka úspěšně synchronizována!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Nyní můžete přistoupit k synchronizovaným souborům z ‘{0}’ ve své složce "
+"SparkeShare."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Otevřít složku"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Dokončit"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Synchronizuji složku ‘{0}’…"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Toto může chvíli trvat.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Jste si jistí, že není čas na kafe?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare je připraven vyrazit!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Nyní můžete začít přijímat pozvánky od ostatních. \n"
+"Stačí kliknout na pozvánky, které získáte emailem, a o zbytek se už postaráme."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Zjistěte jak připravit svůj vlastní SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Události v ‘{0}’"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Otevřít složku"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+"Je nám líto, ale nemůžete spouštět SparkleShare s těmito přístupovými právy."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Věci by se mohly příšerně pokazit."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Nezobrazovat oznamovací ikonu"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Vypíše informace o verzi"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Zobrazit tuto nápovědu"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Všechna práva vyhrazena (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Tento program je ABSOLUTNĚ BEZ ZÁRUKY."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Toto je svobodný software a můžete jej dále šířit."
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+"za jistých podmínek. Prosím, přečtěte si GNU GPLv3 pro více informací."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare automaticky synchronizuje repozitáře Git v "
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "složce ~/SparkleShare s jejich vzdálenými protistranami."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Použití: sparkleshare [start|stop|restart] [VOLBY]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Synchronizovat složku SparkleShare se vzdálenými repozitáři."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Argumenty:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare "
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Žádné vzdálené složky"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Přidat vzdálenou složku…"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Vypnout upozornění"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Zapnout upozornění"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Ukončit"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Au! Nehoda na cestě!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Nemějte strach, SparkleShare udělal kopie každého konfliktního souboru."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..85089ec
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,429 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# Aputsiaq Janussen <aputtu@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Velkommen til SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Ikke alt er synkroniseret"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Opdateret"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Synkroniseret"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Kopiér web-henvisning"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Kopiér web-adressen for denne til fil udklipsholder"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Hent tidligere versioner"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Lav en kopi af en tidligere version i denne mappe"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Vælg for at hente en kopi af denne version"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Besøg hjemmeside"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "tilføjede '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "redigerede '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "slettede '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Før vi kan oprette en SparkleShare-mappe på denne maskine, så har vi brug "
+"for nogle få informationer fra dig."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Fuldt navn:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "E-post:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Næste"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Konfigurerer..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Hvor er din fjernmappe?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "server-adresse.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "På min egen server:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Fri hosting for Fri og Open Source Software-projekter."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr "Har også betalingskonti for ekstra privat plads og båndbredde."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "GNOME-projektet"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME er en letforståelig grænseflade til din computer."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Vælg denne option hvis du er en udvikler eller designer som laver arbejde "
+"for GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Fuldstændig »fri som i frihed«-infrastruktur"
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Frie konti for Fri og Open Source Software"
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Brugernavn/Mappe"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projekt/Mappe"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projekt"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Mappe"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Mappenavn:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synkronisering"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Afbryd"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Spring over"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Invitation modtaget!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Du er inviteret til at få adgang til en delt mappe.\n"
+"Vi er klar til straks at koble dig op, hvis du ønsker."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Accepterer du denne invitation?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Server-adresse:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Afslå"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Acceptér og synkroniser"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Der opstod en fejl..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Forsøg igen"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Mappe succesfuldt synkroniseret!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Nu kan du tilgå de synkroniserede filer fra '{0}' i din SparkleShare-mappe."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Åbn mappe"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Afslut"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Synkroniserer mappe '{0}'..."
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Dette kan tage et stykke tid.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare er klar til start!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Nu har du mulighed for at acceptere invitationer fra andre.\n"
+"Klik blot på invitationer du modtager per e-post, og vi sørger for resten."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Lær hvordan du beværte din egen SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Åbn mappe"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Beklager, du kan ikke køre SparkleShare med disse rettigheder."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Det ville gå helt galt."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Vis ikke besked-ikon."
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Vis versioninformation"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Vis denne hjælpetekst"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright(C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Dette program modtages UDEN NOGEN GARANTIER OVERHOVEDET."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Dette er fri software, og du er velkommen til at distribuere den "
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "under visse betingelser. Læs venligst GNU GPL v3 for detaljer."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare synkroniserer automatisk Git-depoter i "
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "mappen ~/SparkleShare med deres fjerne kilder."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Anvendelse: sparkleshare [start|stop|restart] [OPTION]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Synkroniser SparkleShare-mappe med fjerndepot"
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Argumenter:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare "
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Endnu ingen fjernemapper"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Afslut"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Av! Luftkollision!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Bare rolig, SparkleShare kopierede alle filer der gav anledning til "
+"konflikt."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..92d0590
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,439 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# kabum <uu.kabum@gmail.com>, 2011
+# kxnop <m_leinmueller@hotmail.com>, 2011
+# Heffer <felix@fetzig.org>, 2011
+# Łukasz Jernaś <deejay1@srem.org>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Willkommen bei SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Nicht alles ist synchronisiert"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Schon auf dem aktuellsten Stand."
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Abgleichen …"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Kopiere Internetverknüpfung"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Die Internetadresse dieser Datei in die Zwischenablage kopieren"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Frühere Version abrufen"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Erstelle eine Kopie einer früheren Version in diesem Verzeichnis"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Selektieren, um eine Kopie dieser Version abzurufen"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Über SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Zeige Mitwirkende"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Website besuchen"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ddd MMM d, yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ddd MMM d"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "‘{0}’ hinzugefügt"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "‘{0}’ bearbeitet"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "‘{0}’ gelöscht"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Bevor wir einen SparkleShare-Ordner auf diesem Computer einrichten können, "
+"benötigen wir ein paar Informationen von Ihnen."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Vollständiger Name:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "E-Mail:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Weiter"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Konfiguriere..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "In welchem Pfad liegt ihr Remote-Verzeichnis?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "server-adresse.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "Auf meinem eigenen Server"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Kostenloses Hosting für Freie und Open Source Software Projekte."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Weiter gibt es kostenpflichtige Accounts für zusätzlichen privaten "
+"Speicherplatz und Bandbreite."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "Das GNOME Project"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME ist ein einfach verständliches Interface zu Ihrem Computer"
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Wählen Sie diese Option, wenn sie Entwickler oder Designer sind, der mit "
+"GNOME arbeitet."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Vollkommen frei wie in »Infrastruktur der Freiheit«."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Gratis Accounts für Freie und Open Source Projekte."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Benutzername/Ordner"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projekt/Ordner"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projekt"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Ordner"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Verzeichnisname:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synchronisation"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Überspringen"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Einladung erhalten!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Sie haben eine Einladung zu einem freigegebenen Verzeichnis erhalten. \n"
+"Wir sind bereit die Verbindung direkt herzustellen, wenn Sie das wünschen."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Nehmen Sie die Einladung an?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Serveradresse:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Ablehnen"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Akzeptieren und Synchronisieren"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Ein Fehler ist aufgetreten..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Erneut versuchen"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "»{0}« wurde erfolgreich hinzugefügt"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Verzeichnis erfolgreich synchronisiert."
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Jetzt können Sie auf die von '{0}' synchronisierten Dateien in Ihrem "
+"SparkleShare Ordner zugreifen."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Ordner öffnen"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Fertigstellen"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Ordner »{0}« wird synchronisiert"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Dies kann eine Weile dauern.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Meinst Du nicht, dass es Kaffeezeit ist?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare ist bereit zum Loslegen!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Sie können nun Einladungen annehmen. Klicken Sie einfach auf Einladungen, "
+"die Sie per E-Mail erhalten und wir kümmern uns um den Rest."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Lernen Sie, wie Sie Ihren eigenen SparkleServer betreiben können"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Ereignisse in ‘{0}’"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Ordner öffnen"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+"Entschuldigung, SparkleShare kann mit diesen Rechten nicht ausgeführt "
+"werden."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Alles würde völlig schief gehen."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Benachrichtigungssymbol nicht anzeigen."
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Versionsinformationen anzeigen"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Diesen Hilfetext anzeigen"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Diese Anwendung kommt OHNE IRGENDEINE GARANTIE."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Dies ist freie Software, die Sie gerne weitergeben dürfen"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+"unter bestimmten Bedingungen. Bitte lesen Sie die GNU GPLv3 für weitere "
+"Details."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare synchronisiert sich automatisch mit Git Repositories"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "den SparkleShare-Ordner mit den entfernten Quellen."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Verwendung: sparkleshare [start|stop|restart] [OPTION]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "SparkleShare Ordner mit dem Remote-Repository synchronisieren."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Parameter:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Es gibt noch keine Remote-Ordner"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Remote-Ordner hinzufügen..."
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Benachrichtigungen deaktivieren"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Benachrichtigungen aktivieren"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Beenden"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Autsch! Kollision in der Luft!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Keine Sorge, SparkleShare hat eine Kopie jeder im Konflikt stehenden Datei "
+"angelegt."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..8a7c1df
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,417 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr ""
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr ""
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Τα πράγματα θα πάνε πολύ άσχημα."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr ""
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr ""
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr ""
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000..a80f418
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,418 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# eliovir <eliovir@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Bonvenon ĉe SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Kopii retejan ligilon"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Kopii la retejan adreson de tiu dosiero en la tondejon"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Akiri pli fruan version"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Elekti por akiri kopion de tiu versio"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Viziti retejon"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Nomo:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Retadreso:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Sekva"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Agordado..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "La GNOME-projekto"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Senpagaj kontoj por malfermitkoda projektoj."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Uzantnomo/Dosierujo"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projekto/Dosierujo"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projekto"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Dosierujo"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Nomo de la dosierujo"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Rezigni"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Preterpasi"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Ĉu vi akceptis la inviton?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Serva adreso:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Malakcepti"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Akcepti kaj sinkronigi"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Provi denove"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Malfermi dosierujon"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare pretas por eki!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr ""
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "Malfermi d_osieron"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr ""
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr ""
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr ""
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..3e40476
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,435 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# <jamelrom@gmail.com>, 2011
+# <luiso.perez@gmail.com>, 2011
+# jamelrom <jamelrom@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-31 17:40+0000\n"
+"Last-Translator: jamelrom <jamelrom@gmail.com>\n"
+"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/sparkleshare/team/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "¡Bienvenido a SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Pendiente de sincronizar"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Actualizado"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Sincronizando..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Copiar Enlace"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Copiar la dirección web de este archivo al portapapeles"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Obtener versión anterior"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Hacer una copia de una versión anterior en esta carpeta"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Seleccionar para obtener una copia de esta versión"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Acerca de SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr "Una nueva versión esta disponible"
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr "Estas ejecutando la última versión"
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr "Comprobando actualizaciones..."
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Autores"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Visitar Página Web"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "d. ddd MMMM yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "d. ddd MMM"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "añadido '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr "movido '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "editado '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "eliminado '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] "y {0} más"
+msgstr[1] "y {0} más"
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr "algo mágico ocurrió"
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Antes de que podamos crear una carpeta de SparkleShare en este equipo, "
+"necesitamos un poco de información de usted."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Nombre completo:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Correo electrónico:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Siguiente"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Configurando…"
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "¿Dónde está su carpeta remota?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "dirección-del-servidor.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "En mi propio servidor:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr ""
+"Alojamiento gratuito para proyectos de Software Libre y Código Abierto."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"También tiene cuentas de pago para tener más espacio y ancho de banda "
+"privado."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "El Proyecto GNOME"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME es una interfaz para su equipo fácil de entender."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Seleccione esta opción si usted es un desarrollador o diseñador trabajando "
+"en GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Completamente Libre como en la infraestructura de la Libertad."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Cuentas gratis para proyectos Libres y de Código Abierto."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Usuario/Carpeta"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Proyecto/carpeta"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Proyecto"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Carpeta"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Nombre de la carpeta:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Sincronizar"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Saltar"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "¡Invitación recibida!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Usted ha recibido una invitación a unirse a una carpeta compartida.\n"
+"Estamos listos para unirte en cuanto lo desees."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "¿Acepta esta invitación?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Dirección del servidor:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Rechazar"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Aceptar y Sincronizar"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Algo salió mal..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Intentar de nuevo"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "'{0}' Ha sido añadido correctamente"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "¡Carpeta sincronizada con exito!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Ahora puedes acceder a los archivos sincronizados desde '{0}' en tu carpeta "
+"de SparkleShare."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Abrir carpeta"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Finalizar"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Sincronizando carpeta ‘{0}’…"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Esto puede tardar un rato.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "¿Seguro que no es la hora del café?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "¡SparkleShare esta listo para usar!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Ahora puede empezar a aceptar invitaciones de otros.\n"
+"Solo haga click en las invitaciones que reciba por correo electrónico y nosotros encargaremos del resto."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Aprenda como hospedar su propio SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Eventos en '{0}'"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Abrir Carpeta"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Perdón, no puede ejecutar SparkleShare con estos permisos."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Las cosas irían absolutamente mal."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "No mostrar el icono de notificaciones"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Muestra la información de la versión"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Mostrar este texto de ayuda"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr "SparkleShare, una herramienta de compartición y colaboración"
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Este programa viene SIN NINGUNA GARANTÍA."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Esto es software libre, y esta invitado a redistribuirlo"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+"bajo determinadas condiciones. Por favor lea la GNU GPLv3 para más detalles."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare sincroniza automaticamente repositorios Git en "
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "La carpeta ~/SparkleShare con su origen remoto."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Uso: sparkleshare [start|stop|restart] [OPCION]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Sincronizar carpeta SparkleShare con el repositorio remoto."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Parámetros:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Todavía no hay carpetas compartidas"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Añadir carpeta remota..."
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Desactivar las notificaciones"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Activar las notificaciones"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Salir"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "¡Ohh! ¡Hay una colisión!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"No se preocupe, SparkleShare hace una copia de cada archivo en conflicto."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr "Configuración de SparkleShare"
+
+
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..4c4f6b9
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,429 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# <joppu1@gmail.com>, 2011
+# Olli Jarva <olli@jarva.fi>, 2011
+# Łukasz Jernaś <deejay1@srem.org>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-06-01 19:14+0000\n"
+"Last-Translator: joppu <joppu1@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Tervetuloa SparkleShareen!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Kaikkea ei ole synkronoitu"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Ajantasalla"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Synkronoidaan..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Kopioi web-linkki"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Kopioi tämän tiedoston osoite leikepöydälle"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Hae vanhempi versio"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Tee kopio tämän hakemiston aikaisemmasta versiosta"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Tee kopio tästä versiosta"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Tietoja SparkleSharesta"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr "Uudempi versio on saatavissa"
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr "Sinulla on uusin versio käytössäsi"
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr "Tarkistetaan päivityksiä..."
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Näytä osallistujat"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Käy nettisivulla"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ppp kkk d, vvvv"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ppp kkk d"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "lisätty '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr "siirrettiin '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "muokattu '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "poistettu '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr "teki jotain maagista"
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Ennen kuin voit luoda SparkleShare-kansio tälle tietokoneelle, tarvitsemme "
+"joitain tietoja sinusta."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Koko nimi:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Sähköposti:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Seuraava"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Säädetään..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Missä etähakemisto on?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "palvelimen-osoite.fi"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "Omalle palvelimelleni:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Ilmainen palvelintila vapaan lähdekoodin projekteille."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Myös maksullisia tilejä ylimääräisellä tilalla ja nopeammalla yhteydellä."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "GNOME-projekti"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME on helppokäyttöinen käyttöliittymä tietokoneellesi."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr "Valitse tämä, jos olet kehittäjä tai suunnittelija GNOME-projektissa."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Täysin vapaa infrastruktuuri."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Ilmainen tili vapaan lähdekoodin projekteille."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Käyttäjätunnus/hakemisto"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projekti/hakemisto"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projekt"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Hakemisto"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Hakemiston nimi:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synkronoi"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Peruuta"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Ohita"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Kutsu vastaanotettu!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Olet saanut kutsun liittyä jaettuun kansioon.\n"
+"Olemme valmiita liittämään sinut välittömästi, jos haluat."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Hyväksytkö tämän kutsun?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Palvelimen osoite:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Hylkää"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Hyväksy ja synkronoi"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Jotain meni pieleen..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Yritä uudelleen"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "'{0}' lisättiin onnistuneesti"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Hakemistojen synkronointi onnistui!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr "Voit käyttää '{0}' synkronoituja tiedostoja SparkleShare-kansiossasi."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Avaa hakemisto"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Valmis"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Synkronoidaan hakemistoa '{0}'..."
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Tämä voi kestää hetken.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Oletko varma, että ei ole kahvitauon paikka?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare on valmis toimimaan!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Nyt voit ottaa vastaan kutsuja muilta.\n"
+"Paina kutsua jonka sait sähköpostilla, ja hoidamme loput."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Selvitä, kuinka voit pitää omaa SparkleServer-palvelinta"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Tapahtumia '{0}'"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Avaa kansio"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Et voi ajaa SparkleSharea näillä oikeuksilla."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Asiat menevät paljon pieleen."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Älä näytä huomautusikonia"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Tulosta versiotiedot"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Näytä tämä ohjeteksti"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr "SparkleShare, yhteistyö- ja jakotyökalu."
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Tällä ohjelmalla EI OLE TAKUUTA."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Tämä on vapaa ohjelma, ja saat vapaasti levittää sitä"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "tietyin ehdoin. Saat lisätietoja GNU GPLv3:sta."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare synkronoi automaattisesti Git-tietokannat"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "~/SparkleShare-kansiosta etäpalvelinten kanssa."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Käyttö: sparkleshare [start|stop|restart] [asetukset]"
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Synkronoi SparkleShare-kansio etätietokantoihin."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Parametrit:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Ei etäkansioita"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Lisää etähakemisto..."
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Poista ilmoitukset käytöstä"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Ota ilmoitukset käyttöön"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Lopeta"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Auts! Törmäys!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Ei huolta, SparkleShare teki kopion kaikista tiedostoista, joissa on "
+"konflikti."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr "SparkleSharen asennus"
+
+
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..e7aeb59
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,442 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# Bruno ARLIGUY <from-transifex@arliguy.net>, 2011
+# Crash <quentin.valmori@gmail.com>, 2011
+# Yann Yann <chezyann@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-29 20:33+0000\n"
+"Last-Translator: barliguy <from-transifex@arliguy.net>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Bienvenue sur SparkleShare !"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Tout n'est pas synchronisé"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "À jour"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Synchronisation en cours…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Copier le lien web"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Copie l'adresse internet de ce fichier dans le presse‑papier"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Obtenir une version antérieure"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Créer une copie d'une version antérieure de ce dossier"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Sélectionner pour obtenir une copie de cette version"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "À propos de SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr "Une nouvelle version est disponible"
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr "Vous disposez de la dernière version."
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr "Vérification des mises à jour…"
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Afficher les crédits"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Visiter le site web"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ddd d MMM yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ddd d MMM"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "Ajouté : « {0} »"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr "Déplacé : « {0} »"
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "Edité : « {0} »"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "Supprimé : « {0} »"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] "et {0} de plus"
+msgstr[1] "et {0} de plus"
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr "quelque chose de magique s'est passé"
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Afin de pouvoir créer un dossier SparkleShare sur cet ordinateur, nous avons"
+" besoin de quelques informations."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Nom et prénom :"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Email :"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Suivant"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Configuration en cours…"
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Où se trouve votre dossier distant ?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "adresse-du-serveur.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "Sur mon serveur :"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr ""
+"Hébergement gratuit pour les projets de logiciels Open Source et gratuits."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Dispose aussi de comptes payants pour plus d'espace privé et de bande "
+"passante."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "Le projet GNOME"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr ""
+"GNOME est une interface graphique simple à utiliser pour votre ordinateur."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Choisissez cette option si vous êtes un développeur ou concepteur "
+"travaillant sous GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Infrastructure entièrement libre."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Comptes gratuits pour les projets Open Source et gratuits."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Nom d'utilisateur/Dossier"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projet/Dossier"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projet"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Dossier"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Nom de dossier :"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synchroniser"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Annuler"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Passer"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Invitation reçue !"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Vous avez reçu une invitation à rejoindre un dossier partagé.\n"
+"Nous sommes prêt à vous connecter si vous le souhaitez."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Acceptez vous cette invitation ?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Adresse du serveur :"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Rejeter"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Accepter et synchronisez"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Quelque chose s'est mal passé…"
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Réessayer"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "« {0} » a été ajouté avec succès"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Le dossier a été synchronisé avec succès !"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Vous pouvez à présent accéder aux fichiers synchronisés sur « {0} » depuis "
+"votre dossier SparkleShare."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Ouvrir le dossier"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Terminer"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Synchronise le dossier « {0} » …"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr ""
+"Cette opération peut durer un moment.\n"
+"\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Ne pensez-vous pas qu'il serait l'heure de prendre un café ?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare est opérationnel !"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Vous pouvez désormais accepter des invitations. \n"
+"Pour cela, il vous suffira de cliquer sur les invitations que vous aurez reçues par mail et nous nous occuperons du reste."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Apprendre à héberger son propre serveur SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Événements liés à « {0} »"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Ouvrir le dossier"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+"Désolé, vous ne disposez pas des autorisations nécessaires pour lancer "
+"SparkleShare."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Les choses pourraient très mal tourner."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Masquer l’icône de notification"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Affiche les informations de la version"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Afficher ce texte d’aide"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr "SparkleShare, outils de collaboration et de partage"
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Ce logiciel est diffusé sans AUCUNE GARANTIE."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Ce logiciel est libre et vous êtes invité à le re‑distribuer "
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+"sous certaines conditions. Merci de lire la licence GNU GPLv3 pour de plus "
+"amples informations."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare synchronise automatiquement les dépôts Git dans "
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "le dossier ~/SparkleShare avec leurs racines distantes."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Utilisation : sparkleshare [start|stop|restart] [OPTION]…"
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Synchroniser le dossier SparkleShare avec les dépôts distants."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Paramètres  :"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare "
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Encore aucun dossier distant"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Ajouter un dossier distant…"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Désactiver les notifications"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Activer les notifications"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Quitter"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Outch ! Collision en plein ciel !"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Ne vous inquiétez pas, SparkleShare a effectué une copie de chacun des "
+"fichiers en conflit."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr "Configuration de SparkleShare"
+
+
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..715ad47
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,420 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "ברוכים הבאים לספארקלשר!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "לא הכל מסונכרן"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "מעודכן"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "מסנכרן..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "העתק לינק"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "העתק את כתובת האינטרנט של קובץ זה ללוח העריכה (clipboard)"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "קבל גרסה קודמת"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "צור העתק של גרסה קודמת בתקייה זו"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "בחר כדי לקבל העתק של גרסה זו"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_בקר באתר"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "הוסף ‘{0}’"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "נערך ‘{0}’"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "נמחק ‘{0}’"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"לפני שנוכל ליצור תקיית ספארקלשר על מחשב זה, אנו צריכים כמה פיסות מידע ממך."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "שם מלא:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "דוא\"ל"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "הבא"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "קובע הגדרות..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "היכן נמצאת תקייתך המרוחקת?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "כתובת-שרת.קום"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "על השרת שלי:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "שירותי אחסון חינמיים לפרוייקטי קוד פתוח חופשיים."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr "מציעים גם חשבונות בתשלום עם מקום אחסון אישי ותעבורה גדולים."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "פרוייקט גנום"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "פרוייקט גנום הינו ממשק קל ונוח למחשבך"
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr "בחר באפשרות זו אם אתה מתכנת או מעצב העובד על פרוייקט גנום."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "גיטוריוס"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "חופשי לגמרי כבתשתית חופשית."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "חשבונות חינמיים לפרוייקטי קוד חופשי ופתוח."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "שם משתמש\\תקייה"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "פרוייקט\\תקייה"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "פרוייקט"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "תקייה"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "שם תקייה:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "סנכרן"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "בטל"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "דלג"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "ההזמנה התקבלה!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"קיבלת הזמנה להצטרף תקייה משותפת.\n"
+"אנו מוכנים לחבר אותך ברגע זה אם תרצה."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "האם אתה מקבל את ההזמנה הזו?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "כתובת שרת:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "דחה"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "אשר וסנכרן"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "משהו לא הלך כשורה..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "נסה שוב"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "התקייה סונכרנה בהצלחה!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr "אפשר כעת לגשת לקבצים שסונכרנו מ-‘{0}’ בתיקיית ספארקלשר שלך."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "פתח תקייה"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "סיים"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "מסנכרן תיקייה ‘{0}’..."
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "דבר זה יכול לקחת זמן.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "ספארקלשר מוכן!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr "הנך יכול עתה לקבל הזמנות מאחרים.פשוט לחץ על הזמנות שאתה מקבל."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "למד איך להקים שרת אכסון, ספארקלסרבר (SparkleServer), של ספארקלשר משלך"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_פתח תקייה"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "מצטערים, אך אינך יכול להריץ ספארקלשר עם ההרשאות האלה."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "דברים בלתי תקינים עשויים לקרות."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "אל תראה את סמל ההתרעה"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "מידע גרסת ההדפסה"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "הראה את מלל העזרה"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "זכויות שמורות (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "תוכנה זו באה ללא כל אחריות."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "תוכנה זו הינה חופשית ואתם מוזמנים להפיצה"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "תחת תנאים מסויימים. אנא קראו את רשיון GNU GPLv3 לקבלת פרטים."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "שימוש: sparkleshare [start|stop|restart] [אפשרויות]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "סנכרן תקיית ספארקלשר עם מאגרים מרוחקים."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "ארגומנטים:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "ספארקלשר"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "עדיין אין תיקיות מרוחקות"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "צא"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "איה! התנגשות באמצע ההעברה!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr "אל דאגה, ספארקלשר יצר העתק של כל אחד מהקבצים הסותרים (השונים)"
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..5169d54
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,434 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# Ilias Bartolini <ilias.bartolini@gmail.com>, 2011
+# Łukasz Jernaś <deejay1@srem.org>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Benvenuto in SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Non tutto è sincronizzato"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Aggiornato"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Sincronizzazione in corso..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Copia Indirizzo Web"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Copia l'indirizzo web di questo file negli appunti"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Prendi versione precedente"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Esegui una copia di una precedente versione di questa cartella"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Seleziona per ottenere una copia di questa versione"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Informazioni su SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Mostra Crediti"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Visita il sito web"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ddd MMM d, yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ddd MMM d"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "aggiunti '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "modificati '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "eliminati '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Prima di poter creare una cartella SparkleShare in questo computer, abbiamo "
+"bisogno di qualche informazione da voi."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Nome e Cognome:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Email:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Successivo"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Configurazione in corso..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Dove si trova la tua cartella remota?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "indirizzo-del-server.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "In un mio server personale:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Hosting gratuito per progetti di Software Libero ed Open Source:"
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Ha anche account a pagamento per una maggiore larghezza di banda e spazio "
+"privato."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "The GNOME Project"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME è una facile interfaccia al tuo computer."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Selezionare questa opzione se sei uno sviluppatore o progettista che sta "
+"lavorando su GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorius"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Completamente Libero, come nelle infrastrutture Libere"
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Account gratuiti per Software libero e progetti Open Source."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Username/Cartella"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Progetto/Cartella"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Progetto"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Cartella"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Nome Cartella:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Sincronizza"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Cancella"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Salta"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Invito ricevuto!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Hai ricevuto un invito a partecipare a una cartella condivisa. \n"
+" Siamo pronti ad agganciarti subito, se lo desideri"
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Vuoi accettare questo invito?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Indirizzo Server:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Respingi"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Accetta e Sincronizza"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Si è verificato un errore..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Prova Ancora"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "‘{0}’ è stato aggiunto con successo"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Cartella sincronizzata con successo!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Ora puoi accedere ai file sincronizzati da ‘{0}’ nella tua cartella "
+"SparkleShare."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Apri cartella"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Finito"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Sincronizzo cartella '{0}' ..."
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Potrebbe impiegare un po' di tempo\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Sei sicuro che non sia l'ora di un caffè?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare è pronto!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Ora si può iniziare ad accettare inviti da altri. \n"
+"Basta cliccare sugli inviti ottenuti via email e noi ci occuperemo del resto."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Impara come installare il tuo SparkleServer personale"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Eventi in '{0}'"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Apri Cartella"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Spiacente, non è possibile eseguire SparkleShare con questi permessi."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Le cose potrebbero andare estremamente male."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Non mostrare l'icona di notifica"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Stampa informazioni sulla versione"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Mostra questo messaggio di aiuto"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Questo programma viene fornito ASSOLUTAMENTE SENZA NESSUNA GARANZIA."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Questo è software libero e sei invitato a redistribuirlo"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+"rispettando alcune restrizioni. Leggi la licenza GNU GPLv3 per i dettagli"
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare sincronizza automaticamente i repository Git nella"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "cartella ~/.SparkleShare con le loro origini."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Utilizzo: sparkleshare [start|stop|restart] [OPTION]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Sincronizza cartella SparkleShare con repository remoti."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Argomenti"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare "
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Nessuna Cartella Remota"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Aggiungi Cartella Remota..."
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Spegni le notifiche"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Accendi le notifiche"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Esci"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Ahi! Una collisione in volo!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Non ti preoccupare, SparkleShare ha eseguito una copia di ogni file in "
+"conflitto."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..7478496
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,422 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# <masa@takatsuka.org>, 2011
+# <matsuu@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-06-04 00:29+0000\n"
+"Last-Translator: masa <masa@takatsuka.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "SparkleShareへようこそ!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "すべてが同期されていません"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "最新の状態です。"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "同期中..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "ウェブリンクのコピー"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "このファイルのウェブアドレスをクリップボードにコピー"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "新しいバージョンの取得"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "このフォルダに古いヴァージョンのコピーを作成"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "このヴァージョンを選択し、コピー"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "SparkleShareについて"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr "新しいバージョンがあります"
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr "最新のバージョンです。"
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr "更新の確認中..."
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "クレジットを表示する(_S)"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "Webサイトにアクセスする(_V)"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ddd MMM d, yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ddd MMM d"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "'{0}'を追加しました"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr "'{0}'を移動しました"
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "'{0}'を編集しました"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "'{0}'を削除しました"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] "、{0}詳細"
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr "何か摩訶不思議なことをしました"
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr "SparkleShareのフォルダをこのコンピュータ上に作成する前に、少しですがお知らせがあります。"
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "氏名:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "電子メール:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "次"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "設定中..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "リモート・フォルダの場所はどこですか?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "サーバのアドレス.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "個人のサーバ:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "フリーでオープンソースのソフトウェアプロジェクトのための無料ホスティング。"
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr "また、プライベートなストレージ領域の増量や高速通信のための有用アカウントもあります。"
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "GNOMEプロジェクト"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOMEはあなたのコンピュータ使いやすくする環境です。"
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr "もしあなたが、GNOMEの開発/デザインに関わっているなら、このオプションを選択。"
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "自由なインフラストラクチャとして完全無料。"
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "無料でオープンソースなプロジェクトのための無料アカウント"
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "ユーザー名/フォルダ"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "プロジェクト/フォルダ"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "プロジェクト"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "フォルダ"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "フォルダ名:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "同期"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "スキップ"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "招待状が届きました!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"共有フォルダへのアクセスの招待状が届きました。\n"
+"すぐにアクセスする設置をする準備が整っています。"
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "この招待状を受諾しますか?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "サーバアドレス:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "拒否"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "受諾して同期する"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "何らかの不具合の発生..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "再トライ"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "'{0}'は正常に追加されました"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "フォルダが正常に同期されました!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr "これで、SparkleShareフォルダ'{0}'から同期されたファイルが使用可能です。"
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "フォルダを開く"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "完了"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "フォルダ'{0}'の同期中..."
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "しばらくお待ちください。\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "コーヒー時ではありませんか?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShareは準備完了です!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"他の人から招待を受ける準備が整いました。\n"
+"あなたは、電子メールで受け取った招待状をクリックするだけです。後は私たちにお任せください。"
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "個人でSparkleServerを立ち上げる方法"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "'{0}'のイベント"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "フォルダを開く(_O)"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "申し訳ありませんが、SparkleShareを実行する権限がありません。パーミッションの設定を見直してください。"
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "全く予期しないことになるかもしれません。"
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "通知アイコンを表示しない"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "バージョン情報の表示"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "このヘルプテキストを表示"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr "SparkleShare、コラボレーションと共有のためのツールです。"
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C)2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "このプログラムは完全無保証です。"
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "これはフリーソフトウェアであり、再配布を歓迎します。"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "一定の条件の下で。詳細については、GNUのGPLv3をお読みください。"
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShareは自動的に..のGitリポジトリと同期します"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "リモートの元フォルダを含んだ~/SparkleShareフォルダ"
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "使用法: sparkleshare [start|stop|restart] [オプション]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "SparkleShareフォルダをリモートのリポジトリと同期。"
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "引数:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "リモートフォルダまだ作成されていません。"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "リモートフォルダの追加..."
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "通知をオフ"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "通知をオン"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "終了"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "イテテ!空中衝突だ!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr "心配しないでください。SparkleShareは、各競合しているファイルのコピーを作成しました。"
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr "SparkleShareセ​​ットアップ"
+
+
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..ff6a888
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,432 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# smeagiel <michielaiso@hotmail.com>, 2011
+# Łukasz Jernaś <deejay1@srem.org>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Welkom bij SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Niet alles is gesynchroniseerd"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Up-to-date"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Synchroniseren…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Kopiëer weblink"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Kopiëer het web-adres van dit bestand naar het plakbord"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Verkrijg eerdere versie"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Maak een kopie van een oudere versie in deze map"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Selecteer voor een kopie van deze versie"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Over SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Bezoek website"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "voegde ‘{0}’ toe"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "bewerkte ‘{0}’"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "verwijderde ‘{0}’"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Voordat we een SparkleShare map op deze computer kunnen aanmaken, hebben we "
+"eerst wat informatie van je nodig."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Volledige naam:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "E-mailadres"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Volgende"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Configureren…"
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Waar is je externe map?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "adres-naar-server.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "Op mijn eigen server:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Gratis hosting voor Vrije en Open Source Software projecten."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Heeft ook accounts tegen betaling voor extra privéruimte en bandbreedte."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "Het GNOME Project"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME is een makkelijk te begrijpen interface voor je computer."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr "Selecteer deze optie als je een GNOME vrijwilliger bent."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Volledig Free as in Freedom infrastructuur."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Gratis accounts voor Vrije en Open Source Software projecten."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Gebruikersnaam/Map"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Project/Map"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Project"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Map"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Mapnaam:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synchroniseer"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Overslaan"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Uitnodiging ontvangen!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Je hebt een uitnodiging ontvangen om je bij een gedeelde map aan te sluiten.\n"
+"Als je wilt zorgen we ervoor dat dit meteen in orde komt."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Accepteer je deze uitnodiging?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Serveradres:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Weigeren"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Accepteren en Synchroniseren"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Er is iets fout gegaan…"
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Opnieuw proberen"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Map succesvol gesynchroniseerd!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Nu heb je toegang tot de gesynchoniseerde bestanden van ‘{0}’ in je "
+"SparkleShare map."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Map openen"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Voltooien"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Map ‘{0}’ aan het synchroniseren…"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Dit kan even duren.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Tijd voor een Cup-a-Soup?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare is er klaar voor!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Nu kan je uitnodigingen accepteren van anderen. \n"
+"Klik gewoon op uitnodigingen die je per e-mail ontvangt en wij zorgen voor de rest."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Leer hoe je je eigen SparkleServer kan opzetten"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Gebeurtenissen in ‘{0}’"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "Map _openen"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Sorry, SparkleShare kan niet gedraaid worden met deze rechten."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Dingen zouden vresenlijk mis gaan"
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Toon het notificatiepictogram niet."
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Druk versie-informatie af"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Toon deze helptekst"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Er zit ABSOLUUT GEEN GARANTIE op dit programma."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr ""
+"Dit is vrije software en je bent van harte uitgenodigd om het te "
+"herdistribueren "
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr " onder bepaalde voorwaarden. Zie de GNU GPLv3 voor meer informatie."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare automatisch synchroniseerd Git repositories in "
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "de ~/SparkleShare map met de externe bron."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Gebruik: sparkleshare [start|stop|restart] [OPTION]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Synchroniseer de SparkleShare map met externe repositories"
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Argumenten"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare "
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Nog geen externe mappen"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Externe map toevoegen…"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Zet mededelingen uit"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Zet mededelingen aan"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Afsluiten"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Ouw! Botsing!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Geen zorgen, SparkleShare heeft een kopie van elk conflicterend bestand "
+"gemaakt."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/no_NO.po b/po/no_NO.po
new file mode 100644
index 0000000..90cbd47
--- /dev/null
+++ b/po/no_NO.po
@@ -0,0 +1,431 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# habakke <habakke@matrise.net>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: no_NO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Velkommen til SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Ikke alt er synkronisert"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Oppdatert"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Synkroniserer..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Kopier web link"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Kopier denne filens web addresse til utklippstavlen"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Hent tidligere versjon"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Lag en kopi av en tidligere versjon i denne mappen"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Vel for å få en kopi av denne versjonen."
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Besøk webside"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "la til '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "redigerte '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "slettet '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Før vi kan lage en SparkleShare mappe på denne datamaskinen, trenger vi litt"
+" informasjon fra deg."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Fullt Navn:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Epost:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Neste"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Konfigurerer..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Hvor er din eksterne mappen?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "addresse-til-server.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "På min egen server:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Gratis hosting for Free og Åpne Kildekode prosjekter"
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Har også betalte kontoer som gir ekstra privat lagringsplass og båndbredde."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "GNOME Prosjektet"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME er et lettfattelig grensesnitt for din datamaskin."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Velg dette valget dersom du er en utvikler eller designer som arbeider med "
+"GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Helt fri som i frihet infrastruktur."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Gratis kontoer for gratis og åpen kildekode prosjekter."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Brukernavn/Mappe"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Prosjekt/Mappe"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Prosjekt"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Mappe"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Mappe Navn:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synk"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Hopp over"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Invitasjon mottatt!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Du har mottatt en invitasjon til å delta i en delt mappe. Vi er klar til å "
+"koble deg opp umiddelbart hvis du ønsker dette."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Aksepterer du denne invitasjonen?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Server Adresse:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Avvis"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Godta og Synk"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Noe gikk galt..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Forsøk igjen"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Mappe synkronisering vellykket!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Nå kan du få tilgang til de synkroniserte filene fra '{0}' i SparkleShare "
+"mappen."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Åpne Mappe"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Fullfør"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Synkronisere mappe '{0}' ..."
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Dette kan ta litt tid.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare er klar til start!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Nå kan du begynne å akseptere invitasjoner fra andre. Bare klikk på "
+"invitasjoner du får via e-post og vi vil ta vare på resten."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Lær hvordan du kan være vert for din egen SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Åpne Mappe"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Beklager, du kan ikke kjøre SparkleShare med disse tillatelsene."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Ting ville gå helt galt."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Ikke vis varslingsikonet"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Print versjons informasjon"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Vis denne hjelpeteksten"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Dette programmet kommer med ABSOLUTT INGEN GARANTI."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr ""
+"Dette er fri programvare, og du er velkommen til å videredistribuere det"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "under visse vilkår. Vennligst les GNU GPLv3 for detaljer."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare synkroniserer automatisk Git repositories i"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "på ~ / SparkleShare mappe med deres eksterne opprinnelse."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Bruk: sparkleshare [start | stop | restart] [VALG] ..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Synkroniser SparkleShare mappe med eksterne repositories."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Argumenter:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Ingen Eksterne Mapper Ennå"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Avslutt"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Au! Kollisjon midt i luften!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Ikke bekymre deg, SparkleShare laget en kopi av hver motstridende fil."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..bb44d0d
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,437 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# Łukasz Jernaś <deejay1@srem.org>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Witamy w programie SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Nie wszystko zostało zsynchronizowane"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Wszystko jest aktualne"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Synchronizowanie…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Skopiuj odnośnik"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Kopiuje adres URL tego pliku do schowka"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Pobierz wcześniejszą wersję"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Tworzy kopię wcześniejszej wersji w tym katalogu"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Zaznacz, aby pobrać kopię tej wersji"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Informacje o"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "Za_sługi"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Odwiedź stronę domową"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ddd, d MMM yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ddd, d MMM"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "dodano „{0}”"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr "przesunięto \"{0}\""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "edytowano „{0}”"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "usunięto „{0}”"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] "oraz {0} więcej"
+msgstr[1] "oraz {0} więcej"
+msgstr[2] "oraz {0} więcej"
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr "wydarzyło się coś magicznego"
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Program SparkleShare wymaga podania kilku informacji, nim możliwe będzie "
+"utworzenie katalogu na tym komputerze."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Imię i nazwisko:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Email:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Następny"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Trwa konfigurowanie…"
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Gdzie znajduje się zdalny folder?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "serwer.pl"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "Na własnym serwerze:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Darmowy hosting Wolnych i Otwartych projektów."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Posiada również płatne konta zwiększające dostępną przestrzeń oraz pasmo."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "Projekt GNOME"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr ""
+"Środowisko GNOME jest łatwym w użyciu interfejsem dla twojego komputera."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Zaznacz tą opcję, jeśli programujesz lub projektujesz dla projektu GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "W pełni wolny, jak w wyrażeniu wolna infrastruktura."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Wolne konta dla projektów Wolnych i Otwartych projektów."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Nazwa użytkownika/katalog"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projekt/Katalog"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projekt"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Katalog"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Nazwa folderu:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synchronizuj"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Pomiń"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Otrzymano zaproszenie."
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Otrzymano zaproszenie do współpracy. \n"
+" Program SparkleShare jest gotowy, by rozpocząć współpracę, jeśli tylko sobie tego życzysz."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Przyjąć zaproszenie?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Adres serwera:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Odrzuć"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Przyjmij i zsynchronizuj"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Coś poszło nie tak..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Spróbuj ponownie"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "„{0}” został poprawnie dodany"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Poprawnie zsynchronizowano folder"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr "Pliki synchronizowane z „{0}” znajdują się z katalogu SparkleShare."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Otwórz katalog"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Zakończ"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Synchronizowanie katalogu „{0}”"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Proces może chwilę potrwać.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Czy to nie jest czasem przerwa na kawę?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "Program SparkleShare jest gotowy do pracy."
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Można teraz przyjmować zaproszenia od innych osób. \n"
+" Wystarczy kliknąć na zaproszenie otrzymane w emailu, a program SparkleShare zajmie się resztą."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Dowiedz się, jak postawić własny SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Zdarzenia w „{0}”"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Otwórz katalog"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+"Przepraszamy, nie można uruchomić programu SparkleShare z bieżącymi "
+"uprawnieniami."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Może to spowodować nieprzewidziane skutki."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Wyłącza wyświetlanie ikony w obszarze powiadamiania"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Wyświetla informacje o wersji"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Wyświetla opcje pomocy"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr "SparkleShare ‒ narzędzie wspomagające współpracę."
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Niniejszy program dostarczany jest BEZ JAKIEJKOLWIEK GWARANCJI."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr ""
+"Niniejszy program jest wolnym oprogramowanie, można go rozprowadzać dalej "
+"pod pewnymi warunkami."
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+"Aby uzyskać więcej informacji, proszę zapoznać się z tekstem licencji GNU "
+"GPLv3."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr ""
+"Program SparkleShare automatycznie synchronizuje reozytoria Git znajdujące "
+"się"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "w katalogu ~/SparkleShare z ich zdalnymi gałęziami."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Użycie: sparkleshare [start|stop|restart] [OPCJA]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr ""
+"Synchronizuj zawartość katalogu SparkleShare ze zdalnymi repozytoriami."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Parametry:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Nie ustawiono jeszcze zdalnych katalogów"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Dodaj zdalny katalog"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Wyłącz powiadomienia"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Włącz powiadomienia"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Zakończ"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Ups! Nastąpiło czołowe zderzenie! "
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr "Bez obaw, program SparkleShare wykonał kopię skonfliktowanych plików."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..f3b4816
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,431 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# Paulo Paulo <paulo.s.lima@gmail.com>, 2011
+# DigitalDead <zero.ext@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-30 22:40+0000\n"
+"Last-Translator: paulocwb2003 <paulo.s.lima@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Bem-vindo ao SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Nem tudo foi sincronizado"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Atualizado"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Sincronizando…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Copiar Endereço Web"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Copiar o endereço web deste arquivo"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Obter Versão Anterior"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Fazer uma cópia de uma anterior nesta pasta"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Selecione para obter uma cópia dessa versão"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Sobre o SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr "Uma nova versão está disponível"
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr "Você está executando a última versão"
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr "Verificando atualizações"
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Exibir os Créditos"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "Visite o site"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ddd d MMM yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ddd d MMM"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "incluído '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr "'{0}' movida"
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "editado '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "excluído '{0}'"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] "e {0} mais"
+msgstr[1] "e {0} mais"
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr "Algo mágico aconteceu"
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Antes de criarmos uma pasta SparkleShare neste computador, precisamos de "
+"algumas informações sobre você."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Nome Completo:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Email:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Próximo"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Configurando..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Onde está sua pasta remota?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "endereço-do-servidor.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "No meu próprio servidor:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Hospedagem gratuita para projetos de Software Livre e Código Aberto"
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr "Também oferece contas pagas para mais espaço privado e transferência."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "O projeto GNOME"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME é uma interface de fácil compreensão para o seu computador."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+"Selecione esta opção se você é um desenvolvedor ou designer trabalhando com "
+"o GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Infraestrutura completamente Livre como em Liberdade"
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Contas gratuitas para projetos de Software Livre e de Código Aberto"
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Nome do usuário/Pasta"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projeto/Pasta"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projeto"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Pasta"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Nome da Pasta"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Sincronizar"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Pular"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Convite recebido!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Você recebeu um convite para compartilhar uma pasta.\n"
+"Estamos prontos para compartilhar imediatamente, se desejar"
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Você deseja aceitar esse convite?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Endereço do Servidor:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Rejeitar"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Aceitar e Sincronizar"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Algo está errado..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Tente de Novo"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "'{0}' foi incluída com sucesso"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Pasta sincronizada com sucesso!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Agora, você pode acessar os arquivos sincronizados de '{0}' na sua pasta do "
+"SparkleShare"
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Abrir Pasta"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Finalizar"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Sincronizando pasta '{0}'"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Isso pode demorar um pouco.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Você tem certeza de que não é hora do café?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "O SparkleShare está pronto!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Agora você pode aceitar convites de outros usuários.\n"
+"Apenas clique nos convites que você receber por e-mail e nós cuidaremos do resto."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Aprenda a hospedar o seu próprio SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Eventos em '{0}'"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Abrir Pasta"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Descuple, você não pode rodar o SparkleShare sem essas permissões."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Algo vai dar muito errado."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Não exibir o ícone de notificação"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Imprimir informações da versão"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Exibir esse texto de ajuda"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr "SparkleShare, uma ferramenta de colaboração e compartilhamento"
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Copyright (C) 2010 Hylke Bons - Todos os direitos reservados"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Este programa vem com ABSOLUTAMENTE NENHUMA GARANTIA."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Este é um software livre, e você está convidado a distribuí-lo"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+"sob certas condições. Por favor leia a licença GNU GPLv3 para mais detalhes."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "O SparkleShare sincroniza os repositórios do Git automaticamente"
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "a pasta ~/SparkleShare com suas origens remotas"
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Utilização: sparkleshare [start|stop|restart] [OPÇÕES]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Sincroniza a pasta SparkleShare com repositórios remotos."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Argumentos:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Ainda Não existem Pastas Remotas"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Incluir pasta remota"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Desligar as notificações"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Ligar as notificações"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Sair"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Ops! Colisão em pleno vôo!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Não se preocupe, SparkleShare fez uma cópia de cada arquivo conflitante."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr "Configurações do SparkleShare"
+
+
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..d7f20d4
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,419 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Добро пожаловать в SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Синхронизация…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr ""
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Открыть папку"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr ""
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+"К сожалению, запускать SparkleShare с такими системными правами нельзя."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Эта программа поставляется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Эта программа является свободной, ее распространение разрешено "
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "при соблюдении требований лицензии GNU GPLv3."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Синтаксис: sparkleshare [start|stop|restart] [КЛЮЧ]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Синхронизировать папку SparkleShare с удаленными источниками."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Параметры:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr ""
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Выход"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr ""
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..2bf6e53
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,423 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# <smygrokarn@tekniktoppen.com>, 2011
+# smygrokarn <smygrokarn@tekniktoppen.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Välkommen till SparkleShare"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Allting har inte synkroniserats"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Synkroniserar…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Kopiera Webblänk"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Kopiera URL för denna fil till klippbordet"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Hämta Tidigare Version"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Gör en kopia av en tidigare version i denna katalog"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Välj för att få en kopia av den här versionen"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Om SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Besök Webbsida"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Innan vi kan skapa en SparkleShare katalog på den här datorn så behöver vi "
+"lite information från dig."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Förnamn och Efternamn:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Email:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Nästa"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Konfigurera..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Vart är din fjärrkatalog?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "adress-till-servern.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "På min egen server"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "Gratis konton för Gratis och Open Source Projekt"
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Användarnamn/Katalog"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Projekt/Katalog"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Projekt"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Katalog"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Katalog Namn:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Synkronisera"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Hoppa över"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Inbjudning mottagen!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Du har mottagit en inbjudan till en delad katalog.\n"
+"Om du önskar så kan du ta del av katalogen direkt."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Accepterar du inbjudan?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Server adress:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Avvisa"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Acceptera och synkronisera"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Något blev fel..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Försök igen"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Katalogen Synkroniserades Framgångsrikt!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Öppna mapp"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Slutför"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Synkroniserar katalog ‘{0}’…"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Det här kan ta en stund.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "Är du säker på att det inte är dax för kaffe?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare är redo!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Lär dig hur du sätter upp en egen SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "_Öppna Katalog"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "Ledsen, men du kan inte köra SparkleShare med dessa rättigheter."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Visa hjälp-texten"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Detta program kommer utan några som helst garantier."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Detta är fri programvara och du är välkommen att distribuera det "
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "under vissa förhållanden. Vänligen läs GNU GPL v3 för detaljer."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Användning: sparkleshare [start|stop|restart] [INSTÄLLNING]"
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Synkronisera SparkleShare mappen med fjärrmappar."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Argument:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Inga fjärrkataloger ännu"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Avsluta"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr ""
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr "Oroa dig inte, SparkleShare gjorde en kopia av konflikt-filen."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 0000000..f26cad0
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,417 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: te\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "స్పార్కిల్‌షేర్‌కి స్వాగతం!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr ""
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr ""
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "సంచయాన్ని తెరువు"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr ""
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr ""
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "చాలించు"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr ""
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..839cd7e
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,432 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+# Сергій Гаврилов <sergiovana@bigmir.net>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "Ласкаво просимо до SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr "Ще не все синхронізовано"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "Оновлено"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "Синхронізація..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "Копіювати веб-посилання"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "Скопіювати веб-адресу цього файла до буферу"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "Отримати старішу версію"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "Створити копію старішої версії в цій теці"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "Вибрати та отримати копію цієї версії"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr "Про SparkleShare"
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr "_Показати авторів"
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr "_Відвідати веб-сайт"
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr "ddd d MMM yyyy"
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr "ddd d MMM"
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr "додано «{0}»"
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr "змінено «{0}»"
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr "вилучено «{0}»"
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+"Щоб створити теку SparkleShare на цьому комп'ютері, потрібна деяка "
+"інформація про вас."
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "Повне ім'я:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "Ел. адреса:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "Далі"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "Налаштування..."
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "Де ваша віддалена тека?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "адреса-на-server.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "На моєму власному сервері:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "Безкоштовний хостинг для вільних програм та Open Source проектів."
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+"Також має платні облікові записи з високою пропускною здатністю та з "
+"отриманням додаткового місця."
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "Проект GNOME"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "Легкий для розуміння інтерфейс GNOME для вашого комп'ютера."
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr "Виберіть цей варіант, якщо ви розробник або дизайнер GNOME."
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "Цілком вільний як і в інфраструктурі Freedom."
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr ""
+"Безкоштовні облікові записи для вільних програм та Open Source проектів."
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr "Користувач/Тека"
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr "Проект/Тека"
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr "Проект"
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr "Тека"
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "Назва теки:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "Синхронізувати"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "Скасувати"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "Пропустити"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "Запрошення отримане!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"Ви отримали запрошення для приєднання до спільної теки.\n"
+"Якщо хочете, можете приєднатись до неї негайно."
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "Ви приймаєте це запрошення?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "Адреса сервера:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "Відхилити"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "Прийняти та синхронізувати"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "Виникла помилка..."
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "Спробувати знову"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr "‘{0}’ успішно додано"
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "Тека синхронізована успішно!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+"Зараз можете отримати синхронізовані файли з ‘{0}’ у своїй теці "
+"SparkleShare."
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "Відкрити теку"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "Завершити"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "Синхронізація теки ‘{0}’…"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "Це може тривати деякий час.\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr "А чи не здається вам, що настав час для кави?"
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare готова до роботи!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"Зараз ви можете схвалювати запрошення від інших. \n"
+"Просто клацніть на запрошенні, яке ви отримали поштою, а ми зробимо все інше."
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "Дізнайтеся, як створити свій власний сервер SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr "Події, пов'язані з «{0}»"
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "Відкрити _теку"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr ""
+"На жаль, ви не можете запустити SparkleShare з такими правами доступу."
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "Все могло піти дуже неправильно."
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "Не показувати значок сповіщення"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "Вивести дані про версію"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "Показати текст цієї довідки"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "Авторське право (C) 2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "Ця програма розповсюджується БЕЗ ВСЯКОЇ ГАРАНТІЇ."
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Це вільна програма і ви можете поширювати її "
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "за певних умов. Детальніше читайте ліцензію GNU GPLv3."
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare автоматично синхронізує сховища Git в "
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "теці ~/SparkleShare з її віддаленими походженнями."
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "Використання: sparkleshare [start|stop|restart] [OPTION]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "Синхронізація теки SparkleShare з віддаленими сховищами."
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "Аргументи:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare "
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "Віддаленої теки ще немає"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr "Додати віддалену теку..."
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr "Вимкнути сповіщення"
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr "Увімкнути сповіщення"
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "Вийти"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "Отакої! Зіткнення в повітрі!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+"Не хвилюйтесь, SparkleShare створює копію кожного суперечливого файла."
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..0cf664b
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,416 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "欢迎使用 SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "同步中..."
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "复制Web链接"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "复制该文件的Web地址到剪贴板"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "获取较早的版本"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "在本目录中制作一个较早的版本"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "获取该版本的复制"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "全名:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "电子邮件"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "下一步"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "正在配置"
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "远程文件夹在什么地方?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "address-to-server.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "在我自己的服务器上:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "GMOME项目"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME是一个简单易懂的计算机使用界面"
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "文件夹名称:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "同步"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "取消"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "跳过"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "收到邀请"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "文件夹同步成功"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr ""
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "打开文件夹"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "完成"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "请稍等。\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare准备完毕!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "学习如何设置自己的SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "对不起,您不能在这些许可下运行 SparkleShare。"
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "出现严重错误"
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "本程序不提供任何质量保证"
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "这是自由软件,欢迎您再次分发。"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "在某种条件下。详情请参见 GNU GPLv3。"
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "用法:sparkleshare [start|stop|restart] [OPTION]..."
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "参数:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr ""
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "退出"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr ""
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr ""
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..b7ab31b
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,420 @@
+# This file is distributed under the same license as the Sparkleshare package.
+#
+# WARNING: Due to the nature of Transifex all translation file headers were lost
+# we apologise for any incovenience this may have caused and we hope to bring them
+# back in the future.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: SparkleShare\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-28 19:48+0200\n"
+"PO-Revision-Date: 2011-05-28 17:48+0000\n"
+"Last-Translator: deejay1 <deejay1@srem.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:303
+#: ../SparkleShare/SparkleIntro.cs:65 ../SparkleShare/SparkleStatusIcon.cs:299
+msgid "Welcome to SparkleShare!"
+msgstr "歡迎使用 SparkleShare!"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:313
+#: ../SparkleShare/SparkleStatusIcon.cs:306
+msgid "Not everything is synced"
+msgstr ""
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:318
+#: ../SparkleShare/SparkleStatusIcon.cs:312
+msgid "Up to date"
+msgstr "更新"
+
+#: ../SparkleShare/Mac/SparkleStatusIcon.cs:333
+#: ../SparkleShare/SparkleStatusIcon.cs:324
+msgid "Syncing…"
+msgstr "同步中…"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:113
+msgid "Copy Web Link"
+msgstr "複製網頁鏈結"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:114
+msgid "Copy the web address of this file to the clipboard"
+msgstr "複製該檔案的網址到剪貼簿"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:147
+msgid "Get Earlier Version"
+msgstr "取得較早的版本"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:148
+msgid "Make a copy of an earlier version in this folder"
+msgstr "在本資料夾中製作一個較早的版本"
+
+#: ../SparkleShare/Nautilus/sparkleshare-nautilus-extension.py.in:161
+msgid "Select to get a copy of this version"
+msgstr "選擇以取得該版本的複本"
+
+#. A menu item that takes the user to http://www.sparkleshare.org/
+#: ../SparkleShare/SparkleAbout.cs:47 ../SparkleShare/SparkleStatusIcon.cs:225
+msgid "About SparkleShare"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:54
+msgid "A newer version is available"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:61
+msgid "You are running the latest version."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:88
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:117
+msgid "_Show Credits"
+msgstr ""
+
+#: ../SparkleShare/SparkleAbout.cs:130
+msgid "_Visit Website"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:392
+msgid "ddd MMM d, yyyy"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:397
+msgid "ddd MMM d"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:608
+#, csharp-format
+msgid "added ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:613
+#, csharp-format
+msgid "moved ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:618
+#, csharp-format
+msgid "edited ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:623
+#, csharp-format
+msgid "deleted ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleController.cs:632
+#, csharp-format
+msgid "and {0} more"
+msgid_plural "and {0} more"
+msgstr[0] ""
+
+#: ../SparkleShare/SparkleController.cs:635
+msgid "did something magical"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:71
+msgid ""
+"Before we can create a SparkleShare folder on this computer, we need a few "
+"bits of information from you."
+msgstr "我們在這臺電腦中可以建立 SparkleShare 資料夾之前,我們需要您的幾點資訊。"
+
+#: ../SparkleShare/SparkleIntro.cs:81
+msgid "Full Name:"
+msgstr "全名:"
+
+#: ../SparkleShare/SparkleIntro.cs:96
+msgid "Email:"
+msgstr "電子郵件:"
+
+#: ../SparkleShare/SparkleIntro.cs:107
+msgid "Next"
+msgstr "下一步"
+
+#: ../SparkleShare/SparkleIntro.cs:113
+msgid "Configuring…"
+msgstr "設定中…"
+
+#: ../SparkleShare/SparkleIntro.cs:159
+msgid "Where is your remote folder?"
+msgstr "遠端資料夾在什麼地方?"
+
+#: ../SparkleShare/SparkleIntro.cs:172
+msgid "address-to-server.com"
+msgstr "address-to-server.com"
+
+#: ../SparkleShare/SparkleIntro.cs:177
+msgid "On my own server:"
+msgstr "在我自己的伺服器上:"
+
+#: ../SparkleShare/SparkleIntro.cs:184
+msgid "Free hosting for Free and Open Source Software projects."
+msgstr "提供給自由和開放原始碼軟體專案的免費主機。"
+
+#: ../SparkleShare/SparkleIntro.cs:185
+msgid "Also has paid accounts for extra private space and bandwidth."
+msgstr "也有付款帳號可提供額外私人空間和頻寬。"
+
+#: ../SparkleShare/SparkleIntro.cs:193
+msgid "The GNOME Project"
+msgstr "GNOME 專案"
+
+#: ../SparkleShare/SparkleIntro.cs:195
+msgid "GNOME is an easy to understand interface to your computer."
+msgstr "GNOME 是一個簡單易懂的電腦使用介面"
+
+#: ../SparkleShare/SparkleIntro.cs:196
+msgid "Select this option if you’re a developer or designer working on GNOME."
+msgstr "如果您是 GNOME 開發人員或設計者就選取這個選項。"
+
+#: ../SparkleShare/SparkleIntro.cs:204
+msgid "Gitorious"
+msgstr "Gitorious"
+
+#: ../SparkleShare/SparkleIntro.cs:206
+msgid "Completely Free as in Freedom infrastructure."
+msgstr "如同在自由基礎架構中的完全自由。"
+
+#: ../SparkleShare/SparkleIntro.cs:207
+msgid "Free accounts for Free and Open Source projects."
+msgstr "提供給自由和開放原始碼專案的免費帳號。"
+
+#: ../SparkleShare/SparkleIntro.cs:218
+msgid "Username/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:223
+msgid "Project/Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:228
+msgid "Project"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:233 ../SparkleShare/SparkleIntro.cs:252
+msgid "Folder"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:257 ../SparkleShare/SparkleIntro.cs:410
+msgid "Folder Name:"
+msgstr "資料夾名稱:"
+
+#: ../SparkleShare/SparkleIntro.cs:267
+msgid "Sync"
+msgstr "同步"
+
+#: ../SparkleShare/SparkleIntro.cs:345
+msgid "Cancel"
+msgstr "取消"
+
+#: ../SparkleShare/SparkleIntro.cs:353
+msgid "Skip"
+msgstr "跳過"
+
+#: ../SparkleShare/SparkleIntro.cs:380
+msgid "Invitation received!"
+msgstr "收到邀請!"
+
+#: ../SparkleShare/SparkleIntro.cs:386
+msgid ""
+"You've received an invitation to join a shared folder.\n"
+"We're ready to hook you up immediately if you wish."
+msgstr ""
+"您已收到加入共享資料夾的邀請。\n"
+"如果您願意的話,我們可以立刻將您聯結。"
+
+#: ../SparkleShare/SparkleIntro.cs:392
+msgid "Do you accept this invitation?"
+msgstr "您接受這個邀請嗎?"
+
+#: ../SparkleShare/SparkleIntro.cs:401
+msgid "Server Address:"
+msgstr "伺服器位址:"
+
+#: ../SparkleShare/SparkleIntro.cs:424
+msgid "Reject"
+msgstr "拒絕"
+
+#: ../SparkleShare/SparkleIntro.cs:425
+msgid "Accept and Sync"
+msgstr "接受並同步"
+
+#: ../SparkleShare/SparkleIntro.cs:473
+msgid "Something went wrong…"
+msgstr "有些地方發生了錯誤…"
+
+#: ../SparkleShare/SparkleIntro.cs:479
+msgid "Try Again"
+msgstr "再試一次"
+
+#: ../SparkleShare/SparkleIntro.cs:504
+#, csharp-format
+msgid "‘{0}’ has been successfully added"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:513
+msgid "Folder synced successfully!"
+msgstr "資料夾同步成功!"
+
+#: ../SparkleShare/SparkleIntro.cs:520
+#, csharp-format
+msgid ""
+"Now you can access the synced files from ‘{0}’ in your SparkleShare folder."
+msgstr "現在您可以在 SparkleShare 資料夾中「{0}」存取同步的檔案。"
+
+#. A button that opens the synced folder
+#: ../SparkleShare/SparkleIntro.cs:528
+msgid "Open Folder"
+msgstr "開啟資料夾"
+
+#: ../SparkleShare/SparkleIntro.cs:534 ../SparkleShare/SparkleIntro.cs:576
+#: ../SparkleShare/SparkleIntro.cs:640
+msgid "Finish"
+msgstr "完成"
+
+#: ../SparkleShare/SparkleIntro.cs:561
+#, csharp-format
+msgid "Syncing folder ‘{0}’…"
+msgstr "正在同步資料夾「{0}」…"
+
+#: ../SparkleShare/SparkleIntro.cs:568
+msgid "This may take a while.\n"
+msgstr "這也許會花費一點時間。\n"
+
+#: ../SparkleShare/SparkleIntro.cs:569
+msgid "Are you sure it’s not coffee o'clock?"
+msgstr ""
+
+#: ../SparkleShare/SparkleIntro.cs:615
+msgid "SparkleShare is ready to go!"
+msgstr "SparkleShare 準備啟用!"
+
+#: ../SparkleShare/SparkleIntro.cs:621
+msgid ""
+"Now you can start accepting invitations from others. \n"
+"Just click on invitations you get by email and we will take care of the rest."
+msgstr ""
+"現在您可以開始接受其他人的邀請。\n"
+"只要在您的電子郵件邀請上按一下,我們就會做好其餘的工作。"
+
+#: ../SparkleShare/SparkleIntro.cs:632
+msgid "Learn how to host your own SparkleServer"
+msgstr "學習如何照料自己的 SparkleServer"
+
+#. TRANSLATORS: {0} is a folder name, and {1} is a server address
+#: ../SparkleShare/SparkleLog.cs:73
+#, csharp-format
+msgid "Events in ‘{0}’"
+msgstr ""
+
+#: ../SparkleShare/SparkleLog.cs:120
+msgid "_Open Folder"
+msgstr "開啟資料夾(_O)"
+
+#: ../SparkleShare/SparkleShare.cs:53
+msgid "Sorry, you can't run SparkleShare with these permissions."
+msgstr "抱歉,您不能以此權限執行 SparkleShare。"
+
+#: ../SparkleShare/SparkleShare.cs:54
+msgid "Things would go utterly wrong."
+msgstr "會出現嚴重錯誤"
+
+#: ../SparkleShare/SparkleShare.cs:63
+msgid "Don't show the notification icon"
+msgstr "不顯示通知圖示"
+
+#: ../SparkleShare/SparkleShare.cs:64
+msgid "Print version information"
+msgstr "列印版本資訊"
+
+#: ../SparkleShare/SparkleShare.cs:65
+msgid "Show this help text"
+msgstr "顯示這份說明文字"
+
+#: ../SparkleShare/SparkleShare.cs:114
+msgid "SparkleShare, a collaboration and sharing tool."
+msgstr ""
+
+#: ../SparkleShare/SparkleShare.cs:115
+msgid "Copyright (C) 2010 Hylke Bons"
+msgstr "著作權©2010 Hylke Bons"
+
+#: ../SparkleShare/SparkleShare.cs:117
+msgid "This program comes with ABSOLUTELY NO WARRANTY."
+msgstr "本程式不提供任何擔保"
+
+#: ../SparkleShare/SparkleShare.cs:119
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "這是自由軟體,歡迎您在某些條件之下"
+
+#: ../SparkleShare/SparkleShare.cs:120
+msgid "under certain conditions. Please read the GNU GPLv3 for details."
+msgstr "繼續散布它。詳情請參見 GNU GPLv3。"
+
+#: ../SparkleShare/SparkleShare.cs:122
+msgid "SparkleShare automatically syncs Git repositories in "
+msgstr "SparkleShare 自動同步 Git 儲存庫於 "
+
+#: ../SparkleShare/SparkleShare.cs:123
+msgid "the ~/SparkleShare folder with their remote origins."
+msgstr "~/SparkleShare 資料夾與它們的遠端來源。"
+
+#: ../SparkleShare/SparkleShare.cs:125
+msgid "Usage: sparkleshare [start|stop|restart] [OPTION]..."
+msgstr "用法:sparkleshare [start|stop|restart] [選項]…"
+
+#: ../SparkleShare/SparkleShare.cs:126
+msgid "Sync SparkleShare folder with remote repositories."
+msgstr "同步 SparkleShare 資料夾與遠端儲存庫。"
+
+#: ../SparkleShare/SparkleShare.cs:128
+msgid "Arguments:"
+msgstr "引數:"
+
+#: ../SparkleShare/SparkleShare.cs:138
+msgid "SparkleShare "
+msgstr "SparkleShare "
+
+#: ../SparkleShare/SparkleStatusIcon.cs:177
+msgid "No Remote Folders Yet"
+msgstr "尚無遠端資料夾"
+
+#. Opens the wizard to add a new remote folder
+#: ../SparkleShare/SparkleStatusIcon.cs:185
+msgid "Add Remote Folder…"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:212
+msgid "Turn Notifications Off"
+msgstr ""
+
+#: ../SparkleShare/SparkleStatusIcon.cs:214
+msgid "Turn Notifications On"
+msgstr ""
+
+#. A menu item that quits the application
+#: ../SparkleShare/SparkleStatusIcon.cs:236
+msgid "Quit"
+msgstr "離開"
+
+#: ../SparkleShare/SparkleUI.cs:105
+msgid "Ouch! Mid-air collision!"
+msgstr "噢!半空中相撞!"
+
+#: ../SparkleShare/SparkleUI.cs:106
+msgid "Don't worry, SparkleShare made a copy of each conflicting file."
+msgstr "別擔心,SparkleShare 對每個衝突檔案都會製作複本。"
+
+#: ../SparkleShare/SparkleWindow.cs:41
+msgid "SparkleShare Setup"
+msgstr ""
+
+