mono-tools-2.11/0000775000175000017500000000000012225357752015577 5ustar00directhexdirecthex00000000000000mono-tools-2.11/INSTALL0000644000175000017500000003660012026454250016621 0ustar00directhexdirecthex00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. mono-tools-2.11/README0000664000175000017500000000156712225357701016462 0ustar00directhexdirecthex00000000000000Mono Tools: ---------- Mono Tools is a collection of development and testing programs and utilities for use with Mono. Building: -------- Building from a source tarball should be as simple as: ./configure [typical configure flags, such as --prefix=PREFIX] make make install Building from git is almost identical, except that you need to execute autogen.sh to create the configure script (which will be automatically executed): git clone https://github.com/mono/mono-tools.git ./autogen.sh [typical configure flags, such as --prefix=PREFIX] make make install Building on OSX with homebrew: ------------------------------ Have the following packages installed: autoconf pkg-config readline automake gettext glib intltool libtool Run autogen like this: PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/ ./autogen.sh mono-tools-2.11/docbrowser/0000775000175000017500000000000012225357743017750 5ustar00directhexdirecthex00000000000000mono-tools-2.11/docbrowser/XmlNodeWriter.cs0000664000175000017500000002157012225357701023041 0ustar00directhexdirecthex00000000000000// // Mono.Xml.XmlNodeWriter // // Author: // Atsushi Enomoto (ginga@kit.hi-ho.ne.jp) // // (C)2003 Atsushi Enomoto // using System; using System.Xml; namespace Monodoc { public class CopyXmlNodeWriter : XmlWriter { public CopyXmlNodeWriter () : this (true) { } // It should be public after some tests are done :-) public CopyXmlNodeWriter (bool isDocumentEntity) { doc = new XmlDocument (); state = XmlNodeType.None; this.isDocumentEntity = isDocumentEntity; if (!isDocumentEntity) current = fragment = doc.CreateDocumentFragment (); } XmlDocument doc; bool isClosed; // If it is not null, then we are now inside the element. XmlNode current; // If it is not null, then we are now inside the attribute. XmlAttribute attribute; // If it is false, then allow to contain multiple document elements. bool isDocumentEntity; XmlDocumentFragment fragment; // None: started or closed. // XmlDeclaration: after xmldecl. Never allow xmldecl. // DocumentType: after doctype. Never allow xmldecl and doctype. // Element: inside document element. // XmlNodeType state; // Properties public XmlNode Document { get { return isDocumentEntity ? (XmlNode)doc : (XmlNode)fragment; } } public override WriteState WriteState { get { if (isClosed) return WriteState.Closed; if (attribute != null) return WriteState.Attribute; switch (state) { case XmlNodeType.None: return WriteState.Start; case XmlNodeType.XmlDeclaration: return WriteState.Prolog; case XmlNodeType.DocumentType: return WriteState.Element; default: return WriteState.Content; } } } public override string XmlLang { get { for (XmlElement n = current as XmlElement; n != null; n = n.ParentNode as XmlElement) if (n.HasAttribute ("xml:lang")) return n.GetAttribute ("xml:lang"); return String.Empty; } } public override XmlSpace XmlSpace { get { for (XmlElement n = current as XmlElement; n != null; n = n.ParentNode as XmlElement) { string xs = n.GetAttribute ("xml:space"); switch (xs) { case "preserve": return XmlSpace.Preserve; case "default": return XmlSpace.Default; case "": continue; default: throw new InvalidOperationException (String.Format ("Invalid xml:space {0}.", xs)); } } return XmlSpace.None; } } // Private Methods private void CheckState () { if (isClosed) throw new InvalidOperationException (); } private void WritePossiblyTopLevelNode (XmlNode n, bool possiblyAttribute) { CheckState (); if (!possiblyAttribute && attribute != null) throw new InvalidOperationException (String.Format ("Current state is not acceptable for {0}.", n.NodeType)); if (state != XmlNodeType.Element) Document.AppendChild (n); else if (attribute != null) attribute.AppendChild (n); else current.AppendChild (n); if (state == XmlNodeType.None) state = XmlNodeType.XmlDeclaration; } // Public Methods public override void Close () { CheckState (); isClosed = true; } public override void Flush () { } public override string LookupPrefix (string ns) { CheckState (); if (current == null) throw new InvalidOperationException (); return current.GetPrefixOfNamespace (ns); } // StartDocument public override void WriteStartDocument () { WriteStartDocument (null); } public override void WriteStartDocument (bool standalone) { WriteStartDocument (standalone ? "yes" : "no"); } private void WriteStartDocument (string sddecl) { CheckState (); if (state != XmlNodeType.None) throw new InvalidOperationException ("Current state is not acceptable for xmldecl."); doc.AppendChild (doc.CreateXmlDeclaration ("1.0", null, sddecl)); state = XmlNodeType.XmlDeclaration; } // EndDocument public override void WriteEndDocument () { CheckState (); isClosed = true; } // DocumentType public override void WriteDocType (string name, string publicId, string systemId, string internalSubset) { CheckState (); switch (state) { case XmlNodeType.None: case XmlNodeType.XmlDeclaration: doc.AppendChild (doc.CreateDocumentType (name, publicId, systemId, internalSubset)); state = XmlNodeType.DocumentType; break; default: throw new InvalidOperationException ("Current state is not acceptable for doctype."); } } // StartElement public override void WriteStartElement (string prefix, string name, string ns) { CheckState (); if (isDocumentEntity && state == XmlNodeType.EndElement && doc.DocumentElement != null) throw new InvalidOperationException ("Current state is not acceptable for startElement."); XmlElement el = doc.CreateElement (prefix, name, ns); if (current == null) { Document.AppendChild (el); state = XmlNodeType.Element; } else { current.AppendChild (el); state = XmlNodeType.Element; } current = el; } // EndElement public override void WriteEndElement () { WriteEndElementInternal (false); } public override void WriteFullEndElement () { WriteEndElementInternal (true); } private void WriteEndElementInternal (bool forceFull) { CheckState (); if (current == null) throw new InvalidOperationException ("Current state is not acceptable for endElement."); if (!forceFull && current.FirstChild == null) ((XmlElement) current).IsEmpty = true; if (isDocumentEntity && current.ParentNode == doc) state = XmlNodeType.EndElement; else current = current.ParentNode; } // StartAttribute public override void WriteStartAttribute (string prefix, string name, string ns) { CheckState (); if (attribute != null) throw new InvalidOperationException ("There is an open attribute."); if (!(current is XmlElement)) throw new InvalidOperationException ("Current state is not acceptable for startAttribute."); attribute = doc.CreateAttribute (prefix, name, ns); ((XmlElement)current).SetAttributeNode (attribute); } public override void WriteEndAttribute () { CheckState (); if (attribute == null) throw new InvalidOperationException ("Current state is not acceptable for startAttribute."); attribute = null; } public override void WriteCData (string data) { CheckState (); if (current == null) throw new InvalidOperationException ("Current state is not acceptable for CDATAsection."); current.AppendChild (doc.CreateCDataSection (data)); } public override void WriteComment (string comment) { WritePossiblyTopLevelNode (doc.CreateComment (comment), false); } public override void WriteProcessingInstruction (string name, string value) { WritePossiblyTopLevelNode ( doc.CreateProcessingInstruction (name, value), false); } public override void WriteEntityRef (string name) { WritePossiblyTopLevelNode (doc.CreateEntityReference (name), true); } public override void WriteCharEntity (char c) { WritePossiblyTopLevelNode (doc.CreateTextNode (new string (new char [] {c}, 0, 1)), true); } public override void WriteWhitespace (string ws) { WritePossiblyTopLevelNode (doc.CreateWhitespace (ws), true); } public override void WriteString (string data) { CheckState (); if (current == null) throw new InvalidOperationException ("Current state is not acceptable for Text."); if (attribute != null) attribute.AppendChild (doc.CreateTextNode (data)); else { XmlText last = current.LastChild as XmlText; if (last == null) current.AppendChild(doc.CreateTextNode(data)); else last.AppendData(data); } } public override void WriteName (string name) { WriteString (name); } public override void WriteNmToken (string nmtoken) { WriteString (nmtoken); } public override void WriteQualifiedName (string name, string ns) { string prefix = LookupPrefix (ns); if (prefix == null) throw new ArgumentException (String.Format ("Invalid namespace {0}", ns)); if (prefix != String.Empty) WriteString (name); else WriteString (prefix + ":" + name); } public override void WriteChars (char [] chars, int start, int len) { WriteString (new string (chars, start, len)); } public override void WriteRaw (string data) { // It never supports raw string. WriteString (data); } public override void WriteRaw (char [] chars, int start, int len) { // It never supports raw string. WriteChars (chars, start, len); } public override void WriteBase64 (byte [] data, int start, int len) { // It never supports raw string. WriteString (Convert.ToBase64String (data, start, len)); } public override void WriteBinHex (byte [] data, int start, int len) { throw new NotImplementedException (); } public override void WriteSurrogateCharEntity (char c1, char c2) { throw new NotImplementedException (); } } } mono-tools-2.11/docbrowser/README.ADMIN0000664000175000017500000001152712225357701021457 0ustar00directhexdirecthex00000000000000Using the Admin Tool ==================== The administration tool is not the most polished piece of software, but these are the instructions on how to use it: For you to start using the Administration tool, you must be granted permissions to become an administrator on the Monodoc system site, you must contact Miguel (miguel@novell.com) to gain Monodoc permissions. Configuring the Tool ==================== The Admin tool works by pulling contributions that have been submitted to the web site and allowing you to review the change and apply the change if the change is correct. The tool works by patching local copies of the documentation, and those changes must then be committed to the repository before they can be distributed to people. This means that you need a Mono Subversion account to be able to check in the documentation and to get fresh copies of the documentation. The tool needs to be configure so it knows how to map contributions in the documentation to your local check out, this is done by creating the file ~/.config/monodoc/providers.xml The file contents is for example: Here as you can see the configuration file is made to point to the various directories that I have checkout from CVS. Policies ======== People contribute many kinds of changes, and we do not necessarily want all of those changes, changes that are typically OK: * Completing missing documentation. * Providing illustrative examples. * Copy/pasting documentation from the ECMA specification. The ECMA specification has been updated and the license allows us to incorporate those changes. We have sadly not automated this process and hence the documentation that we have reflects the first ECMA release, not the latest one. * Pointing out alternative APIs that might be better suited for a particular task, limitations in an API. Changes that are not OK: * Long explanations in the summary line that should be instead in the Remarks section. * Sample code in languages other than C#. People have been picking samples in Boo, Visual Basic, Jscript and IronPython, but considering that we do even have complete C# coverage, it is better to keep all samples in C#. * Documentation that has been copy/pasted from Microsoft documentation. This means that for every change that affects the Microsoft stack documentation an editor must verify that the text for the equivalent class is not the same. This can be a very time consuming operation, and it is best to not approve a change if you have not explicitly verified that this is not a copy. * Opinions, these should be kept out of the documentation, this is a technical document and we should not be passing value judgments on it. Using the Tool ============== Once you have configured the tool, run the `make c' command in this directory. This will bring up the administration tool. Click on "Check Server Updates to get updates from the server". Many of the early applications are pending review or have some problems but we have not cleared them out yet, so its best to start at the higher numbered contributions which are the freshest. Click on a contribution, it will show you the actual change. The rendering is not perfect, if you want to get further information click [Diff], that will provide a rendering before and after that you can more easily examine. When you like a change, click on [Apply], and commit the code properly giving credit on the commit message to the person that made the contribution (you must do this from a separate window where you run svn commit). [Yes, this could be improved] If the contribution is large, also add the contribution to the AUTHORS for that particular bit of documentation. Once a contribution has been applied and there is nothing left to use (either because it has been applied, or the contribution has been deemed as invalid) click the [Flag as Done] button that will remove the contribution from the list Samples in Other Languages ========================== The reality is that we probably need a better system to handle examples, keep those examples off-line so that people can contribute alternative implementations, but at this point we do not have a mechanism to do this. mono-tools-2.11/docbrowser/Makefile.in0000664000175000017500000007041312225357726022023 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = docbrowser DIST_COMMON = $(srcdir)/AssemblyInfo.cs.in $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/monodoc.in ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = monodoc AssemblyInfo.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__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(desktopdir)" \ "$(DESTDIR)$(monodocdir)" "$(DESTDIR)$(pixmapdir)" SCRIPTS = $(bin_SCRIPTS) 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(desktop_DATA) $(monodoc_DATA) $(noinst_DATA) $(pixmap_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_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ monodocdir = $(prefix)/lib/monodoc @DMCS_PRESENT_FALSE@COMPILER = $(GMCS) @DMCS_PRESENT_TRUE@COMPILER = $(DMCS) SUBDIRS = theme-icons @ENABLE_GTKHTML_TRUE@noinst_DATA = admin.exe @ENABLE_GECKO_TRUE@GECKO_TARGET = GeckoHtmlRender.dll @ENABLE_GTKHTML_TRUE@GECKO_PRINTING_DEF = "-d:USE_GTKHTML_PRINT" @ENABLE_GTKHTML_TRUE@GTKHTML_TARGET = GtkHtmlHtmlRender.dll @ENABLE_WEBKIT_TRUE@WEBKIT_TARGET = WebKitHtmlRender.dll @ENABLE_MONOWEBBROWSER_TRUE@MONOWEBBROWSER_TARGET = MonoWebBrowserHtmlRender.dll CLEANFILES = browser.exe browser.exe.mdb admin.exe admin.exe.mdb $(GECKO_TARGET) $(GECKO_TARGET).mdb $(GTKHTML_TARGET) $(GTKHTML_TARGET).mdb $(WEBKIT_TARGET) $(WEBKIT_TARGET).mdb $(MONOWEBBROWSER_TARGET) $(MONOWEBBROWSER_TARGET).mdb monodoc.desktop Options.cs monodoc_DATA = browser.exe $(GECKO_TARGET) $(GTKHTML_TARGET) $(WEBKIT_TARGET) $(MONOWEBBROWSER_TARGET) DISTCLEANFILES = AssemblyInfo.cs monodoc.desktop monodoc bin_SCRIPTS = monodoc browser_sources = \ $(srcdir)/browser.cs \ $(srcdir)/list.cs \ $(srcdir)/elabel.cs \ $(srcdir)/history.cs \ $(srcdir)/editing.cs \ $(srcdir)/Contributions.cs \ $(srcdir)/XmlNodeWriter.cs \ $(srcdir)/IHtmlRender.cs \ $(srcdir)/BookmarkManager.cs \ $(srcdir)/ProgressPanel.cs browser_built_sources = AssemblyInfo.cs Options.cs geckorender_sources = \ $(srcdir)/PrintManager.cs \ $(srcdir)/GeckoHtmlRender.cs gtkhtmlrender_sources = \ $(srcdir)/PrintManager.cs \ $(srcdir)/GtkHtmlHtmlRender.cs webkitrender_sources = \ $(srcdir)/WebKitHtmlRender.cs monowebbrowserrender_sources = \ $(srcdir)/BrowserWidget.cs \ $(srcdir)/MonoWebBrowserHtmlRender.cs admin_sources = \ $(srcdir)/admin.cs \ $(srcdir)/Contributions.cs browser_assemblies = $(GTK_SHARP_LIBS) $(MONODOC_LIBS) $(GNOME_SHARP_LIBS) -r:System.Web.Services -r:System.Web # we insert gtkhtml libs if we have them for printing geckorender_assemblies = $(GTK_SHARP_LIBS) $(GTKHTML_SHARP_LIBS) $(GECKO_SHARP_LIBS) $(GNOME_SHARP_LIBS) $(MONODOC_LIBS) -r:browser.exe gtkhtmlrender_assemblies = $(GTK_SHARP_LIBS) $(GTKHTML_SHARP_LIBS) $(GNOME_SHARP_LIBS) $(MONODOC_LIBS) -r:browser.exe webkitrender_assemblies = $(GTK_SHARP_LIBS) $(WEBKIT_SHARP_LIBS) $(MONODOC_LIBS) -r:browser.exe monowebbrowserrender_assemblies = $(GTK_SHARP_LIBS) $(GNOME_SHARP_LIBS) $(MONOWEBBROWSER_LIBS) $(MONODOC_LIBS) -r:browser.exe -r:Mono.WebBrowser.dll EXTRA_DIST = \ $(browser_sources) \ $(geckorender_sources) \ $(gtkhtmlrender_sources) \ $(monowebbrowserrender_sources) \ $(webkitrender_sources) \ monodoc.desktop.in \ admin.cs \ admin.glade \ browser.glade \ monodoc.png \ AssemblyInfo.cs.in \ README.ADMIN desktopdir = $(datadir)/applications desktop_DATA = monodoc.desktop pixmapdir = $(datadir)/pixmaps pixmap_DATA = monodoc.png 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) --gnu docbrowser/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu docbrowser/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): monodoc: $(top_builddir)/config.status $(srcdir)/monodoc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ AssemblyInfo.cs: $(top_builddir)/config.status $(srcdir)/AssemblyInfo.cs.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ 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)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir) install-monodocDATA: $(monodoc_DATA) @$(NORMAL_INSTALL) @list='$(monodoc_DATA)'; test -n "$(monodocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(monodocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(monodocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(monodocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(monodocdir)" || exit $$?; \ done uninstall-monodocDATA: @$(NORMAL_UNINSTALL) @list='$(monodoc_DATA)'; test -n "$(monodocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(monodocdir)'; $(am__uninstall_files_from_dir) install-pixmapDATA: $(pixmap_DATA) @$(NORMAL_INSTALL) @list='$(pixmap_DATA)'; test -n "$(pixmapdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pixmapdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pixmapdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pixmapdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pixmapdir)" || exit $$?; \ done uninstall-pixmapDATA: @$(NORMAL_UNINSTALL) @list='$(pixmap_DATA)'; test -n "$(pixmapdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pixmapdir)'; $(am__uninstall_files_from_dir) # 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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ 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) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(monodocdir)" "$(DESTDIR)$(pixmapdir)"; 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -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." clean: clean-recursive clean-am: clean-generic 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-desktopDATA install-monodocDATA \ install-pixmapDATA 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-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 pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-desktopDATA \ uninstall-monodocDATA uninstall-pixmapDATA .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 ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binSCRIPTS install-data install-data-am \ install-desktopDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-monodocDATA install-pdf \ install-pdf-am install-pixmapDATA 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 uninstall-binSCRIPTS \ uninstall-desktopDATA uninstall-monodocDATA \ uninstall-pixmapDATA # admin hardcodes GTKHTML for now. @ENABLE_GTKHTML_TRUE@admin.exe: $(admin_sources) $(srcdir)/admin.glade @ENABLE_GTKHTML_TRUE@ $(COMPILER) -debug -out:admin.exe $(admin_sources) -resource:$(srcdir)/admin.glade,admin.glade $(browser_assemblies) $(GTKHTML_SHARP_LIBS) -r:System.Drawing browser.exe: $(browser_sources) $(browser_built_sources) $(srcdir)/browser.glade $(srcdir)/monodoc.png $(COMPILER) -debug -out:browser.exe $(browser_sources) $(browser_built_sources) -resource:$(srcdir)/monodoc.png,monodoc.png -resource:$(srcdir)/browser.glade,browser.glade $(browser_assemblies) $(CSHARP_FLAGS) GeckoHtmlRender.dll : $(geckorender_sources) browser.exe $(COMPILER) -debug -target:library -out:$@ $(geckorender_sources) $(geckorender_assemblies) $(GECKO_PRINTING_DEF) $(CSHARP_FLAGS) GtkHtmlHtmlRender.dll : $(gtkhtmlrender_sources) browser.exe $(COMPILER) -debug -target:library -out:$@ $(gtkhtmlrender_sources) $(gtkhtmlrender_assemblies) $(CSHARP_FLAGS) WebKitHtmlRender.dll : $(webkitrender_sources) browser.exe $(COMPILER) -debug -target:library -out:$@ $(webkitrender_sources) $(webkitrender_assemblies) $(CSHARP_FLAGS) MonoWebBrowserHtmlRender.dll : $(monowebbrowserrender_sources) browser.exe $(COMPILER) -debug -target:library -out:$@ $(monowebbrowserrender_sources) $(monowebbrowserrender_assemblies) $(CSHARP_FLAGS) Options.cs: cp `pkg-config --variable=Sources mono-options` . b: browser.exe MONO_PATH=. $(RUNTIME) --debug browser.exe c: admin.exe MONO_PATH=. $(RUNTIME) --debug admin.exe monodoc.desktop: monodoc.desktop.in sed -e "s|\@bindir\@|$(bindir)|" $< > $@ # 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: mono-tools-2.11/docbrowser/GtkHtmlHtmlRender.cs0000664000175000017500000000523512225357701023635 0ustar00directhexdirecthex00000000000000// // // GtkHtmlHtmlRender.cs: Implementation of IHtmlRender that uses Gtk.HTML // // Author: Mario Sopena // Author: Rafael Ferreira // using System; using Gtk; using System.IO; using System.Reflection; namespace Monodoc { class GtkHtmlHtmlRender : IHtmlRender { HTML html_panel; public Widget HtmlPanel { get { return (Widget) html_panel; } } string url; public string Url { get { return url; } } RootTree help_tree; public event EventHandler OnUrl; public event EventHandler UrlClicked; public GtkHtmlHtmlRender (RootTree help_tree) { this.help_tree = help_tree; } protected void LinkClicked (object o, LinkClickedArgs args) { url = FixUrl (args.Url); if (UrlClicked != null) UrlClicked (this, new EventArgs()); } static string FixUrl (string url) { if (url == null) return url; return url.Replace ("<", "<").Replace (">", ">"); } protected void OnUrlMouseOver (object o, OnUrlArgs args) { url = FixUrl (args.Url); if (OnUrl != null) OnUrl (this, args); } public void JumpToAnchor (string anchor) { html_panel.JumpToAnchor(anchor); } public void Copy () { html_panel.Copy(); } public void SelectAll () { html_panel.SelectAll(); } public void Render (string html_code) { Gtk.HTMLStream stream = html_panel.Begin ("text/html"); stream.Write(html_code); html_panel.End (stream, HTMLStreamStatus.Ok); } static Stream GetBrowserResourceImage (string name) { Assembly assembly = typeof (RootTree).Assembly; System.IO.Stream s = assembly.GetManifestResourceStream (name); return s; } protected void UrlRequested (object sender, UrlRequestedArgs args) { Stream s = help_tree.GetImage (args.Url); if (s == null) s = GetBrowserResourceImage ("monodoc.png"); byte [] buffer = new byte [8192]; int n, m; m=0; while ((n = s.Read (buffer, 0, 8192)) != 0) { args.Handle.Write (buffer, n); m += n; } args.Handle.Close (HTMLStreamStatus.Ok); } public void Print (string Html) { #if !MACOS if (Html == null) { Console.WriteLine ("empty print"); return; } PrintManager.Print (Html); #endif } public bool Initialize () { try { html_panel = new HTML (); } catch (Exception ex) { Console.WriteLine (ex.Message); Console.WriteLine (ex.StackTrace); return false; } html_panel.Show (); html_panel.LinkClicked += new LinkClickedHandler (LinkClicked); html_panel.OnUrl += new OnUrlHandler (OnUrlMouseOver); html_panel.UrlRequested += new UrlRequestedHandler (UrlRequested); return true; } public Capabilities Capabilities { get { return Capabilities.None; } } public string Name { get { return "GtkHtml"; } } } } mono-tools-2.11/docbrowser/BookmarkManager.cs0000664000175000017500000003326412225357701023341 0ustar00directhexdirecthex00000000000000// // Filename BookmarkManager.cs: Manages bookmark saving/restoring and the secondary dialog // windows // Author: // Rafael Ferreira // // (C) 2005 Rafael Ferreira // using System; using Gtk; using Glade; using System.Collections; using System.Xml.Serialization; using System.Xml; using System.IO; namespace Monodoc { public class BookmarkManager { [Serializable] public class BookmarkBase { [XmlAttribute] public string ID = Guid.NewGuid ().ToString (); [XmlAttribute] public string Name = String.Empty; public BookmarkBase () {} } [Serializable] [XmlInclude (typeof (Bookmark))] public class BookmarkGroup : BookmarkBase { [XmlElement ("Member")] public ArrayList Members = new ArrayList (); public BookmarkGroup () {} public BookmarkGroup (string name) { Name = name; } } [Serializable] public class Bookmark : BookmarkBase { public string Url; public Bookmark (string name, string url){ Name = name; Url = url; } public Bookmark () {} } internal class ManageBookmarkDialog { [Glade.Widget] Gtk.TreeView bookmarks_treeview; [Glade.Widget] Gtk.Window manage_bookmarks_dialog; BookmarkGroup root_group; Hashtable iter_to_id; string selected_id = string.Empty; CellRendererText cell_render; const string UNTITLED = "Untitled"; public ManageBookmarkDialog (BookmarkGroup bookmarks) { Glade.XML xml = new Glade.XML ("browser.glade","manage_bookmarks_dialog"); xml.Autoconnect (this); iter_to_id = new Hashtable (); root_group = bookmarks; bookmarks_treeview.RulesHint = true; bookmarks_treeview.EnableSearch = true; // treeview handlers bookmarks_treeview.RowExpanded += new Gtk.RowExpandedHandler (on_row_expanded); bookmarks_treeview.Selection.Changed += new EventHandler (on_row_selected); bookmarks_treeview.RowActivated += new Gtk.RowActivatedHandler (on_row_activated); cell_render = new CellRendererText (); cell_render.Edited += new EditedHandler (on_cellrender_edited); cell_render.Editable = true; bookmarks_treeview.AppendColumn ("Column 1", cell_render,"text",0); } void on_row_expanded (object sender, Gtk.RowExpandedArgs args) { } void on_row_selected (object sender, EventArgs args) { Gtk.TreeIter iter; Gtk.TreeModel model; if (bookmarks_treeview.Selection.GetSelected (out model, out iter)) { selected_id = iter_to_id[iter] as string; } } void on_cellrender_edited (object sender, EditedArgs args) { // root group can't be edited if ( selected_id == root_group.ID) return; BookmarkBase bk = null; BookmarkManager.GetBookmarkBase (root_group,selected_id,ref bk); if (bk == null ) { Console.WriteLine ("error, could not retrieve bookmark:{0}",selected_id); return; } // it is not a bookmark bk.Name = args.NewText; //refreshing tree_view BookmarkManager.Refresh (); BuildTreeView (); } void on_row_activated (object sender, Gtk.RowActivatedArgs args) { } void OnDelete (object o, DeleteEventArgs args) { manage_bookmarks_dialog.Destroy (); } void on_NewFolderButton_clicked (object sender, EventArgs args) { BookmarkManager.AddBookmarkGroup (root_group,selected_id,UNTITLED); BookmarkManager.Refresh (); BuildTreeView (); } void on_EditButton_clicked (object sender, EventArgs args) { } void OnDeleteClicked (object o, EventArgs args) { if (selected_id != string.Empty) { BookmarkManager.DeleteBookmarkBase (root_group,selected_id); BookmarkManager.Refresh (); BuildTreeView (); } } void OnCancelClicked (object o, EventArgs args) { //TODO add undo logic manage_bookmarks_dialog.Hide (); } public void Show () { BuildTreeView (); manage_bookmarks_dialog.ShowAll (); } void BuildTreeView () { TreeStore store = new TreeStore (typeof (string)); bookmarks_treeview.Model = store; TreeIter iter = store.AppendValues (root_group.Name); // appending root iter_to_id[iter] = root_group.ID; // calling the recursevily builder BuildTreeViewHelper (root_group,iter,store); /* foreach (object i in root_group.Members) { if (i is Bookmark) iter_to_id[store.AppendValues (iter, ((Bookmark)i).Name )] = ((Bookmark)i).ID; } */ bookmarks_treeview.ExpandAll (); } void BuildTreeViewHelper (BookmarkGroup bookmarks, TreeIter iter, TreeStore store) { TreeIter tmp_iter; foreach (object i in bookmarks.Members) { if (i is BookmarkGroup) { tmp_iter = store.AppendValues (iter, ((BookmarkGroup)i).Name ); iter_to_id[tmp_iter] = ((BookmarkGroup)i).ID; BuildTreeViewHelper ((BookmarkGroup)i, tmp_iter, store); } if (i is Bookmark) { tmp_iter = store.AppendValues (iter, ((Bookmark)i).Name); iter_to_id[tmp_iter] = ((Bookmark)i).ID; } } } } internal class AddBookmarkDialog { [Glade.Widget] Gtk.Entry name_entry; [Glade.Widget] HBox hbox37; [Glade.Widget] Gtk.Window add_bookmark_dialog; string text, url; BookmarkGroup root; Combo combo; Hashtable combo_to_id = new Hashtable (); public AddBookmarkDialog (BookmarkGroup root_group) { Glade.XML xml = new Glade.XML ("browser.glade","add_bookmark_dialog"); xml.Autoconnect (this); combo = new Combo (); ArrayList list = new ArrayList (); BuildComboList (root_group,list); combo.PopdownStrings = list.ToArray (typeof (string)) as string[]; combo.AllowEmpty = false; combo.Entry.Editable = false; combo.DisableActivate (); // pusihing widget into hbox hbox37.PackEnd (combo); //combo.Entry.Activated += new EventHandler (on_combo_entry_activated); root = root_group; text = url = String.Empty; } // recursively builds combo box private void BuildComboList (BookmarkGroup bookmarks, ArrayList list) { foreach (object i in bookmarks.Members) { if (i is BookmarkGroup) { BuildComboList (i as BookmarkGroup, list); } } list.Add (bookmarks.Name); combo_to_id[bookmarks.Name] = bookmarks.ID; } public void on_AddBookmark_delete_event (object o, DeleteEventArgs args) { add_bookmark_dialog.Destroy (); } public void on_AddButton_clicked (object o, EventArgs args) { BookmarkManager.AddBookmark (root,combo_to_id [combo.Entry.Text] as string,name_entry.Text,url); add_bookmark_dialog.Hide (); BookmarkManager.Refresh (); } public void on_CancelButton_clicked (object o, EventArgs args) { add_bookmark_dialog.Hide (); } public void on_combo_entry_activated (object sender, EventArgs args) { } public void Show (string T, string U) { name_entry.Text = T; text = T.Trim (); url = U.Trim (); add_bookmark_dialog.ShowAll (); } } // attributes: static BookmarkGroup root_group; static string bookmark_file; static XmlSerializer serializer; static Browser _Browser; static string current_bookmark_group = String.Empty; static AddBookmarkDialog add_window = null; static ManageBookmarkDialog edit_window = null; static Hashtable menu_to_id; const string ADD_BANNER = " Bookmark this page"; const string EDIT_BANNER = " Manage bookmarks"; const string ROOT_NAME = "Bookmarks"; private static void Refresh () { BookmarkManager.Save (); BookmarkManager.BuildMenu (_Browser.bookmarksMenu); } private static void Save () { using (FileStream file = new FileStream (bookmark_file,FileMode.Create)) { serializer.Serialize (file,root_group); } #if DEBUG Console.WriteLine ("bookmarks saved ({0})",root_group.Members.Count); #endif } private static void Load () { using (FileStream file = new FileStream (bookmark_file,FileMode.Open)) { root_group = (BookmarkGroup)serializer.Deserialize (file); } #if DEBUG Console.WriteLine ("bookmarks loaded ({0})",root_group.Members.Count); #endif } public BookmarkManager (Browser browser){ _Browser = browser; #if DEBUG Console.WriteLine ("Bookmark Manager init"); #endif // discovering bookmark file bookmark_file = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData); bookmark_file = System.IO.Path.Combine (bookmark_file, "monodoc"); bookmark_file = System.IO.Path.Combine (bookmark_file, "bookmarks.xml"); // creating serializer serializer = new XmlSerializer (typeof (BookmarkGroup)); // trying to load saved bookmarks try { Load (); }catch (Exception e) { // no bookmarks found, creating new root root_group = new BookmarkGroup (ROOT_NAME); } current_bookmark_group = ROOT_NAME; menu_to_id = new Hashtable (); BuildMenu (_Browser.bookmarksMenu); } public static void BuildMenu (MenuItem bookmark_menu) { Menu aux = (Menu) bookmark_menu.Submenu; foreach (Widget w in aux.Children) { aux.Remove (w); } menu_to_id.Clear (); //adding Default Items: AccelGroup bk_grp = new AccelGroup (); _Browser.window1.AddAccelGroup (bk_grp); ImageMenuItem item; item = new ImageMenuItem (ADD_BANNER); //item.Image = new Gtk.Image (Stock.Add,IconSize.Menu); item.AddAccelerator ("activate",bk_grp,new AccelKey (Gdk.Key.D,Gdk.ModifierType.ControlMask,AccelFlags.Visible)); item.Activated += on_add_bookmark_activated; aux.Append (item); //edit item = new ImageMenuItem (EDIT_BANNER); item.AddAccelerator ("activate",bk_grp,new AccelKey (Gdk.Key.M,Gdk.ModifierType.ControlMask,AccelFlags.Visible)); item.Activated += on_edit_bookmark_activated; //item.Image = new Gtk.Image (Stock.Edit,Iconsize,Menu); aux.Append (item); // and finally the separtor aux.Append (new SeparatorMenuItem ()); BuildMenuHelper (aux,root_group); aux.ShowAll (); } private static void BuildMenuHelper (Menu menu, BookmarkGroup group) { foreach (object i in group.Members) { if (!(i is BookmarkGroup)) continue; MenuItem item = new MenuItem (((BookmarkGroup)i).Name); item.Activated += on_bookmarkgroup_activated; menu_to_id[item] = ((BookmarkGroup)i).ID; menu.Append (item); Menu m = new Menu (); item.Submenu = m; BuildMenuHelper (m, ((BookmarkGroup)i)); } foreach (object i in group.Members) { if (i is Bookmark) { #if DEBUG Console.WriteLine ("appending bookmark: [" + ((Bookmark)i).Name + "]"); #endif MenuItem item = new MenuItem (((Bookmark)i).Name); menu_to_id[item] = ((Bookmark)i).ID; item.Activated += on_bookmark_activated; menu.Append (item); menu_to_id[item] = ((Bookmark)i).ID; } } } // Event Handlers static void on_add_bookmark_activated (object sender, EventArgs e){ add_window = new AddBookmarkDialog (root_group); add_window.Show (_Browser.CurrentTab.Title,_Browser.CurrentUrl); } static void on_edit_bookmark_activated (object sender,EventArgs e) { edit_window = new ManageBookmarkDialog (root_group); edit_window.Show (); } static void on_bookmark_activated (object sender, EventArgs e) { // finding the inner label BookmarkBase bk = null; GetBookmarkBase (root_group, menu_to_id[ (MenuItem)sender] as string,ref bk); if (bk != null) { if (bk is Bookmark) _Browser.LoadUrl (((Bookmark)bk).Url); } else { Console.WriteLine ("Bookmark error -> could not load bookmark"); } } static void on_bookmarkgroup_activated (object sender, EventArgs e) { if (((MenuItem)sender).Child is Gtk.Label) { Gtk.Label label = (Gtk.Label) ((MenuItem)sender).Child; current_bookmark_group = label.Name; } } public void EditBookMark () {} // static helper methods /// Recursively deletes a bookmark public static void DeleteBookmarkBase (BookmarkGroup bookmarks, string ID) { foreach (object i in bookmarks.Members) { if (i is Bookmark) { if (((Bookmark)i).ID == ID) { bookmarks.Members.Remove (i); return; } } else if (i is BookmarkGroup) { if (((BookmarkGroup)i).ID == ID) { bookmarks.Members.Remove (i); return; } DeleteBookmarkBase (((BookmarkGroup)i), ID); } } } /// Recursively finds a bookmarkbase public static void GetBookmarkBase (BookmarkGroup bookmarks, string ID, ref BookmarkBase retval) { foreach (object i in bookmarks.Members) { if (((BookmarkBase)i).ID == ID) { retval = i as BookmarkBase; return; } if (i is BookmarkGroup) GetBookmarkBase ((BookmarkGroup)i,ID,ref retval); } } /// Recursively adds a bookmark public static void AddBookmark (BookmarkGroup bookmarks, string parent_ID, string bookmark_text, string bookmark_url) { if ( bookmarks.ID == parent_ID) { bookmarks.Members.Add (new Bookmark (bookmark_text,bookmark_url) ); return; } foreach (object i in bookmarks.Members) { if (i is BookmarkGroup) { AddBookmark (((BookmarkGroup)i), parent_ID,bookmark_text, bookmark_url); } } } /// Recursively adds a bookmark public static void AddBookmarkGroup (BookmarkGroup bookmarks, string parent_ID, string name) { if (bookmarks.ID == parent_ID) { bookmarks.Members.Add (new BookmarkGroup (name)); return; } foreach (object i in bookmarks.Members) { if (i is BookmarkGroup) AddBookmarkGroup (((BookmarkGroup)i), parent_ID,name); if (i is Bookmark){ if (((Bookmark)i).ID == parent_ID) { bookmarks.Members.Add (new BookmarkGroup (name)); return; } } } } } } mono-tools-2.11/docbrowser/Contributions.cs0000664000175000017500000002402112225357701023132 0ustar00directhexdirecthex00000000000000// ------------------------------------------------------------------------------ // // This code was generated by a tool. // Mono Runtime Version: 1.1.4322.2032 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // // ------------------------------------------------------------------------------ // // This source code was auto-generated by Mono Web Services Description Language Utility // /// /// ///Web service for the MonoDoc contribution system /// [System.Web.Services.WebServiceBinding(Name="ContributionsSoap", Namespace="http://tempuri.org/")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public class Contributions : System.Web.Services.Protocols.SoapHttpClientProtocol { public Contributions() { this.Url = "http://www.go-mono.com/docs/server.asmx"; } /// ///Check the client/server version; 0 means that the server can consume your data /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CheckVersion", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] public int CheckVersion(int version) { object[] results = this.Invoke("CheckVersion", new object[] { version}); return ((int)(results[0])); } public System.IAsyncResult BeginCheckVersion(int version, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CheckVersion", new object[] { version}, callback, asyncState); } public int EndCheckVersion(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((int)(results[0])); } /// ///Requests a registration for a login /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Register", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] public int Register(string login) { object[] results = this.Invoke("Register", new object[] { login}); return ((int)(results[0])); } public System.IAsyncResult BeginRegister(string login, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("Register", new object[] { login}, callback, asyncState); } public int EndRegister(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((int)(results[0])); } /// ///Returns the latest serial number used for a change on the server /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetSerial", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] public int GetSerial(string login, string password) { object[] results = this.Invoke("GetSerial", new object[] { login, password}); return ((int)(results[0])); } public System.IAsyncResult BeginGetSerial(string login, string password, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetSerial", new object[] { login, password}, callback, asyncState); } public int EndGetSerial(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((int)(results[0])); } /// ///Submits a GlobalChangeSet as a contribution /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Submit", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] public int Submit(string login, string password, System.Xml.XmlNode node) { object[] results = this.Invoke("Submit", new object[] { login, password, node}); return ((int)(results[0])); } public System.IAsyncResult BeginSubmit(string login, string password, System.Xml.XmlNode node, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("Submit", new object[] { login, password, node}, callback, asyncState); } public int EndSubmit(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((int)(results[0])); } /// ///Obtains the list of pending contributions /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetPendingChanges", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] public PendingChange[] GetPendingChanges(string login, string password) { object[] results = this.Invoke("GetPendingChanges", new object[] { login, password}); return ((PendingChange[])(results[0])); } public System.IAsyncResult BeginGetPendingChanges(string login, string password, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetPendingChanges", new object[] { login, password}, callback, asyncState); } public PendingChange[] EndGetPendingChanges(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((PendingChange[])(results[0])); } /// ///Obtains a change set for a user /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/FetchContribution", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] public System.Xml.XmlNode FetchContribution(string login, string password, int person_id, int serial) { object[] results = this.Invoke("FetchContribution", new object[] { login, password, person_id, serial}); return ((System.Xml.XmlNode)(results[0])); } public System.IAsyncResult BeginFetchContribution(string login, string password, int person_id, int serial, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("FetchContribution", new object[] { login, password, person_id, serial}, callback, asyncState); } public System.Xml.XmlNode EndFetchContribution(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((System.Xml.XmlNode)(results[0])); } /// ///ADMIN: Obtains the number of pending commits /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetStatus", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] public Status GetStatus(string login, string password) { object[] results = this.Invoke("GetStatus", new object[] { login, password}); return ((Status)(results[0])); } public System.IAsyncResult BeginGetStatus(string login, string password, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetStatus", new object[] { login, password}, callback, asyncState); } public Status EndGetStatus(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((Status)(results[0])); } /// ///ADMIN: Updates the status of a contribution /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/UpdateStatus", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)] public void UpdateStatus(string login, string password, int person_id, int contrib_id, int status) { this.Invoke("UpdateStatus", new object[] { login, password, person_id, contrib_id, status}); } public System.IAsyncResult BeginUpdateStatus(string login, string password, int person_id, int contrib_id, int status, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("UpdateStatus", new object[] { login, password, person_id, contrib_id, status}, callback, asyncState); } public void EndUpdateStatus(System.IAsyncResult asyncResult) { this.EndInvoke(asyncResult); } } /// [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")] public class PendingChange { /// public string Login; /// public int ID; /// public int Serial; } /// [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")] public class Status { /// public int Contributions; /// public int Commited; /// public int Pending; } mono-tools-2.11/docbrowser/admin.cs0000664000175000017500000003062512225357701021367 0ustar00directhexdirecthex00000000000000// // admin.cs: Mono collaborative documentation adminsitration tool. // // Author: // Miguel de Icaza // // (C) 2003 Novell, Inc. // using Gtk; using GtkSharp; using Glade; using System; using System.IO; using System.Xml; using System.Collections; using System.Xml.Serialization; using System.Diagnostics; using System.Runtime.InteropServices; namespace Monodoc { class AdminDriver { static int Main (string [] args) { bool real_server = true; if (Environment.GetEnvironmentVariable ("MONODOCTESTING") != null) real_server = false; Settings.RunningGUI = true; Application.Init (); Admin admin = new Admin (real_server); Application.Run (); return 0; } } class Admin { Glade.XML ui; [Widget] Window main_window; [Widget] ScrolledWindow container, review_container; [Widget] Statusbar statusbar; [Widget] Notebook notebook; [Widget] TextView text_ondisk; [Widget] TextView text_diff; [Widget] TextView text_current; uint contextid; HTML html, html_review; Contributions d; string login = SettingsHandler.Settings.Email; string pass = SettingsHandler.Settings.Key; PendingChange [] changes; public Admin (bool real_server) { LoadProviders (); ui = new Glade.XML (null, "admin.glade", "main_window", null); ui.Autoconnect (this); contextid = statusbar.GetContextId (""); main_window.DeleteEvent += new DeleteEventHandler (OnDeleteEvent); d = new Contributions (); if (real_server) d.Url = "http://www.go-mono.com/docs/server.asmx"; html = new HTML (); html.LinkClicked += new LinkClickedHandler (LinkClicked); html.Show (); html.SetSizeRequest (700, 500); container.Add (html); html_review = new HTML (); html_review.LinkClicked += new LinkClickedHandler (ReviewLinkClicked); html_review.Show (); review_container.Add (html_review); } bool Decouple (string prefix, string url, out int id, out int serial) { if (!url.StartsWith (prefix)){ id = 0; serial = 0; return false; } string rest = url.Substring (prefix.Length); int p = rest.IndexOf ('$'); string sid = rest.Substring (0, p); string sserial = rest.Substring (p+1); id = int.Parse (sid); serial = int.Parse (sserial); return true; } void LinkClicked (object o, LinkClickedArgs args) { string url = args.Url; int id, serial; Console.WriteLine ("Got: " + url); if (Decouple ("review:", url, out id, out serial)){ RenderReview (id, serial); return; } Console.WriteLine ("Unhandled url: " + url); } class FileAction { public GlobalChangeset globalset; public DocSetChangeset docset; public FileChangeset fileset; public FileAction (GlobalChangeset gs, DocSetChangeset ds, FileChangeset fs) { globalset = gs; docset = ds; fileset = fs; } } class ItemAction { public GlobalChangeset globalset; public DocSetChangeset docset; public FileChangeset fileset; public Change change; public ItemAction (GlobalChangeset gs, DocSetChangeset ds, FileChangeset fs, Change c) { globalset = gs; docset = ds; fileset = fs; change = c; } } void ApplyFile (FileAction fa) { XmlDocument d = LoadDocument (fa.docset, fa.fileset.RealFile); foreach (Change c in fa.fileset.Changes){ XmlNode old = d.SelectSingleNode (c.XPath); if (old != null) old.ParentNode.ReplaceChild (d.ImportNode (c.NewNode, true), old); } SaveDocument (d, fa.docset, fa.fileset); } void ApplyItem (ItemAction fa) { XmlDocument d = LoadDocument (fa.docset, fa.fileset.RealFile); XmlNode old = d.SelectSingleNode (fa.change.XPath); if (old != null) old.ParentNode.ReplaceChild (d.ImportNode (fa.change.NewNode, true), old); SaveDocument (d, fa.docset, fa.fileset); } static void WriteNode (string file, string str) { using (FileStream s = File.Create (file)){ using (StreamWriter sw = new StreamWriter (s)){ sw.Write (str); } } } void DiffChangeItem (ItemAction fa) { XmlDocument d = LoadDocument (fa.docset, fa.fileset.RealFile); XmlNode orig = d.SelectSingleNode (fa.change.XPath); XmlNode newn = fa.change.NewNode; text_ondisk.Buffer.Text = orig.InnerXml; text_current.Buffer.Text = newn.InnerXml; WriteNode ("/tmp/file-1", orig.InnerXml); WriteNode ("/tmp/file-2", newn.InnerXml); Process diffp = new Process (); diffp.StartInfo.FileName = "diff"; diffp.StartInfo.Arguments = "-uw /tmp/file-1 /tmp/file-2"; diffp.StartInfo.UseShellExecute = false; diffp.StartInfo.RedirectStandardOutput = true; diffp.Start (); text_diff.Buffer.Text = "=" + diffp.StandardOutput.ReadToEnd (); diffp.WaitForExit (); } void SaveDocument (XmlDocument d, DocSetChangeset docset, FileChangeset fileset) { string basedir = (string) providers [docset.DocSet]; string file = basedir + "/" + fileset.RealFile; d.Save (file); RenderReview (current_id, current_serial); } void ReviewLinkClicked (object o, LinkClickedArgs args) { string url = args.Url; int id, serial; if (Decouple ("flag-done:", url, out id, out serial)){ d.UpdateStatus (login, pass, id, serial, 1); notebook.Page = 0; return; } if (url.StartsWith ("apply-file:")){ string rest = url.Substring (11); ApplyFile ((FileAction) action_map [Int32.Parse (rest)]); return; } if (url.StartsWith ("apply-change:")){ string rest = url.Substring (13); ApplyItem ((ItemAction) action_map [Int32.Parse (rest)]); return; } if (url.StartsWith ("diff-change:")){ string rest = url.Substring (12); DiffChangeItem ((ItemAction) action_map [Int32.Parse (rest)]); notebook.Page = 2; } Console.WriteLine ("Unhandled url: " + url); } Hashtable cache = new Hashtable (); GlobalChangeset LoadReview (int id, int serial) { string key = String.Format ("{0}:{1}", id, serial); if (cache [key] != null) return (GlobalChangeset) cache [key]; // // Download contribution // XmlNode n = d.FetchContribution (login, pass, id, serial); // // Parse into GlobalChangeset // XmlDocument doc = new XmlDocument (); doc.AppendChild (doc.ImportNode (n, true)); XmlNodeReader r = new XmlNodeReader (doc); GlobalChangeset s; try { s = (GlobalChangeset) GlobalChangeset.serializer.Deserialize (r); } catch (Exception e) { Console.WriteLine ("Error: " + e); Status = "Invalid contribution obtained from server: " + key; return null; } cache [key] = s; return s; } Hashtable action_map; int current_id, current_serial; // // Renders the id/serial representation for review by the administrator. // void RenderReview (int id, int serial) { current_id = id; current_serial = serial; notebook.Page = 1; GlobalChangeset globalset; globalset = LoadReview (id, serial); HTMLStream s = html_review.Begin ("text/html"); s.Write (""); if (globalset == null){ s.Write ("No data found"); html_review.End (s, HTMLStreamStatus.Ok); return; } int key = 0; action_map = new Hashtable (); // // First make sure we dont have sources that we dont know about, // so a contribution can not be flagged as done by accident // bool allow_flag_as_done = true; foreach (DocSetChangeset docset in globalset.DocSetChangesets){ if (!providers.Contains (docset.DocSet)){ s.Write (String.Format ("Warning: Skipping {0}", docset.DocSet)); allow_flag_as_done = false; continue; } } if (allow_flag_as_done) s.Write (String.Format ("

Changes: [Flag as Done]

", id, serial)); foreach (DocSetChangeset docset in globalset.DocSetChangesets){ if (!providers.Contains (docset.DocSet)) continue; if (docset == null){ s.Write ("Null?"); continue; } string ds; ds = String.Format ("
Docset: {0}
", docset.DocSet); foreach (FileChangeset fileset in docset.FileChangesets){ string fs, es = null; fs = String.Format ("

[Apply] File: {1}
", key, fileset.RealFile); action_map [key++] = new FileAction (globalset, docset, fileset); if (fileset.RealFile == null){ s.Write (String.Format ("Warning: invalid contribution, its missing filename")); continue; } XmlDocument d = LoadDocument (docset, fileset.RealFile); foreach (Change c in fileset.Changes){ XmlNode orig = d.SelectSingleNode (c.XPath); XmlNode newn = c.NewNode; if (orig == null){ s.Write (String.Format ("Warning, node {0} does not exist", c.XPath)); continue; } if (ds != null) { s.Write (ds); ds = null; } if (fs != null) { s.Write (fs); fs = null; es = "
"; } string original_text = orig.InnerXml; string new_text = c.NewNode.InnerXml; if (original_text == new_text){ //s.Write ("Applied
"); continue; } int p = c.XPath.LastIndexOf ("/"); s.Write (String.Format ("[Diff]", key)); s.Write (String.Format ("[Apply]: {1} ", key, c.XPath)); if (c.FromVersion != RootTree.MonodocVersion) s.Write ("FROM OLD VERSION"); action_map [key++] = new ItemAction (globalset, docset, fileset, c); s.Write (""); s.Write (""); s.Write (String.Format ("", Htmlize (original_text))); s.Write (""); s.Write ("
CurrentNew
{0}"); s.Write (Htmlize (new_text)); s.Write ("
"); } if (es != null) s.Write (es); } } s.Write (""); html_review.End (s, HTMLStreamStatus.Ok); } // // Colorizes the ECMA XML documentation into some pretty HTML // string Htmlize (string s) { string r = s.Replace ("<", "<").Replace (">", ">").Replace ("<", "<").Replace ("/para>", "para>

"); return r; } // // Loads the `file' from a DocSetChangeset // XmlDocument LoadDocument (DocSetChangeset ds, string file) { XmlDocument d = new XmlDocument (); string basedir = (string) providers [ds.DocSet]; d.Load (basedir + "/" + file); return d; } void OnDeleteEvent (object o, DeleteEventArgs args) { Application.Quit (); } void RenderChanges () { notebook.Page = 0; HTMLStream s = html.Begin ("text/html"); if (changes != null){ s.Write ("

Pending Changes

"); int i = 0; foreach (PendingChange ch in changes){ s.Write (String.Format ("{3}: {2}
", ch.ID, ch.Serial, ch.Login, i++)); } } else { s.Write ("

No pending changes on the server

"); } html.End (s, HTMLStreamStatus.Ok); } void OnCheckUpdatesClicked (object o, EventArgs args) { Status = "Loading"; try { changes = d.GetPendingChanges (login, pass); if (changes == null) Status = "No changes available"; else Status = "Changes loaded: " + changes.Length + " contributions"; RenderChanges (); } catch (Exception e){ Status = "There was a failure trying to fetch the status from the server"; Console.WriteLine (e); } } string Status { set { statusbar.Pop (contextid); statusbar.Push (contextid, value); } } Hashtable providers = new Hashtable (); public void LoadProviders () { string config_dir = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData); string monodoc_dir = System.IO.Path.Combine (config_dir, "monodoc"); string settings_file = System.IO.Path.Combine (monodoc_dir, "providers.xml"); XmlSerializer ser = new XmlSerializer (typeof (Providers)); Providers p; if (File.Exists (settings_file)) p = (Providers) ser.Deserialize (new XmlTextReader (settings_file)); else { Console.WriteLine ("File {0} does not exist", settings_file); Console.WriteLine ("Format is:"); Console.WriteLine (@" "); Environment.Exit (1); return; } for (int i = 0; i < p.Locations.Length; i++){ providers [p.Locations [i].Name] = p.Locations [i].Path; } } } /// /// Configuration Loading /// public class ProviderLocation { [XmlAttribute] public string Name; [XmlAttribute] public string Path; } public class Providers { [XmlElement ("Location", typeof (ProviderLocation))] public ProviderLocation [] Locations; } } mono-tools-2.11/docbrowser/list.cs0000664000175000017500000002042412225357701021246 0ustar00directhexdirecthex00000000000000// // list.cs: A list widget that scales for lots of data. // // Authors: // Miguel de Icaza (miguel@ximian.com) // Alp Toker (alp@atoker.com) // // (C) 2003 Ximian, Inc. // namespace Monodoc { using Gdk; using Gtk; using System; using System.Collections; delegate void ItemSelected (int index); delegate void ItemActivated (int index); class BigList : Gtk.DrawingArea { Gtk.Adjustment adjustment; int top_displayed; Style my_style; Widget style_widget; Pango.Layout layout; IListModel provider; const string ellipsis = "..."; Hashtable ellipses = new Hashtable (); int old_width; int ellipsis_width, en_width, line_height; int selected_line = -1; int rows = 1; bool is_dragging = false; bool reloaded = true; public bool CanDeselect = false; int old_selected; public BigList (IListModel provider) { this.provider = provider; //Accessibility RefAccessible ().Role = Atk.Role.List; adjustment = new Gtk.Adjustment (0, 0, provider.Rows, 1, 1, 1); adjustment.ValueChanged += new EventHandler (ValueChangedHandler); layout = new Pango.Layout (PangoContext); ExposeEvent += new ExposeEventHandler (ExposeHandler); ButtonPressEvent += new ButtonPressEventHandler (ButtonPressEventHandler); ButtonReleaseEvent += new ButtonReleaseEventHandler (ButtonReleaseEventHandler); KeyPressEvent += new KeyPressEventHandler (KeyHandler); Realized += new EventHandler (RealizeHandler); Unrealized += new EventHandler (UnrealizeHandler); ScrollEvent += new ScrollEventHandler (ScrollHandler); SizeAllocated += new SizeAllocatedHandler (SizeAllocatedHandler); MotionNotifyEvent += new MotionNotifyEventHandler (MotionNotifyEventHandler); AddEvents ((int) EventMask.ButtonPressMask | (int) EventMask.ButtonReleaseMask | (int) EventMask.KeyPressMask | (int) EventMask.PointerMotionMask); CanFocus = true; style_widget = new EventBox (); style_widget.StyleSet += new StyleSetHandler (StyleHandler); // // Compute the height and ellipsis width of the font, // and the en_width for our ellipsizing algorithm // layout.SetMarkup (ellipsis); layout.GetPixelSize (out ellipsis_width, out line_height); layout.SetMarkup ("n"); layout.GetPixelSize (out en_width, out line_height); layout.SetMarkup ("W"); layout.GetPixelSize (out en_width, out line_height); old_width = Allocation.Width; } void MotionNotifyEventHandler (object o, MotionNotifyEventArgs args) { if (!is_dragging) return; int x, y; GetPointer (out x, out y); Selected = HitTest (y); } void SizeAllocatedHandler (object obj, SizeAllocatedArgs args) { Gdk.Rectangle rect = args.Allocation; if (rect.Equals (Gdk.Rectangle.Zero)) Console.WriteLine ("ERROR: Allocation is null!"); int nrows = Allocation.Height / line_height; if (nrows != rows){ rows = nrows; Reload (); } if (args.Allocation.Width != old_width) ellipses.Clear (); old_width = args.Allocation.Width; } void StyleHandler (object obj, StyleSetArgs args) { if (Style == my_style) return; my_style = style_widget.Style.Copy (); Style = my_style; my_style.SetBackgroundGC (StateType.Normal, Style.BaseGC (StateType.Normal)); Refresh (); } void RealizeHandler (object o, EventArgs sender) { } void UnrealizeHandler (object o, EventArgs sender) { } void ValueChangedHandler (object obj, EventArgs e) { top_displayed = (int) Adjustment.Value; Refresh (); } void RedrawLine (int line) { QueueDrawArea (0, line * line_height, Allocation.Width, (line+1) * line_height); } public void Reload () { adjustment.SetBounds (0, provider.Rows, 1, rows, rows); ellipses.Clear (); reloaded = true; } public void Refresh () { QueueDrawArea (0, 0, Allocation.Width, Allocation.Height); } void ScrollHandler (object o, ScrollEventArgs args) { Gdk.EventScroll es = args.Event; double newloc = 0.0; int steps = Math.Max (rows / 6, 2); switch (es.Direction){ case ScrollDirection.Up: newloc = adjustment.Value - steps; break; case ScrollDirection.Down: newloc = adjustment.Value + steps; break; } newloc = Math.Max (newloc, 0); newloc = Math.Min (newloc, provider.Rows - rows); adjustment.Value = newloc; } void KeyHandler (object o, KeyPressEventArgs args) { args.RetVal = true; switch (args.Event.Key) { case Gdk.Key.Down: Selected++; break; case Gdk.Key.Up: Selected--; break; case Gdk.Key.Page_Down: Selected += rows - 1; break; case Gdk.Key.Page_Up: Selected -= rows - 1; break; case Gdk.Key.End: Selected = provider.Rows; break; case Gdk.Key.Home: Selected = 0; break; case Gdk.Key.Return: if (ItemActivated != null) ItemActivated (Selected); break; default: args.RetVal = false; break; } } uint last_click_time = 0; void ButtonPressEventHandler (object o, ButtonPressEventArgs a) { if (a.Event.Type != Gdk.EventType.ButtonPress) return; if (a.Event.Button == 1) is_dragging = true; HasFocus = true; Gdk.EventButton pos = a.Event; int new_selected = HitTest (pos.Y); int double_click_time = Settings.DoubleClickTime; if ((new_selected == Selected) && (a.Event.Time - last_click_time <= double_click_time)) { Selected = new_selected; Grab.Remove (this); if (ItemActivated != null) ItemActivated (Selected); } else Selected = new_selected; last_click_time = a.Event.Time; a.RetVal = true; } void ButtonReleaseEventHandler (object o, ButtonReleaseEventArgs a) { if (a.Event.Button == 1) is_dragging = false; old_selected = Selected; } int HitTest (double y) { int line = (int) y / line_height; if (line + top_displayed > provider.Rows - 1) return -2; return (line + top_displayed); } public int Selected { get { return selected_line; } set { int selected = value; if (selected != -2) { selected = Math.Max (selected, 0); selected = Math.Min (selected, provider.Rows - 1); } if (selected == Selected && reloaded == false) return; reloaded = false; if (selected_line != -1) RedrawLine (selected_line - top_displayed); if (selected == -2) { if (CanDeselect) { //Translate the selection number selected_line = -1; if (ItemSelected != null) ItemSelected (-1); return; } else return; } if (selected < top_displayed){ top_displayed = selected; adjustment.Value = top_displayed; Refresh (); } else if (selected >= (top_displayed + rows)){ top_displayed = selected - rows + 1; top_displayed = Math.Max (top_displayed, 0); adjustment.Value = top_displayed; Refresh (); } else RedrawLine (selected - top_displayed); selected_line = selected; if (ItemSelected != null) ItemSelected (selected); } } public event ItemSelected ItemSelected; public event ItemActivated ItemActivated; void ExposeHandler (object obj, ExposeEventArgs args) { Gdk.Window win = args.Event.Window; Gdk.Rectangle area = args.Event.Area; win.DrawRectangle (Style.BaseGC (StateType.Normal), true, area); for (int y = 0, row = top_displayed; y < area.Y + area.Height; y += line_height, row++){ Gdk.GC gc; Gdk.Rectangle region_area = new Gdk.Rectangle (0, y, Allocation.Width, line_height); StateType state = StateType.Normal; if (row == selected_line) { if (HasFocus) state = StateType.Selected; else state = StateType.Active; win.DrawRectangle (Style.BaseGC (state), true, region_area); } //FIXME: we have a ghost row at the end of the list! //Console.WriteLine (row + " " + provider.Rows); if (row >= provider.Rows) return; string text = ""; if (ellipses [row] == null){ text = provider.GetValue (row); text = ELabel.Ellipsize (layout, text, Allocation.Width - 2 * 2, ellipsis_width, en_width); ellipses [row] = text; } else text = (string) ellipses [row]; layout.SetText (text); gc = Style.TextGC (state); win.DrawLayout (gc, 2, y, layout); } args.RetVal = true; } public Gtk.Adjustment Adjustment { get { return adjustment; } } } } mono-tools-2.11/docbrowser/monodoc.in0000664000175000017500000000622012225357701021730 0ustar00directhexdirecthex00000000000000#! /bin/sh prefix=@prefix@ exec_prefix=@exec_prefix@ # %%$@%$# why oh why isn't it $sharedir/monodoc monodocdir=$prefix/lib/monodoc case x$1 in x--assemble) shift; echo "--assemble is deprecated. Use \`mdoc-assemble'." 1>&2 exec mdassembler "$@" ;; x--get-sourcesdir) echo "--get-sourcesdir is deprecated. Use \`pkg-config monodoc --variable=sourcesdir'." 1>&2 exec pkg-config monodoc --variable=sourcesdir ;; x--normalize) shift; echo "--normalize is no longer supported. Use \`xmllint'." 1>&2 exit 1; ;; x--update) echo "--update does not work. Use \`mdoc-update' instead." 1>&2 exit 1 ;; x--cs-to-ecma) shift; echo "--cs-to-ecma does not work. Use \`mdoc-update' with the \`--import' option." 1>&2 exit 1; ;; x--validate) shift; echo "--validate is deprecated. Use \`mdoc-validate'." 1>&2 exec mdvalidater "$@" ;; x--help) echo "Usage: monodoc [OPTION]... [TOPIC]" echo "" echo "Display documentation for TOPIC (or display the default start page" echo "if no TOPIC is provided). TOPICs are ECMA-334 Annex E.3.1 CREFs, " echo "e.g. N:System, T:System.Object, M:System.Object.Equals, P: for" echo "properties, F: for fields, E: for events, etc. See mdoc(5) " echo "CREF FORMAT for more details." echo "" echo "OPTION is one of the following:" echo " --help Print this message" echo " --about About the monodoc browser" echo " --html TOPIC Print the HTML contents of TOPIC" echo " --make-index Create the documentation index" echo " --make-search-index Create the searchable documentation index" echo " --engine ENGINE Select a browser backend" echo " (Gecko, GtkHtml, WebKit, MonoWebBrowser)" echo echo "The following options are available for authoring documentation:" echo " --edit path Edit (unassembled) documentation at path" echo " --merge-changes CHANGE_FILE [TARGET_DIR]" exit 0 ;; esac getdirectory () { w=`which $1` if test -h $w; then (cd `dirname $w`/`dirname \`readlink $w\``; pwd) else dirname $w fi } if test -n "$MOZILLA_FIVE_HOME"; then MOZILLA_HOME=$MOZILLA_FIVE_HOME elif test x@MOZILLA_HOME@ != x; then if [ -f @MOZILLA_HOME@/chrome/comm.jar ]; then MOZILLA_HOME=@MOZILLA_HOME@ fi elif grep -qs GRE_PATH /etc/gre.d/*.conf > /dev/null ; then MOZILLA_HOME=$(grep -h GRE_PATH= /etc/gre.d/*.conf | cut -d '"' -f 2 -d = | head -n 1) elif [ $(which xulrunner 2> /dev/null) ] > /dev/null ; then MOZILLA_FIVE_HOME=`getdirectory xulrunner` MOZILLA_HOME=$MOZILLA_FIVE_HOME elif [ $(which mozilla 2> /dev/null) ] && grep MOZILLA_FIVE_HOME= "$(which mozilla)" > /dev/null ; then MOZILLA_HOME=$(grep MOZILLA_FIVE_HOME= $(which mozilla) | cut -d '"' -f 2) elif [ $(which firefox 2> /dev/null) ] && grep MOZILLA_FIVE_HOME= "$(which firefox)" > /dev/null ; then MOZILLA_HOME=$(grep MOZILLA_FIVE_HOME= $(which firefox) | cut -d '"' -f 2) fi if [ -n $LD_LIBRARY_PATH ]; then export LD_LIBRARY_PATH=$MOZILLA_HOME:$LD_LIBRARY_PATH else export LD_LIBRARY_PATH=$MOZILLA_HOME fi export MOZILLA_FIVE_HOME export MOZILLA_HOME export LD_LIBRARY_PATH exec @RUNTIME@ $monodocdir/browser.exe $OPTIONS "$@" $REST mono-tools-2.11/docbrowser/elabel.cs0000664000175000017500000000440112225357701021514 0ustar00directhexdirecthex00000000000000// // elabel.cs: An ellipsizing label widget // // Author: // Alp Toker (alp@atoker.com) // // (C) 2003 Alp Toker // using System; using Gtk; public class ELabel : Label { string text = ""; const string ellipsis = "..."; const string en_char = "n"; int ellipsis_width, en_width, tmp; int old_width; Pango.Layout layout; bool refreshed = false; public ELabel (string text) : base ("") { int width, height; GetSizeRequest (out width, out height); SetSizeRequest (0, height); SizeAllocated += new SizeAllocatedHandler (OnSizeAllocated); Text = text; } new public string Text { get { return text; } set { text = value; Reload (); Refresh (); } } void OnSizeAllocated (object o, SizeAllocatedArgs args) { if (refreshed) { refreshed = false; return; } if (Allocation.Width != old_width) Refresh (); old_width = Allocation.Width; refreshed = true; } void Reload () { layout = Layout.Copy (); layout.SetText (ellipsis); layout.GetPixelSize (out ellipsis_width, out tmp); layout.SetText (en_char); layout.GetPixelSize (out en_width, out tmp); } void Refresh () { string ellipsized = Ellipsize (layout, text, Allocation.Width, ellipsis_width, en_width); if (base.Text != ellipsized) base.Text = ellipsized; } public static string Ellipsize (Pango.Layout layout, string newtext, int bound, int ellipsis_width, int en_width) { int width, tmp; layout.SetText (newtext); layout.GetPixelSize (out width, out tmp); if (width < bound) return newtext; if (bound <= ellipsis_width) return ellipsis; string ellipsized = ""; int i = 0; //make a guess of where to start i = (bound - ellipsis_width) / (en_width); if (i >= newtext.Length) i = 0; ellipsized = newtext.Substring (0, i); //add chars one by one to determine how many are allowed while (true) { ellipsized = ellipsized + newtext[i]; layout.SetText (ellipsized); layout.GetPixelSize (out width, out tmp); if (i == newtext.Length - 1) { //bad guess, start from the beginning ellipsized = ""; i = 0; continue; } if (width > bound - ellipsis_width) break; i++; } ellipsized = ellipsized.Remove (ellipsized.Length - 1, 1); ellipsized += ellipsis; return ellipsized; } } mono-tools-2.11/docbrowser/editing.cs0000664000175000017500000003251312225357701021720 0ustar00directhexdirecthex00000000000000// // editing.cs // // Author: // Ben Maurer (bmaurer@users.sourceforge.net) // // (C) 2003 Ben Maurer // using System; using System.Collections; using System.Collections.Specialized; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; using System.Xml.XPath; using System.Web; namespace Monodoc { public class EditingUtils { public static string FormatEditUri (string document_identifier, string xpath) { return String.Format ("edit:{0}@{1}", HttpUtility.UrlEncode (document_identifier), HttpUtility.UrlEncode (xpath)); } public static string GetXPath (XPathNavigator n) { switch (n.NodeType) { case XPathNodeType.Root: return "/"; case XPathNodeType.Attribute: { string ret = "@" + n.Name; n.MoveToParent (); string s = GetXPath (n); return s + (s == "/" ? "" : "/") + ret; } case XPathNodeType.Element: { string ret = n.Name; int i = 1; while (n.MoveToPrevious ()) { if (n.NodeType == XPathNodeType.Element && n.Name == ret) i++; } ret += "[" + i + "]"; if (n.MoveToParent ()) { string s = GetXPath (n); return s + (s == "/" ? "" : "/") + ret; } } break; } throw new Exception ("node type not supported for editing"); } public static XmlNode GetNodeFromUrl (string url, RootTree tree) { Console.WriteLine ("Url is: {0}", url); string [] uSplit = ParseEditUrl (url); Console.WriteLine ("Results are: {0}\n{1}\n{2}", uSplit [0], uSplit [1], uSplit [2]); string xp = uSplit [2]; string id = uSplit [1]; XmlDocument d; if (uSplit[0].StartsWith("monodoc:///")) { int prov = int.Parse (uSplit [0].Substring("monodoc:///".Length)); d = tree.GetHelpSourceFromId (prov).GetHelpXmlWithChanges (id); } else if (uSplit[0].StartsWith("file:")) { d = new XmlDocument(); d.PreserveWhitespace = true; d.Load(uSplit[0].Substring(5)); } else { throw new NotImplementedException("Don't know how to load " + url); } return d.SelectSingleNode (xp); } public static void SaveChange (string url, RootTree tree, XmlNode node, string node_url) { /*string [] uSplit = ParseEditUrl (url); string xp = uSplit [2]; string id = uSplit [1]; if (uSplit[0].StartsWith("monodoc:///")) { int prov = int.Parse (uSplit [0].Substring("monodoc:///".Length)); HelpSource hs = tree.GetHelpSourceFromId (prov); changes.AddChange (hs.Name, hs.GetRealPath (id), xp, node, node_url); changes.Save (); } else if (uSplit[0].StartsWith("file:")) { uSplit[0] = uSplit[0].Substring(5); XmlDocument d = new XmlDocument(); d.PreserveWhitespace = true; d.Load(uSplit[0]); XmlNode original = d.SelectSingleNode(xp); original.ParentNode.ReplaceChild(d.ImportNode(node, true), original); d.Save(uSplit[0]); } else { throw new NotImplementedException("Don't know how to save to " + url); }*/ } public static void RemoveChange (string url, RootTree tree) { /*string [] uSplit = ParseEditUrl (url); string xp = uSplit [2]; string id = uSplit [1]; if (uSplit[0].StartsWith("monodoc:///")) { int prov = int.Parse (uSplit [0].Substring("monodoc:///".Length)); HelpSource hs = tree.GetHelpSourceFromId (prov); changes.RemoveChange (hs.Name, hs.GetRealPath (id), xp); changes.Save (); } else if (uSplit[0].StartsWith("file:")) { //TODO: Not implemented }*/ } public static void RenderEditPreview (string url, RootTree tree, XmlNode new_node, XmlWriter w) { string [] uSplit = ParseEditUrl (url); if (uSplit[0].StartsWith("monodoc:///")) { int prov = int.Parse (uSplit [0].Substring("monodoc:///".Length)); HelpSource hs = tree.GetHelpSourceFromId (prov); hs.RenderPreviewDocs (new_node, w); } else { foreach (HelpSource hs in tree.HelpSources) { if (hs is Monodoc.Providers.EcmaUncompiledHelpSource) { // It doesn't matter which EcmaHelpSource is chosen. hs.RenderPreviewDocs (new_node, w); break; } } } } public static string [] ParseEditUrl (string url) { if (!url.StartsWith ("edit:")) throw new Exception ("wtf"); string [] parts = url.Split ('@'); if (parts.Length != 2) throw new Exception (String.Format ("invalid editing url {0}", parts.Length)); string xp = HttpUtility.UrlDecode (parts [1]); parts = HttpUtility.UrlDecode (parts [0]).Substring ("edit:".Length).Split ('@'); if (parts.Length == 1) { string p = parts[0]; parts = new string[2]; parts[0] = p; parts[1] = ""; } return new string [] {parts [0], parts [1], xp}; } public static void AccountForChanges (XmlDocument d, string doc_set, string real_file) { try { FileChangeset fcs = changes.GetChangeset (doc_set, real_file); if (fcs == null) return; foreach (Change c in fcs.Changes) { // Filter out old changes if (c.FromVersion != RootTree.MonodocVersion) continue; XmlNode old = d.SelectSingleNode (c.XPath); if (old != null) old.ParentNode.ReplaceChild (d.ImportNode (c.NewNode, true), old); } } catch { return; } } public static GlobalChangeset changes = GlobalChangeset.Load (); static public GlobalChangeset GetChangesFrom (int starting_serial_id) { return changes.GetFrom (starting_serial_id); } } #region Data Model public class GlobalChangeset { public static XmlSerializer serializer = new XmlSerializer (typeof (GlobalChangeset)); static string changeset_file = Path.Combine (SettingsHandler.Path, "changeset.xml"); static string changeset_backup_file = Path.Combine (SettingsHandler.Path, "changeset.xml~"); public static GlobalChangeset Load () { try { if (File.Exists (changeset_file)) return LoadFromFile (changeset_file); } catch {} return new GlobalChangeset (); } public static GlobalChangeset LoadFromFile (string fileName) { using (Stream s = File.OpenRead (fileName)) { return (GlobalChangeset) serializer.Deserialize (s); } } public void Save () { SettingsHandler.EnsureSettingsDirectory (); try { if (File.Exists(changeset_file)) // create backup copy File.Copy (changeset_file, changeset_backup_file, true); using (FileStream fs = File.Create (changeset_file)){ serializer.Serialize (fs, this); } } catch (Exception e) { Console.WriteLine ("Error while saving changes. " + e); if (File.Exists(changeset_backup_file)) // if saving fails then use backup if we have one File.Copy (changeset_backup_file, changeset_file, true); else File.Delete (changeset_file); // if no backup, delete invalid changeset } } static void VerifyDirectoryExists (DirectoryInfo d) { if (d.Exists) return; VerifyDirectoryExists (d.Parent); d.Create (); } [XmlElement ("DocSetChangeset", typeof (DocSetChangeset))] public ArrayList DocSetChangesets = new ArrayList (); public FileChangeset GetChangeset (string doc_set, string real_file) { foreach (DocSetChangeset dscs in DocSetChangesets) { if (dscs.DocSet != doc_set) continue; foreach (FileChangeset fcs in dscs.FileChangesets) { if (fcs.RealFile == real_file) return fcs; } } return null; } public int Count { get { int count = 0; foreach (DocSetChangeset dscs in DocSetChangesets){ foreach (FileChangeset fcs in dscs.FileChangesets){ count += fcs.Changes.Count; } } return count; } } Change NewChange (string xpath, XmlNode new_node, string node_url) { Change new_change = new Change (); new_change.XPath = xpath; new_change.NewNode = new_node; new_change.NodeUrl = node_url; Console.WriteLine ("New serial:" + SettingsHandler.Settings.SerialNumber); new_change.Serial = SettingsHandler.Settings.SerialNumber; return new_change; } public void AddChange (string doc_set, string real_file, string xpath, XmlNode new_node, string node_url) { FileChangeset new_file_change_set; Change new_change = NewChange (xpath, new_node, node_url); if (real_file == null) throw new Exception ("Could not find real_file. Please talk to Miguel or Ben about this"); foreach (DocSetChangeset dscs in DocSetChangesets) { if (dscs.DocSet != doc_set) continue; foreach (FileChangeset fcs in dscs.FileChangesets) { if (fcs.RealFile != real_file) continue; foreach (Change c in fcs.Changes) { if (c.XPath == xpath) { c.NewNode = new_node; c.Serial = SettingsHandler.Settings.SerialNumber; return; } } fcs.Changes.Add (new_change); return; } new_file_change_set = new FileChangeset (); new_file_change_set.RealFile = real_file; new_file_change_set.Changes.Add (new_change); dscs.FileChangesets.Add (new_file_change_set); return; } DocSetChangeset new_dcs = new DocSetChangeset (); new_dcs.DocSet = doc_set; new_file_change_set = new FileChangeset (); new_file_change_set.RealFile = real_file; new_file_change_set.Changes.Add (new_change); new_dcs.FileChangesets.Add (new_file_change_set); DocSetChangesets.Add (new_dcs); } public void RemoveChange (string doc_set, string real_file, string xpath) { if (real_file == null) throw new Exception ("Could not find real_file. Please talk to Miguel or Ben about this"); for (int i = 0; i < DocSetChangesets.Count; i++) { DocSetChangeset dscs = DocSetChangesets [i] as DocSetChangeset; if (dscs.DocSet != doc_set) continue; for (int j = 0; j < dscs.FileChangesets.Count; j++) { FileChangeset fcs = dscs.FileChangesets [j] as FileChangeset; if (fcs.RealFile != real_file) continue; for (int k = 0; k < fcs.Changes.Count; k++) { Change c = fcs.Changes [k] as Change; if (c.XPath == xpath) { fcs.Changes.Remove (c); break; } } if (fcs.Changes.Count == 0) dscs.FileChangesets.Remove (fcs); } if (dscs.FileChangesets.Count == 0) DocSetChangesets.Remove (dscs); } } public GlobalChangeset GetFrom (int starting_serial_id) { GlobalChangeset s = null; foreach (DocSetChangeset dscs in DocSetChangesets){ object o = dscs.GetFrom (starting_serial_id); if (o == null) continue; if (s == null) s = new GlobalChangeset (); s.DocSetChangesets.Add (o); } return s; } } public class DocSetChangeset { [XmlAttribute] public string DocSet; [XmlElement ("FileChangeset", typeof (FileChangeset))] public ArrayList FileChangesets = new ArrayList (); public DocSetChangeset GetFrom (int starting_serial_id) { DocSetChangeset dsc = null; foreach (FileChangeset fcs in FileChangesets){ object o = fcs.GetFrom (starting_serial_id); if (o == null) continue; if (dsc == null){ dsc = new DocSetChangeset (); dsc.DocSet = DocSet; } dsc.FileChangesets.Add (o); } return dsc; } } public class FileChangeset { [XmlAttribute] public string RealFile; [XmlElement ("Change", typeof (Change))] public ArrayList Changes = new ArrayList (); public FileChangeset GetFrom (int starting_serial_id) { FileChangeset fcs = null; foreach (Change c in Changes){ if (c.Serial < starting_serial_id) continue; if (fcs == null){ fcs = new FileChangeset (); fcs.RealFile = RealFile; } fcs.Changes.Add (c); } return fcs; } } public class Change { [XmlAttribute] public string XPath; [XmlAttribute] public int FromVersion = RootTree.MonodocVersion; [XmlAttribute] public string NodeUrl; public XmlNode NewNode; public int Serial; bool applied = false; // // These are not a property, because we dont want them serialized; // Only used by the Admin Client. // public bool Applied () { return applied; } public void SetApplied (bool value) { applied = value; } } #endregion public class EditMerger { GlobalChangeset changeset; ArrayList targetDirs; public EditMerger (GlobalChangeset changeset, ArrayList targetDirs) { this.changeset = changeset; this.targetDirs = targetDirs; } public void Merge () { foreach (DocSetChangeset dsc in changeset.DocSetChangesets) { bool merged = false; foreach (string path in targetDirs) { if (File.Exists (Path.Combine (path, dsc.DocSet + ".source"))) { Merge (dsc, path); merged = true; break; } } if (!merged) Console.WriteLine ("Could not merge docset {0}", dsc.DocSet); } } void Merge (DocSetChangeset dsc, string path) { Console.WriteLine ("Merging changes in {0} ({1})", dsc.DocSet, path); foreach (FileChangeset fcs in dsc.FileChangesets) { if (File.Exists (Path.Combine (path, fcs.RealFile))) Merge (fcs, path); else Console.WriteLine ("\tCould not find file {0}", Path.Combine (path, fcs.RealFile)); } } void Merge (FileChangeset fcs, string path) { XmlDocument d = new XmlDocument (); d.Load (Path.Combine (path, fcs.RealFile)); foreach (Change c in fcs.Changes) { XmlNode old = d.SelectSingleNode (c.XPath); if (old != null) old.ParentNode.ReplaceChild (d.ImportNode (c.NewNode, true), old); } d.Save (Path.Combine (path, fcs.RealFile)); } } } mono-tools-2.11/docbrowser/browser.glade0000664000175000017500000035244712225357701022442 0ustar00directhexdirecthex00000000000000 True Mono Documentation Library GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False 640 480 True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False 0 True True _File True True New _Tab True True gtk-add 1 0.5 0.5 0 0 True _Lookup URL... True True gtk-jump-to 1 0.5 0.5 0 0 True _Print... True True gtk-print 1 0.5 0.5 0 0 True True _Close Tab True True gtk-close 1 0.5 0.5 0 0 True Quit True True gtk-quit 1 0.5 0.5 0 0 True _Edit True True _Cut True True gtk-cut 1 0.5 0.5 0 0 True _Copy True True gtk-copy 1 0.5 0.5 0 0 True _Paste True True gtk-paste 1 0.5 0.5 0 0 True True Select All True True _View True True Collapse All True True Show Inherited Members True False True Show Comments True False True _Bookmarks True True _Contributing True True _Upload Contributions... True True gtk-network 1 0.5 0.5 0 0 True _View Contribution Statistics... True True gtk-find-and-replace 1 0.5 0.5 0 0 True True Edit Mode True False True _Help True True About... True True gtk-about 1 0.5 0.5 0 0 0 False True 3 True True False 3 True False 6 True True 0 True True GTK_RELIEF_NONE True True GTK_ARROW_LEFT GTK_SHADOW_NONE 0.5 0.5 0 0 0 False False True True GTK_RELIEF_NONE True True GTK_ARROW_RIGHT GTK_SHADOW_NONE 0.5 0.5 0 0 0 False False 0 False True True False 3 22 22 True gtk-dialog-info 4 0.5 0.5 0 0 0 False True True False 0 0 True True True n/a False True GTK_JUSTIFY_RIGHT False False 1 0.5 6 0 0 False False 0 True True 0 False True True False 3 True True 260 True True True True GTK_POS_BOTTOM False False 3 True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False True False True True False 3 True gtk-help 1 0.5 0.5 0 0 0 True True True _Contents True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False tab 3 True False 3 False True True False 3 True gtk-index 1 0.5 0.5 0 0 0 True True True _Index True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 index_entry 0 False False tab 3 True False 0 False True True False 3 True gtk-find 1 0.5 0.5 0 0 0 True True True _Search True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False tab True False True False 0 True True 0 True True True False 0 False True 0 True True True About monodoc GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True False False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST 6 True False 6 True False 6 True 0.5 0.5 0 0 0 True True True False 0 True True <span size="larger"><b>monodoc:</b> The Mono Documentation Library viewer</span> False True GTK_JUSTIFY_LEFT False True 0.5 0.5 0 0 0 False False True <b>Version</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 False False 0 True False 0 False True True False 6 True True <b>Authors:</b> Miguel de Icaza (miguel@ximian.com) Duncan Mak (duncan@ximian.com) Joshua Tauberer (tauberer@for.net) Lee Malabone Philip Van Hoof Johannes Roith (johannes@jroith.de) Alp Toker (alp@atoker.com) Piers Haken John Luke (jluke@cfl.rr.com) Ben Maurer Mario Sopena Novales (mario.sopena@gmail.com) Rafael Ferreira (raf@ophion.org) False True GTK_JUSTIFY_LEFT False True 0.5 0 0 0 0 True True True True <b>Plugins:</b> ECMA Documentation. Mono XML Documentation. Mono Handbook. Manual Pages. Compiler Errors. ECMA C# Specification. False True GTK_JUSTIFY_LEFT False True 0.5 0 0 0 0 True True 0 True True True 0 False True True GTK_BUTTONBOX_END 0 True True True True True gtk-ok True GTK_RELIEF_NORMAL True 0 False True True Lookup URL GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST 3 True False 0 True _URL to lookup: True True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 False False True True True True True True 0 True * True lookup_entry 2 False False True False 0 True True True True gtk-ok True GTK_RELIEF_NORMAL True 0 True False 2 False False True Login configuration GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST 7 True False True GTK_POS_TOP False False True False 0 True You can edit the contents of the API documentation in MonoDoc and contribute those back. To do this you must agree to relicense your updates under the terms of the MIT X11 Open Source License and register your email address with the documentation service. If you agree, click Continue False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True True True True Continue True GTK_RELIEF_NORMAL True 0 False False 0 False False False True True 0 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True False 0 True _Email: True True GTK_JUSTIFY_LEFT False False 0.5 0.5 9 0 entry_email 0 False False True True True True True 0 True * False 0 True True True xx False False GTK_JUSTIFY_LEFT False False 0.5 0.5 7 0 0 False False 0 True False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True True True True Continue True GTK_RELIEF_NORMAL True 0 False False 0 False False False True True 1 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True Monodoc is requesting an account for you. False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True True True True True Cancel True GTK_RELIEF_NORMAL True 0 False False 0 False False False True True 2 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True <b>Error:</b> Monodoc encountered a failure when requesting a password for your e-mail address. Try again later. False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True True True True True Ok True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False False True True 3 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True False 0 True Once you receive your password on the mail, please enter it here: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True Password: True True GTK_JUSTIFY_LEFT False False 0.5 0.5 9 0 entry_password 0 False False True True True False 0 True * False 0 True True True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 7 0 0 False False 0 True True 0 True False True False 0 True True True True Continue True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False False True True 4 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True MonoDoc is logging into the server. False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True True Cancel True GTK_RELIEF_NORMAL True 0 False False 0 True True 0 False False False True True 5 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True <b>Congratulations!</b> You can now contribute your changes to MonoDoc by using the File/Upload menu option. False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True True Ok True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False False True True 6 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True <b>Terminated</b> The request to the Monodoc server has been cancelled. False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True True Ok True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False False True True 7 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True <b>Please wait</b> MonoDoc is checking the server version. False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True True Cancel True GTK_RELIEF_NORMAL True 0 False False 0 False False False True True 8 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True <b>Communications Problem</b> There was a communications problem when communicating with the Mono Documentation Server. False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True True Ok True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False False True True 9 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True <b>Version missmatch</b> This version of MonoDoc is not compatible with the current Monodoc server, please upgrade your MonoDoc installation. False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False 0 True True Ok True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False False True True 10 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True False 0 True <b>Password Problem</b> The passkey entered is incorrect. Please try again. False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 True False True False 0 True True Ok True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False False True True 11 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 tab True Uploading Documentation Updates - MonoDoc GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True False 0 True GTK_BUTTONBOX_END True True True Cancel True GTK_RELIEF_NORMAL True 0 0 False True GTK_PACK_END True False 0 True Monodoc Documentation Updates Uploader. False False GTK_JUSTIFY_LEFT False False 0.5 0.5 10 11 0 False False True False 0 True <b>Status:</b> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 0 True True 0 False False True New Comment GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False 0 True TODO: Some advise on posting here. False False GTK_JUSTIFY_LEFT True False 0.5 0.5 5 5 0 False False True 5 2 False 0 0 True True True True 0 True * False 1 2 0 1 5 5 True True True True 0 True * False 1 2 1 2 5 5 True Title: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 2 3 5 5 fill True True True True 0 True * False 1 2 2 3 5 5 True Comment False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 3 4 5 5 fill True E-Mail: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 1 2 5 5 fill True Name: False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 0 1 0 1 5 5 fill True True GTK_POLICY_NEVER GTK_POLICY_ALWAYS GTK_SHADOW_NONE GTK_CORNER_TOP_LEFT True True True False True GTK_JUSTIFY_LEFT GTK_WRAP_NONE True 0 0 0 0 0 0 1 2 3 4 5 5 fill fill True True gtk-ok True GTK_RELIEF_NORMAL True 1 2 4 5 5 5 fill True True gtk-cancel True GTK_RELIEF_NORMAL True 0 1 4 5 5 5 fill 0 True True True Manage Bookmarks GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True 375 275 True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True False 0 True False 0 8 True True GTK_POLICY_NEVER GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False True False False False 0 True True 9 True GTK_BUTTONBOX_START 4 True True True gtk-delete True GTK_RELIEF_NORMAL True True True True New Folder True GTK_RELIEF_NORMAL True 0 False True GTK_PACK_END 0 True True True 0 False True 7 True GTK_BUTTONBOX_END 0 True True True gtk-close True GTK_RELIEF_NORMAL True 0 False True True Add Bookmark GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True 60 115 False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True 23 True False 0 2 True False 22 True Name: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True True True 0 True * False 0 True True 0 False True 2 True False 5 True Create in: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True False 5 True False 199 True True gtk-cancel True GTK_RELIEF_NORMAL True 0 False False True True gtk-add True GTK_RELIEF_NORMAL True 0 False False 4 False True mono-tools-2.11/docbrowser/theme-icons/0000775000175000017500000000000012225357743022163 5ustar00directhexdirecthex00000000000000mono-tools-2.11/docbrowser/theme-icons/icon-theme-installer0000775000175000017500000001224412225357701026131 0ustar00directhexdirecthex00000000000000#!/bin/bash # icon-theme-installer # Copyright (C) 2006 Novell, Inc. # Written by Aaron Bockover # 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: # # , # # apps,music-player-banshee.svg # apps,music-player-banshee-16.png # apps,music-player-banshee-22.png # # is the icon theme category, for instance, apps, devices, # actions, emblems... # # must have a basename in the form of: # # proper-theme-name[-]. # # Where should be either nothing, which will default to scalable # or \-[0-9]{2}, which will expand to x. For example: # # music-player-banshee-16.png # # The 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 name (hicolor) # -b : 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) # -d : Theme installation directory [$(hicolordir)] # -s : Source directory [$(srcdir)] # -m : Command to exec for directory creation [$(mkinstalldirs)] # -x : Command to exec for single file installation [$(INSTALL_DATA)] # : 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 [-d \$(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 if test "x$INSTALL" = "xyes"; then 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 install, run this:" echo "*** $gtk_update_icon_cache" fi fi mono-tools-2.11/docbrowser/theme-icons/Makefile.in0000664000175000017500000002736112225357726024242 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = docbrowser/theme-icons DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ theme = hicolor themedir = $(datadir)/icons/$(theme) theme_icons = \ apps,GNOME/monodoc-16.png \ apps,GNOME/monodoc-22.png \ apps,GNOME/monodoc-24.png \ apps,GNOME/monodoc-32.png \ apps,GNOME/monodoc-48.png \ apps,GNOME/monodoc-256.png install_icon_exec = $(srcdir)/icon-theme-installer \ -t "$(theme)" \ -s "$(srcdir)" \ -d "x$(DESTDIR)" \ -b "$(themedir)" \ -m "$(mkinstalldirs)" \ -x "$(INSTALL_DATA)" EXTRA_DIST = \ $(wildcard GNOME/*.png) \ $(wildcard Mac/*.icns) \ icon-theme-installer 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) --gnu docbrowser/theme-icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu docbrowser/theme-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): 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-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 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 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-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-hook install-data-local: @-$(install_icon_exec) -i $(theme_icons) uninstall-hook: @-$(install_icon_exec) -u $(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: mono-tools-2.11/docbrowser/theme-icons/Mac/0000775000175000017500000000000012225357743022663 5ustar00directhexdirecthex00000000000000mono-tools-2.11/docbrowser/theme-icons/Mac/monodoc.icns0000664000175000017500000071612412225357701025204 0ustar00directhexdirecthex00000000000000icnsTis32081/4:7-.j1ɭ6.N1;45>544@4.N15744.O18oK44.O0~}}wB44.P0vw=vxO44.P0qqrrsbK44.P0la=Rhs844.Q0b<445@4<4.Q0d s4ۭ.e0eg)ee\:.w7-987543268'.t@U 0l5CWU!0/.( ! 7>76e:fX4m7f4Q7<34A433Ce4Q6473e4R68O3e4R7E3e4S7>W3e4S6S3e4S6Ck93e4T6@336K3>e4T6 eܭ4g6)i4z=4eca_^[ZbgU4wEXJ6o:FZ[J766?JK8A;9W6j:ߤ6N9?34D433H6N84׶736O89V36O9J36P9Ѐ `3ߤ6P9-Χ\3ܤ6P9ͰK;3ؤ6Q9F337W3AӤ6Q9ɀ Фۭ6e9)¥6u@76rEW8km4/h=g}mnonmlk|4/h=fB4B4/h=e74455M\`SG64764/h=c74`~84474/h=a74tX4474/h=`74K|r447}4/h=^|7Keox~zxg447{4¨/h=\y}|{tgE446x4/h=[w{xzy|S446v4/h/(0nS8QꅺEY'N``hus/3/]IEN򫵓4rq#|h*?$ bc$lu%^͕ط͆G!ʐ9ZtvCiǤMV+~hq_ʚ~Mt..M{p}7C ەƀ{i"\^ t `;VEhPiLHȵȷ|F9 ["\7|ta-KtcNR 9(vT4PUYb;c|$z5?7L͍ar;zl8@;~f4gC\z@[%ͤDR@Uy0GD.|  HilF`i=:( -E.6GfT/Yv`,Aޭ SX5ԭ>S[bd,.tڨ3dSY \5 ^̱hApΚ e+X<#](sfbM3DX˥F GW+;(l+"ZEvbe;+n')S&b\T!Ш؎_ǛA$協2b~f}]ٜ4z2L&G֕X{#)4 Ŧz4mAgMgAݿa ʀ'ZFǛ+*.o=Wb0.dJ3IDuĨ|\U>ͺ[A\ QIT-۟Ј*ylXyWEXH#.npgi+[?rüEn˭.NdQkc.pⓡF{îF gVD_#; g9j un$ۣ9 I(d[Qo^GB.@ f;GN1aekUW+s*kNxD|Y'{P9%I]xV_mjp>>B0΋b͝s a6v"Uqign  K-57W%v_UML8,5 >c\XzE'4UŽ&Ddo9x+Ov֏d_<93S?.1&{:MLHY4]佛gNcf>XCd(,٨PTib؅ÉB,1D)D=gvvlc5`W=)a3 n<ݱ19xEmxC*&jJrd0CLNgԾ}&?g5gP$aj.s~MYc-C ?}p$z&a5:r@a9ISosӣE#&r(@3+QU:2!WioeSjnJāoU;F2F>Z]X4ۊ\M?K` sXoh,Ehgl~9zhz (R.4lmt5^<~^jXVBLD&#Mzv&{sqK{6-:T2^q?ft F2 ,N8Aq IiO ר`SFZ\21{ Sޡ#7PFh"v[xϪié` z 68aB|4KĞ9[[|kwPEڋFE^ӚvY|IC9:><j^̙ 95]zn} _ `rl:y5پ^-!iafi{CyGw$?򑻸w ()쁭9G¤iݫ"l0f#Jŵ)>I(1^!qG@h%WFF$!jn{vG wfь X°U..S~<e*Rʦ HA P5@c(Uv!r^E~ }!0_K;X4S"Y=,"xOcf=•G,֍Z3} 6܀.D'~am/WBTOAG!=}avP~F^ӄ: nDo !F94D|OTE9d>8$2$, ⽪ jl=" vSrc7wl (}7C1^sq >E~~>$W}"S慦~tZ)IW28չ @*䢎I˜~[=G&X>2oL>CM+z_G"kp|H^XFOt0 f5 { |WIJ3^$M?6*iy9y&+XDiiV1tdlǬ1 R`oS7%`gbA:i< Z_:VcӘb&3-YON>X*ȴC "e}SñYxhE8Ϲ_R<8j!ż"WnnNPbk[Bm݁#+g<\Yo+: ZqO<(Z!16$$+>ȮR4:_`)xbe+#:i-UіmME@7c KCL*?`6qLM-F^_TN `2LP͡vGLKLxteOAl_KhHjfL9>j:ey?KnL4}7NYw}j1>yo Ujbb߶+~{q6L*ILjpk3A{CސdVߐi`)^ԸP*S حy콄1QQӳ6&Te67ƑFwHcs'ǚvov^5X+t4l^__PH7e9vvˆn°J啭hFf2#3(l[)w)|!!G/G @dX?K>]F](pK$01!Nч@fAC1I$Ԙ>y|ϗM| 8AjYl}]+JVH^k dz'E5QW ɘFȎ\MoT^ HގHg[|W?IV߂m$,ӔOMo jWW^[Ͻ! `짬h f*kB 9Vub+>a>4z8IsϟQ®hs Z/&=De )$W\;HimJ6艕zEBK'7Mk+b!I5Cq4N#JQ @R!iHHZuVJ0y)ɉʃS$- Jor!ɸc{XR]%76HFK[3y衋ה"]lzu᠑hl? wN }48 ˹z`vfHFmaK#M/*bn;8կyp:cRbN}_$JsgZ3 +hn[|x̔8 mo{+<ׄߑk.x\ f}p|{uDAM.wU uʑPy,ePl5] cSM] 㡟HCǦ@Levlg͔rN/Rk<_)x+dQbWZ>iͱ}xI *v9a:LMq~sQLdžT4_.WM"]ioXD>yo#C%O1*;bjD:!$NZ N#8 9n_9>iSx~图LV o[ߵf'}YbJ9ȽMJn"T2wb)P?nx'~崖1S@8hȼ2AEZ`qk YN$i31KKNshD]H^MRa 9ՓT aa8X.G!mFkP hL[|"pF0QKA F#S*V)>r sy <8Ns/J'9݋ɛ-**h[siX** t8 6b*#.Z+mꜬ*VH!l3{7Ie%[*E|=zxp_wB:CTZqqሙҤP{$P_iVGǤ&u@h~BvQg!8\9:lR9i/p=i~e"R1V>?/Svg@\ϋ̻AOOZEwR/2s8D0QJxf I;Rv{pu *pI" n ;QmsM4+`:̶+)af'0@M  J $|A +7׳\X7DX,E.%`]("g0؞6mV2_4T|JxYeInx@sQd"Mxtqkus 5>eEy N:" Pe 8roh3/m>UnechBOTߛthj:t![ŐzF\{W~!t5+q2<{[,:EhN7U@"?sѵƟH}."rYc6W<*+:ҽ!šhK6md 6]Ho˼uc~EUiW6'x-R|nSQ!tNn##`VZUOZ4ao"?29#lfS#u0$5"~ĸǯH+m/"'q`6%drnq%)$z(Ío4Eԥ0基g^ĵhnNn(&ҡ՝Et$v*ǥ1=ѼMo ~s&] nތ]\*nrduڿT$HMtUo*~u&JzoBX͸H1S 6'):S,rj t.%S2n3+E9 +;ŭ\5᳾ry Teι2 L`p$(ÈF䨖4Ɂ{=#5>V@%Խ1*<*߭* *9E4. E`dJ'3ыZ Ep exĹp+]^VWXO32̬qT>Oλ`_T߸|zhފ#\$&9C-`IrVgeĖжyXlgT]&Q*}ɀk18at3bm8nj-tOHH.+۳A[Yݥa1{K CVW1ݕH}Utrٽ!x- WJlt .͏@Ñ]?ƦE7\ef@ -*0$uʼq]bՒ⍎SюwTw@ꚶ:醵ѳ}hܶ9BkA?FD50zٱ/糑GuH-(rH&kĖ}X%lg8n[+~f 1HzNG>ebHC01$=0LPKHzsw}JgI^:|:qQ=eW+ I]}V&gDM1Ӷdy]0Zn3.Sx <58-:~k]w&Z:]]*wf +.L]H_IƝjlN=+>p4G"6p0;/M:q%[8n= dɯA˸54A7 PU >lViP*͟Xk[r[Ip84Eq.<Ǔ[홐Ltk.W7}D7^+ڀF>uz΂oCNB3MX+Wi1Eyl1$ +Dt{=Hopw5w.D&?#s&q*w|Fi`m@t76r̻}Oq*7S S,S' ƅ7[MtͺΥRYP<߯ßmު3֖Ĥ (rpYLurfuD[3YߞQ =^J/77>\v@vlmC -8 E1&ږxidF/`i2>ľ!D?K-ķ)~/N- c zO:rrm3*p z0Dz nxrwmGHQHJs3y,X7O#%0Ղ}̉eioOZAMWQU5#ZCº X+ K7p/%(nA]mƒzF} RKfbQC}K@= [p'Gzvf2 Wlu)"5@''Mf0Ac@FZIHWNXc˃ GK’ _/ɍz"{ #L+y#=>sk$:çE[LHhďHXRFi34@!i0LnX<o yH=>}V>B,H-|g:I DTŋjS>TP S(۟ZҜ՘{yۋZ!arzf#(iZhJӬ>26ֹS? iy ,-$Vޖ>:zɠIHe~_AA,Ok@haZyoD҆JHẄ@ |r V>CK߬O4#`s@aH4]fFlꗴPDB#?=i'o v W̽xKZwE0/|}c e:.F6+)0f1,_aLLU%CB,v.7._p8yݠSp f9m,6vB t{6 i2"N޵YO.*/[@yߴ뵴L/MM_*hb-KZ[=yʰ ó,|Qe;;a!A)[zE h"CFCg~8ܼ[~ws N d뫏.a|3=-ihpN!qKWzD@[@sP^8#yw˿$[~ϓT jÝqS뛝4S!4yk:,z흝8l%z:^Tjw\8*Yb:y*Q%K3h/ Ui b-VjƆϪ4cPu4 k|^#3}s6锏 EI9;*xn͓:zRMˏzΐ^Ō^3XL;4,Q@9!x'v16)3FK5>"NMGfYj ogc#,r%_Y 90m~nK/p>;Hr`(L%v5+Vv\ڈsIQv.үgWGɌ3\jHuYhKFS!xZȤ~rf65;BW#qے\\Nln:i+Cӣssvca#b'>n%"同僄:賒q$VTH4[?WܰĶEu` 1t0fb0&m8'I@<ϙ%|x./RsΜ0~pTK]/+n6bX&q~Vl\,h3>g9&A(dsXyCr/8X%ԉH޼p}D6Xj{m 2AJ-(dD2b 0BhѢ̱BSCPQxhEdO]y;@X 𕝛քy'~zy,?:yrt=_ȋ%Ԫ|tA*8tXC1NPOC{oMbux x- 8+z䜀uLWSkN.M8wzPH9^žrlFi'ifGlOt;]76,N{EoݦR9g ˗)͚(97n(O$&SȞ+⪬ EYG!۠SHA.Ns?/TZ6dl\R\LUy.5F Ip\熂eXOd1i#"vp$3V8 D(oٌ!r̯e&"nL?2@}% `(T3):y4RKܖD?|_ASUʹ'gjAKz\HM|13IKhTWZ LZܢVNO`蚹̲)N]Ijp;4YI{TZ uNE7f@G̴_A |MNLS:@#mx 8jQhVQmU5N k^~S9ɫkQ[C_j-=Mf_3͢x(,x^ۜuqQE9IJIcX0GLf z6OO,)[_ _6ɩƊ@-dQcC,Yx ◸Ϊ~+@_V:q,^q3UNPDSU+k*A 'J*iMP^۹:FU:/їeB y'-P.Oי . x]ŃnO!|Zg"ߞ=0[d岍o1^db!гU)}Jmixi8tMazLv Q1t Y/3.{=N_ z } rrCK2}j&L'to=vI1Ƌ% #e'Fw&V5ë^!ٍ _SW- rP}7멀_8 huH׌ ~HO1ʎ<Εɠ֌ (͗׏KMUz鎬48$?A Ui먚: CrIä.{m1: rba ߩtӻڊg>8[?ILe__E͑CqmsT@@FieStu?u)YIao0Oskф$=-%q*Ib'75fPטZwbˡJYP͑2"9謹O-us <}u z<`fMUClcP\ݝcg'PooIuyiDᾭ5jtf"W47b#3{d+no]k D}I[+OFץxJYXe`hߛRE4`[>+\|)C74tAR_uyWbRgFX:"#[p.٩Y[+a)=X\}o0d`2Kp/K.ٰqSǸ6%Xx5sBZˌw^j(v 3Y0m4qQ !gv@~/߬#+ d +DvsZqGxr&\gFюR&TuP%,qI'nJJ*caf.67w,D#hPM3D*0& ӥ ŅHSZ|KN?"-%oo{]XZΚU,`gGKg5rnn19[AiqjL\˽8.~BL`yR.䬠P4BP1U`hhu :%5iGo3\BML,-%s-{z'"w4Ƈ̋^ZHqF?,1/=ɯ[Oj۲V!6 b }D1WAA:zn RS0Jh=gQԦ^P$W܁1Bw։lԆQ#Cj)3♆\^wks(W#qZe016~[U2 4`~ŴjnN*3y^3:tc0 '"hQQ}憽K7jC%_Wf2 pq}#= WxG'ozNo%54ߘEҠ/>'ѝY,%8avJsuV[4퀾7ٴBߊtt[]f[z1+X挦|wf'(b w+eÏ{b} I,|Od ֎)-ġU+N9EQ-~ QcsWrPk0d,IöXdyBQH}S>tͼ4EVv}kGxP>UM,czJ 8dW׷7bHp|a^vV_D } ׅcLt.~9d_Pf#' yD]imDM '1vĖc!L:',!koXD\dAIj2]A12`9Ӟ6DDm'l?-O[hoƁKpޞH;+5S&DE@ёdez)%BU}2~1Gňtixџa0~vheF`F& ƟҼ Htɨ̇Ap7#"A#ͼgQO\λt1ƒQ4-D|vu^f Bs_={?XXZ".."y䯨Q9oA.SӦKMc%"n1 XN2y{/LRQ_E.ᑣ|-l\ VCɄ]F ź堺{QlHi[W&+ngz˒89V'~͢\Lv(fGF֠6ypsCbv;AQ%AN *orŨ;$7۶E`<d-p: #뛨a%{8I$рr>*"+Aj0dwE:"zKS|^&5(cn&a#>Ӕ#vOb40\_-C|c1ڝ6mMWW_/M_o eqVRH'1! o~Zz +к!Jܹ/o[N:X1jٻerX#2]cPwEVkDu o8:w g a rSUm>K~<,,=\z€UHʧ})Xu;uO &6ʹ3#jb@rUvMlm"Et2t)-U[<=w=ΚV~ZMM_ԳSa3"D Tv.Acf/ 3jY |Є5F] uT$y u}JCY ='Mbl<'Qjak b|`7WnK|f,>6FcU`>ϏjmN:LCV|VϞsϺ?dJ;˞S>aʓus|H 1w:oT0rEjKj7r" aKt}meޥ8fvrn.A߆[,ZG'0T{F=z"?J6)RigePJS\MhC]Μw EGk%6tz.X,?-XP:06|y0Mi[پZ4Fe4BB%whĨX,sރsX52曛8z=r3@TJ-煮lFuLk<KV׊w,o{ L?XȏfXFN[[aʪ$a O,B ų!Dj*;(La])D@O~`{9f/*d t\9-$E5{;SG3[>pY:zp K.6f!9yEVw6C~F>jRF6F8mz,$M?CzaAYo+~_տzIMV +)2~$ա=Fhl>zC piۍŁe3yGG`KfK%RIO´V` /#ܩpkr1dO'|FO?e7˄ecIm#&D#|X#^(e^G^*`\탻gŒ.ִUDP>i7(nRb` 'iwh^3 hk [T BtzQ!&g&MNdbF wH]q80l =͠kpEp12Λ5Y'L/f9vDkU J)킉'=վZxm?N2{GA5,;[5,[>~m2>zb)u2y~{iQ  B@R% }X-*;~8~ ۦTG ZӦ: f /e*6| e@`_I6+j~h{l1XH%(/vu왺M|x%ڱbd#7aCh$CO8B"͒)>7hȿ3sϦ!lg'هg9"i[pHU^rJ~||k tW׮y1.Md; N ckSKs<5^?JB69|K2@~"+6on>%V5 g3?j+~Z+OdI :Y>WV/I"VTuc|磗G@*WQ\'ie =s ~ %C0`Xǝ ̳yw QG1@5 (_Գ$x'BVkꣁ^VEt)ٻMQ6TFu.aw0NCQ~xK)D}ows&Ĉ f[S˦@F ԁ]^$Mm)}RLa@4wG+_DrDIS'ƞvܲvl8~l !;5v2Ʒć YCr(ArkI1[ƜrnAsDبF\X0ujRڦ;$ x: reڙbl%j $_VՊDz|?J - xy PJ.ڹ<"Y^2(tۮ}h6_mp+d 1M$X9Jd,]f5җ1eT buB6ЇC=IYn#5rIذnV.}*K`AN=B_}8.!!zfũR+s?Q2U"9Z.Cv.t6y&F̉bL=<q 6gdbLe0d]OrfߤAK }tmU#TpFK\a d|DTMC|1҅)IJkIT⡥ 礝c_bnf_; %$;V !$gpљ!{ՠ[S,ا<T:D.@˘˗oƠ}D&k˜  #, 3t#;\!75Nov]S9l$q }kJZ^`nR&~e4^)DqH{Г߭@x1sǹHpW!U]rJZnyoի8݉aKL/GGSu=DrBߑ=w#XDNWˈYsStH_&犏W6׌#[l'5~kswYaNinўZ^$'8YRBQ ;V vDbJB V3:Hr8%:#\4?J~R?_/ƱtMy3^yNd,zٹ;|͓.Օjw+-&_Zk¨>17<9@/Ϡt@b+*=u$49EjPxWG!'b"LiU`{;/5\ f3Zyz{;~5ix`iMw)fH~Կ*y B'|Di}S>.w abonш6 Lb^:y52qo}Wu8^ lnkS !v:=T~29' K.zzI=kL%jV ZRssb{:<#Ӵ#G֕`ūA"?VwHc9> o#OPb8mۓuPEP#&§IVj5:].mT#)[ɦ螂?y6Ĵ*\~x="MkA5WKd4DL/QsKU_01vNJw,Tf,{E xr&97ʂi(-YPپ{EԱLrsf\5C-鲾7̝5 sL톏Yu"9Em4py9;lb2fm*N8s[rh&w,fso&l˱))+7<.JPGm9Z[I 3j#{@l &wwю/,zנq1Bc} |gkj* %|(bP я/\ji4@wE .YUѿy7Q99vJg zxӕ7cE2[,ZiAb~1PMHXIșm6-~N]0lbN!ICQ%1?"eN,7|;07U_ \vyM7"G / ٖKb:a1až5nHv+PC^_(lE\|p>Z@+?)&KLQFW_Gm <+iq;GDe?Q,[]iwBQ=E3sD+ 9N]kӾ~mOKUZ&-Bs5zOZ6DݼNCȾWIhxV,ǝ/}Քg-0-&y:;'FǜT ^T,x㼑GeKwKܫvj-)3Їk%Wio`ߖ 󡃝զ,rT5(`6 t3Q`jFU~!_ڜHZLX#w^dbw,oPLeL~KIү9>n ęV#Q iWQ @gQ\}P %3i 'He wBjjp!WO3k vݬV1BnajD U b+ \C 2/1K&iXse3"c%=څkҚ nśO@>?285W8xHz@9˖Љ즒< #BpSudӻ8@ZLa'dN#o>։{Yw_^>VH!5hF*]]ʩPj+gPAV%"8MUAx L &^} q~9 `W_2md%`\Ď,;l I+4(}RoŻ7SomɓPTae/ધY':XjV+XźjM+ cW_X>꾖c RxQ[>oe8х`yo2-GsX7/݂yZIɠ"PhgYU|A Ka?fu@Q]$ 547aֆWFwݩQ.^7?YkR~e8*-6 !L};.w8 U^ `@JXoy#'3V 8$i$(["_z^l=۽4*V`PzY-/Ъr47U"gh9aMaD{bl55jYRh;/v' Ml'H%ɌWzf u}| ҝ ;?Q gQj A^6\m=])Ύ3+滼2m]'*BrRA8[E5 ؂q$ݕ4vAykt%gV:5##7D9`=)MEjཛiI/tMb238Iuqwvl3n;u{&tQNw%0m!!^bDW޵T̰ˊX%v/gm/O_syh (ɵq;$/v,z~.'K"KiZ6C^nO+SI2.a6Q*}#QT"\2ȊUi9+S=ܧl!jsP6h'~Ak҈r@G?x%M,]!(qqWh$_T~mr% uhT .1~4W)?o&~\M-xtX*x\6ZLl+sܰ8fP=vLQ0k)֫4$Ӷ*=pdr|B7cE| WLr))&X*þb'1 @pa5Ui4#J>r*6zɉR(D[%aaqzJ,}yܕ*3 m^0I=5,_C G=]A3f7Xm@zvD=%}ÔMhx y+ Eq?PKĸ]o{.Т䒘܇DE:zEPW,ta=KݸC.J}I E { dT[eilɗKP[2'V1-Y CML6K2{ciwT\X_;߃8MdܧR؞(yx$='dR0`NK> ԪЮ&g+"; f׈g%i,O3kCiI.`_D): wPؿC+"o ^/!r_87=BA|ƑͰK *QLj%|`g^bIOY@նf6I@zh+V7Q ז0dυԁggBqFӢIs5ݨ)4 R>p0>{<$nmbUƜt2L dMc5%!3c,BfŦtMOc3K ^w1JR؇*yU!7>֞HQuDS)?F9ć_ÆTնX X4˶]N6=<t=sCY NGb̬%5ԮMOXa0!{"!'&Wn vF;މq $$3en7nPa tV>D$he\G8GYmOV.₩Ւ#poWNq (XaVs f q&"ffFLFiTeuC@~ ded  [Ufxr8*s6؂/[9u 6PW,A=]F4d>;~F\5V{D37h*W#)hKG,j[:Zj2¾5X9QQ ccIspZew`9&KحRsۑ{ 6 s:7P6ZOs2#ZʍX',-پe3/}12 [$XH 9.U9 ǝdʺ}접.xHȣ##`L"F?X .7d?9,'pX`"!^y~)<Sߑ#N|ߡKSҳo#z:y%sq cfk]θW*R/4[e vh6\uF*cwVsr`qv{`Es}Y#7LtG˕X]]dv?zcr% 9hQmPwD`&  kL1TV ma_NhRA93 |ЭH *F6DW;AwFh6_5ո= ENi<)G, {Չ̜ØpRvG<$M1-՜.u? oB(TRęT.եs4jCռx @$\꬝ӂ5Xv0\%3aЫ]ӭ86u}TbB:d[h˟Bt4ЦuBkgY1֚v"URnOEdK>مK_'ѭ]?>w!ulD3*^z~ خ/ƹQ&j SifWR_%2Uջ=ԫX>{ETMn0L)]}9U .(̗Y i XjeNa5@ i>f}R(ҿC{͵!yL WV`꼓#,U3E_{*1U}wX䴔n*}2 ljgt= (f1oZNg/\ZwzrA[uid.vǤg' 4%ۉ}%hcF=`<c28ɿi; H)Db+ê],BjXP'Ĝl햾'0b^jFDD& U[Ze8s+v?GoG9MI MɍK6z|!O'hxY:Ǒ\#ǎ?s\[#ߘ)*dmJ\R0"~'Ӿ)b}d#' ,S?.Jpe&U-5zh ~Qu 0{`Tc2q$0=?"W56p>k~"g4X _÷9\6#K4R =LjWs_f.4yE,m$)f{ 4^ EO`Ȟ ny̞֯ۧIY:\rkص$],])i/QtZ2h~b@FV4RW36v)͛ڱmsYB);in3?(Eӭ|ޞzy7mГ`K|/lq􈲓'2[u\6Xrhߏr  o|P|0 T599+̨x{x_wI9TP)W,*qٲGr+r tdnu\ŕ b}偹 S>ߗIi2rI) JرuJfo%[=h!C -;dA/@^*E7Iɟrg^emm-"D$]zM̋04{pA-.MߏmUܜVu!]Ԙm2)2'C [UBET"5pNGKPd\WW*Vy j-E=RivNr8jj=;WQA\7o喣 Y\b gwzH({Cah~ƽ~ڏY5V5"q= '. {~𓳁.(H+Tn's.UY7HIg9iyґ&9[TbMn:"7iNh>qߌ&'S^q!qr̢éL7n?r=W@;̒,xs*n*K ¾Ii"g]FG?Tk +6a= ͨB )Cš{'#'(P 468LfiI٘|O(zvijН~ƳiHPHyo`Ʈ+GhͭknpR_3)]= NXP"ƚ?l$'rKU~ m3hǔ|~#xʙJL.DmbZR𘼺߆>4 :y ?Ni!2 iprshlrNJ^庾<+ZN{Sda5!1t:eɭA][2 驟{@i.bP +$mNY)R>D2]M I>t'JܛLYcO-z5+O  /JBl ?h% ;u{㍟OV(]e)#TA4;~!&&`LRQxfk? {Pm>u*;76ڍڵ0~Ug;]5.p(䍁`p6yv,˦,n |rY?=J`xd(4Ab' xRJR9 ? FWs|x) ectax!: B"{kC86٭G-ɖr OBT,.5KeWGJZ~NAj0wr퓟ឆ^~2(a1 +Yoq52>Nq (04&qmD}EΆ b A-L.d;P D;(i 6XG:3H{@ܼ\|Ȍž9XB<&>'< ʍ5{F 㴶Wுyѫ/=}F\p \N2&9`YTJu]_pGj:?p}" `=Bm~ Wӥ6k߬1byt~ t^7Vǧt:0 2pƑ_R᤻kGř.ObFJ/MAb1x.(:J|_\_!Rdn*"vq=$/f"G59(AL,m0R4`/q3-陈Ăh )LQ;.[|lΟmKݠ9rI]-?$Ii  7JR'<|- PWs\r'R^R.鹱v;Ǥ!Ul[!ApԊ 6VPs9.cFkqcg>8~4pC>Aĉ siGjS X̚LMi.Thne"|=aT죃\qwHrTĕQ4$JQF4@xDEg>) #>SdY{Q 1().fH0N N}2rżz )5YG*XbQs ݺ>cV}wB~tjnc ]Ǔ]Íiہ1_)cGb8?Ey 71S^ehQ+n'8Kh)&?n'L5)yG"GE) \OkA?]n _z3X-( @4";4;m~d])0X݂,W^NUm91?vJt,Y2QY~kMx*cu^@kEaPY;UVE+kpx=k4*qI<4-唁1oRߨW%~2E7Iͅ#le<ϰVa(+*tꙞv&H'{{Cst_w}JM ]Sb~|6g.mA8%C!c(`.+9l9c7n$IC~.G#l5VYɮ%qw˿+y(P3!sݩ$e7Ģ]o[*>,eCńpxb9ܢ?lqAWoPJ*YmӰC%S.|a7qٞm/-JOe?AVqX7jLdύg/>quI91^H<+nzyIƮ}YA}1hhH-_ߤ(r_YocZNEM~ɘ d۬+뼄s3ܥj,l_#=q({X.h@&G){J1`)'z{Z B3> 9N0V2\'QDZxPEpɒ'[\2N~{'<:(fc%CdЪ|)aH'n)5] 8+Thp{ A%$A߬- IOg1WmIUGIa\4 Gl,RmӢNsJ3';\K^$9.C%H )j9%7yy|0ש8 9xg\?](Qi g.GSq[:ju|u^ ^fh1 eX({1nw;H$nU(iax.ZrYx@?c-:2ݷjhsz8R' JjaL"2ABy73Hš]XRrctK)4sn%Vc 6n&gf:6l _AЫTǑ|?dV`k%9U(uW77^7-@&EG1U4li NR{/QF :?08%@jiUz0 ] e,)`uW d.?8+Lv"Y>.( &`S^F#)t@cM,)AV{jQ"0`j-!7XbNgIaǜ2S+H"}]L҃ӽJ, !}1XG0k# ܐBޟ$&HfJ/щ߲''Ûv4n%:7yc⩖8'׸P8=]քJ2]GmtOٱh 2V]ܷXN3^Њ=p`68GM1CM(`Bp\Z#7$g 5lMmLk}֜=K5Jɣۥ z#W]UV IA޿=pA 7eKψ`-xE=,OB] Sx(42y}'SnYlֿF3Dxzl.5N##=]2F\[y<| ۑoNU(pENTK8yZ=Y̢2+-L@Qul]WR3ncئ?ERLW_Kh}e=OZo2b 50"ӡ^iOF< R -F#1}H-N(νNcq d]Mm L_&V,ts|_ХHVQ ˊ4|LtU;[:oORuyw>eVKׯ??o o|oG//IJ-\7R&>vkӯ8<ku"*f@xM$EpM=fl 5l&L I6%a!Oͷ}.T?Or Klcg^R#(#vt"M+֫s`>+/En%I&2LwiI#ms=M:\y2{(e"hjA[;4Xyo4f&dC q?%FŹM4YN0lӅbxk|~V.ښOŜi̚1O/s߰|:瞎8*l谆B^Át#;C#? *'[_Z*ݘȄqMUuRD  dhj4:Ab*lP:hHdZvrFwE6~\ȯfYriG(HEGptSERG*:X*cTO$Vgϰp5>‹ͱsaXLJHAU}yz$ HQX!V yGK8A/Y VĔg;Jd.fSw_a4dih~F6m,NJ&g]S':rJ1(GGC?U%5F5UP1MKYs>pȟD)lKf7tW\ԯ!8syq'Kʪ7N<=UM2-KQF2 ^רMV>R{g;8H3!9,) (9Jrm? *Zro@ql>Oӵ7^HeGҺ<%::*V7"}ɽ /^)jqHz  O-"ɫ1mRwiUR^ .IǶ"8u5fհǰ[yMNpfะRW!Â]Et+lYr֦\Piz`)„J *cmh,f=rH,|Ywp2>}}5m榆J@Q$Pߟ[Z\B#-(24Y!x^YO5d8z /1->^ƒ1ߋ-A!f?dN7/(57@ €$zH\2@`q\8ݱYY}ePIDs-m$˿-8O`AmpgNR/VMi3Q $+Ad/X2^h w2qk Esj?ځb$PtKoa0vscA}hkΦICk(GZWP÷WCoDK3?\ښH۱7$tvn?? Qq,$ZLS2nq:Bjhޏ-Tm3h} DG⠓ BٽQ䥷6J)3qX1/ "$mb\L q,)E`C0@䯣f4HB ))\.wpJRjX&kN|waT TgVh";7#4\ץxuO#[9D6 NՍԫ3?2g7⣵>Eb - r;Bo鍲 JG`qjaf=1b է1wNޯmm 4X..aR .Bt;Z|՟(TtDhIז{[]}J׈l1S]1 hnwt U;j&WaG2nnN_OQM+.nJZ7[kYpOhXQuWF3ỀӓW mtgv3splY 1kԟynE R{Q68_Jcv ӗc<\^2[6Ԋ򕩡PnMn~Q#\]PBʂ9rA^FOW!Iv|]#$@|xf,1FTLy2Wwlr)Z^U0)GU?ut(>)VQGIu[&,Ua/V<(+MUw4Hٮy$`Jh[&~+Ts6=KWJ)aUF 2.u;"$۰Gx?_bgu&HJp) W$_w`z!5jly5><5l{X#@Ȱl; . s^`A/&Dͫ$܅0mc/Tt + 2~![ =X&HZ^[&_I>ZV;;&MhԞiHa_4,G<86-DZ8ʘ"8f">x`ZJg/Rgya *ŇiΘiH 7ZIq"+l=S}*O`%T`&Kޫ mqw(# ZNޢ̑i) w]]~+|S?ڵL"IV/aBE~&e) u8  M@pRrę2/Vz\Cc$1jՓI U&98>4T[bEmXPnT8C%GQF!VcFŖ+ PsIL92Ŭ^o+^N1J~Z:Q:EuGo6H 5$h+wo p"_&Y%JDVda5*[7!t7'ξIݽ_j|D. }k{qLINAj7jQӟZ;DS} o䋬z)#Mα4llZYg|`Lz>u#R'<=#MV 9e,- |K夭EĪKeF WsڶdTt./seƷ4ԩvoq:l@}H>7#\h"&(p`|L M,&LS+$ւFŕ3"D*,%|26[u ҪnAY'$eꜫn|21JZ;(`^M~ Qˢ%vfE> &pWޗZIWGGN2K/>'M gMr*ov!a){x?sڴit})ewsE@ёKy``p@b.rCl3ccOxi߹>PTCTf@3ܯBlB~ae|+ ͙ޓHؒg$ae{iyA6^Ms}; %|h1/;܊# "Jt:p!h,[uYwcuğtPC[lE ͉ˆ9tpDSbp6=_ Z1Mfk7'B':~l|n^x>crsyW(A*LEa2@is"OwSfL!:Ku0r8N-E('I+9CѝDD`&Cs[fZ6qMb/GteW}䋟1 k?wSBǧ#yo0!3{Xwz7GXdgJ t [ĺ *1+؂Lmv/;*o1јyeIRlRB⾵LZE=)Fi~wK.l1 0KnT{vN gsJ4-tXШn2=w\R$g6}_c~r죡cFF#B[7nq KQ^$7_T-j(Li KZrʽTZ (2q> J=ПqJtXfZԒ#ş >УO!@I|jՐC P<qGt Z 6Ӵ5SP{[R2KcUP}}p ƒV F^3-a{$/KyNjjpJf58W Y}=Q{"Bjs&w=Z6;Ot΄*rtJ^0 v<_ REjj@hV:.uxm " z+ )@b')Q.T^?8դ17z5SKۂqW+[!/%w qVf0PmS>[y|KO@-k EHa@{S<H1}꿱wf&?j &`3 *F:{ 'g ,GN*1't=(}5s,⫀ }hg٪,/I"=!x \ȩj<(gs7Ѿ*5賅6In_K9@IJw%$/+#D>y;_'RA`rnv#C;etΰ٧<͗G D&gcet yݞڦѱ% ލsݡ[S:XvjqgXĚU[ ?ua?EEVsU&ZS՗8˕^Tlc+A;5M@xM)0! 3|eNW,/05&=3G3|RZc21Fq$O4ijt渒·F覶XX1Fg"nIE\ q ʨoEkY>VeNYB1j/ptGzxIy6>W>wbpJ{ϤZdۊKfO)ܢМ-ڄx>*w}_]ϓG6L|a5sw<$*r<hW: IspY,5(b֏ų7,]-5PqI굡 eĀQIJAVD]\xqAeA\j@UCc(,wKΠfBvs#-ʒ; ~i A3W6en}׳@.'1'@~H>墵y/a\ ?= r-]?oۯg2~AA&_'r?<]3P(P6»Eűcľ67s\]Mڻ3Z1fNIn'tJǁ31g)FL6Kη|2DJ*bGy) Saӵ+ۊA4t! "`΍ЃNJ/_g6 Q0gҀeYE@rR pT t$C_~)ivCw'zRGzk+8ޣ+zU@@=!=Z+&wVLͦZp50tu%=\?/c}qSCZ]23.yЈQWսVӋJN241B8 V7TwsC)Oo| ' ](oH( av_nfQDH@1""X([[߁Am)n487~RfG6x?p^nc '`_y4ɔ?#$r3z5C$̣6gFX_Daj#-1<~s_{9jf(.-j=FLCY3-/1f71v=%\Z7 6H0d.>>Ϙmf2JErÁd}4WF`s k9kdaYQDh,G,Ψ}8)&6YKZ&˷x]Խ\UFVecP/3pBjwB`z3A+tU$Hپ.uvc=" 4  nIaf5|Xr6ДxOx MQN CF}=3cK{,\$3>.RRr'j9?Ը,&0%nY 'ez.a4 6~h6-֗ǭ5S٫L)^&q -!o/UvBN<1jD^Ҟe#NR֮W%cYlhPs\Tv|T.$mml6WJs YaTY]cG+Tomy%y/[{B0^8 V E!lK \H-%T'FkD]S =)A zQL\+3kZt7J8)2(n_>͵݅,u1I;jwE̕, SqP552cS@]|c;u.&m^~1$<0h憜Zwk$(֓g.] [ v~.ي6$Jr*=h(Rax/2|Jq͟fQ9[JnjiM D3Z}|M ɧ#I!咪Tz#nFhzr.jz>I 8 {gI5rmJq7Ԋ?n6Iʕ'q -S9g'>h<{iLXNF/4cY};_zq*3zGEqՆic:>Ù3HRJڢZ09x~ԅHq?&XUcA!njj'|3 Q%2gD.,Ewr1ަ55=4DO$|{BSig\3w:ZCa/kC%M q+U=ɝ?aLcsݾϯ"ѯ{l/Oq8%r+jzXB۶E/DIQ>1qÉR ~Qk-*sS_sqg9[HxܲvU, s|ϒ}J<~F쾑R :J[,\^0Ҍ a4&o]7U ŰmyqqI?F>Ad?Hf\b8|sVki(_7ҢL{auh:3qu $ZbNpgr{ra)Wg_FqpUgrGp9V஡쳃,gQl/-)a*^է|)jJ6M^݌nCiIP&OuQjnPR d-=,:r1tbaM! 3 9<'흳\Wvvq2J⢽gP^ucseȞer:)ƨ3ƃLf0Wc8f/VXݹ$x0pƉCbՎ.[z͑xXğԠ` apzHJw5`O: Jh7n`]J G.X.m%:Q7 Uݻ!h$N } PYup3D~?+DqWLC*zg18+kRkM, er7y-Y,>\ER^co`Aa*h-dCh~ژ;l0n -'gM$$,1y2}Y'FbP8&p1br<~cdޝ ] kXZ+0X0 Vs!ZվiVE`Qߍ&OB|<{ӚH G+ RmIt.R[d;w¦&Jpc1n|{t{,*%Zy֦FI7miUf`zVͼi8O^}HԖVۙ'Bj"όaܾo9¬JGĩaoOl>. Mpsb@&]r"U!gFF_,G5y}1Nמ H#3 ?ظ9zI,㾓 cy+ةUu <a]r-9v2VPq®T7P$͏Waq.0*n?OlVt s>2g [&w8mPNQb>jۙ:Ub͖uh=kqsAA `|xK U`jlL&'wջj=̶AۜF!Qq/ s !$aszޕ=x&/(\TdZ'_ @$09 @Bl5f1J,&('F>TI :Vy e~M' / yW)I~/#`?C@O8 *T%EzJ'piMT@X + 'Dہj[H?GF_n/r:F>a0|vAW2>dsH)|+)y*dztv$ԸR ;o^Yw<}ݥΝ-vDPčo^n&`R S+6$*+.qt'-_cAµ,aIa'jV(@/A\dd<%k(X}d9\/',#\hfaQkZT9yD.;dxQ>e:6,٦!-kljc~zfQ$uoJG1?3̨lM="?aLjjuW}*C4./%VYPQdؑJݣDy؜'yzVIȋ=} (դLg!tC7T!Hp:94X=6\a` jc29웚xhVȋs#4E>y6EBnb]֌9kfxKN'8Ri@wBEԕ&4 aRݚ=aWqd'"==ryS +aIa*1g[3 Qznj "!//,HϹG/wc7t,:Ѳ${=\:1a\cqK6 .6wgĐ cۆM")59tV cwÇE1]CRPk+um>~ӏAzo0&g* $ Ԗ Тi<+HjL%`'_C ai\0k& S=6/Vh: e? >CAH*i7 1C{2BNn۬$uk.Y?4u'~g?bb),k:T Tvb"4y<~ꆤHY~p),QCz6,>٥#8YȵU@Ŧ,1+]_R"-:\LNZd} ~@Дe05zv\HϑvOC?6I;]ɞ H:LH7ύdi)'襖 Cqϭ𴤞t oeYq3Ok0Íx:79C"!&!Gݡ`)Bu hYqGn 4z=YdgԆpZ-G a' p! f3XEA 4јy+ NZMQl88U1ay#a%tgW(AO#J&fqWr"@JA\7aHMv&D48:bh ?LkUa6Tb@VAHkOÙ~aKK=xEཽ Ts#Wzfh*sxl Ukוd1N jr.1l*k\DَrM8g&XL$1a%"nxh$sPIaZA6Ef 4H/ SSb4k2ÇnA+ff)K(Q.{:JV1w!dNۢD8nH\Ekf,H|/gu]ۅczLgBCg2ȁbEkG~Z:51x&:,qңWGp>W<˅*6*ypP4%>u =:OȹkggzRm)[EkIݛB쿹QYlFHOWh"9t[?#ao6t kWr/F%f) kmWMڽߊg8kge[3  P7fЈ\NÙ3QCC/ -McM7#f`FQP]P Rc6:ӮcL{sS p[ S@UէPUN73v\T0CA=gc6mLy&#JG6F>B&Vv)*ዩE 5gβRm[((F8udםuDޟWZ}3k7UDy PT (n]x,$>CO#ԇWƔb}C ̈Z8N@<eALv4v DS>TMwV, _ծ[2 hZJJۯ[XQt,?nۓ/ TB>Er25NJv-P/4ޛM0-&V@6Ӫ23) rڎPݪapYsV"SGB$U=DCrwcFILu24`!3Ҥ*aV;fa pL/-@q9'Ƴ*y6S1Ēi; e$̈Fܨ2@@`S73d`eܕGDaiS0,F'3Vo(sX&V wٞ_eC]d0DyGC1y 4xo'^|VYH;>Zxp34t/a2e(Mף$_$>f,U1"ow݋8ID AБ&ꢛP;a:!sX'hz$h$w ,8lmm"'q~IX֋̍i84i:tWroḧ}@~~բHGpoixgIĪ}p=3¤=?8Z7䵆EM'@JIRb=>\ F^̬Bf=Y3r ֶA6g+*H)b&c^Z7ך".LQ g-N/ڒ)Qd/vثיqJxe ǯ5 f4[/#j_4<&Pxٌ< Kߜ>8 3oum9"kEB!f$3 )4P}{(ٞțfY-g$ a٨8+ HEpartiU`kI3AHXXpjs7\{_gYZڀOM~9XZ$~/Eyi_wh&TՠH41&rIdDCj 8:GTu9gBiɴBΟ4Ϯ4di#=y\:2.ՖBS٫=xgH<*jUM>@.YCYGFT zetXH M%*pEAz|[  Jdp+JmH,v %,jzNm9ʉ߽ PThގ^2<^ .[}}+/BֹS_=F} =0s >(n]WC 5lbOQLN$ #@ٕwG-ClnŤz'=>/~$(^ rC2&钩G5(FRnKu ۋ;h uL;q\h/ 0Aj]hnlHw / 쵘1` 4 Xs**(xn4=iXPY^ ˏL~Zt_HH$1rRs4e}3mY똀,uÚt\ 謁0+ GHQ<]֧bΌ$ Ogl:Z>5:S[|gO GS.Z"pʂ_ơ^yZr`PK5}aIݠWIa􂓡#T8A5`11XGI0(p&\{zʅ~w,*2u&!3U]1`TD=V,>-bYK*Uxǟ=[I4ƨ*ץsyukў߽\im573U?"x _>x9l~[x4D€|/$j]0Ol[-E mdD_fg ?:ʓRT*o.ڡ@רK_zmfRs{#S5E|)T!C;V'w]WPW/ !N\Tܘ8ƱD5_xq `9fgdEf疾>$WmD4}~ii&W!%O3_yԥN={Dh3ӧ\ O^ 'OWl$#m~k 'X~(']ją@V]֑z2Y͒f QfY撟Y䩣dnd̿ő%Ewww É4-J*F-Bg~hNCxFdz&5kf( 'gn-:Kݸ¶_Nt)+c7Ԇc!4'0v%j7c3a$b6i9;AM zI "P_'_b@q.I]r3k2k+I:xd5z$.~2ZTRʜi#  . KuIp8ßqGW+QHލauDabOs}_ic09 jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 ,B|nTkK eT'u@.: @4?;:P[dn,墾ݘT!U$s^԰u!Mr;:^أ3ZbhlQzB9Kd8a<`ΙH,=ۦHaOx^U}URq5^D#·/7|] redD2 ~˱yNVԯl`!2ڔ0( !#V 6B#UK_U2x,$Hv\@b5駆*bG7isQK]ˈ"#dͩ1LpZ~a (N ?kގG H=3 3O d r@66!_Xr52*Y[EΣME)XB@"=ю|JDTT#ߨCJsm@u"b\VřWXN] Yd1́o:QogC i75]aWr~Qya'jLuLY/9qq #*P)ag|nCr/XͰҧ &\ɝ%vh{cM5MK2ť=ppL1xn9hO%0OH!'7bxS@WD}!XE/ u="2STёԪ8,.Ɣk.%uɓLw|ʤO\HG_B1|~Ńo+lZOןΈ*ylXzZw]gI3gXcЧ9`쑄H!]\G5E!p==FjxADE.} 7=Xv&/?t2RE80TF8OsѝgVi)l-S!~`[cWW\|F x%vEhgF*~pd#͍>β8(<7A ~RNOj+ Q'k$^zF&ADNV ›ZzozJ ).1q̞ 5URKJ#ʼnd7O|^P>/=UڌNJ%$PK {YGzzq8#8C&w̤6 M4?yJ,d婃Hw'[G`ǦJZcw>\9,ADM8qD}Cbu%F$K )@'sׯm-rMf;%ְa< H$z^>h|KKSf_ieLV~#"G \f,?^7A%('{aY2ʬ ae0_[ύICla =3F넧 "r<8w]rt>z ?E"ztiGtd7 ' B(“044XSW=l!ͣw:^F!VcOv„K,Ӈ<{;柮2q%ݮBIzĬB(j,+٤.9{7HzBQƁL]ii h7@{q2+(WzhY Q zxz=75J|͏OHnp(‹}Op>6V#ٌlPD2i|T Q"N g-RzwGQoD?[=9i؋w7BDf-QHJ1 40aDdp1y';"oc4 Z"Okvb:b5R*F:.G頯Lgv3[#Ŵbkjyh'hMT[h3oڏRX.AbFy77I\U v+ӟ fF/PJ:`#;yHm>:A eEfIZ*jXJ, uWƚ%&ȌCQq1e!'KS5x%6~9 SLwk:^dzh7cz5JOI#Y{|u^86<S06`ޣ3 0rOʢb|Hso*iH{$#t_LL]9N̬L *s{B? Eg}l(:}l7jeŸO:ijҫ'+I}+.n`?=zXbJ^R/pMS@GbI/ۀuHzqK( tgZaYudĚs3msHQkA@Z 5<0m[re%֊7UvA/ǡ)g6j&|1 #SjJL^HB`(Bm>QKg-ݒ3JGN~].9 oSYߍ:h힣V ,udiaTBSX-E30kmBz$LI kMLKJ)9 ׈PDf΀Ը堔"v;ܐ=r[B<u9NOnk5ۻ&T7?m)+ V/i{6K?EҍjYx)vQH*hّ%*Y.e !^:!9!LPSI"/eРHe{]?wx|@MR{K}ָyfJ!%I(UM]FC[o`MCa%RGk !fEL5Y 亿Z@J D4F;K۸:Ы6MlrSTvCvQGnvͬI_3=J`XaBJG6:V1g9R>t z/ӶP `l.0 M>'92TȔЈd7]tDoJx6zέB!}0451 d"(YNwt|L^ohNW*nEOgi|VAb̂Zv]}'Ӄ\9 *Y11)Z:20!5ӉJd}YDCIž y<)sNOq=s(0<,72v -V~+)|!dHvrQ)2;gx@[́:{叭NJS|A_qa'}k8JU 4 p5Q٠{diHc8&B2I[KWd1ȟե.EZɲ-LwoY۝\_Mof:Q[nR5' -龼07d{V0.uo/݃}ň婺."Zvkc9pV ,ĘZi>sɥ,;[[ProȾ@w igRpYL؈-P&!ii6ue+fS`-w+Kc6R_U6ȿUS!.C}oG@Z@19Rq&'mdu8swY{LfiNO_:cyG=Tȝ[BU@`S0g|UAt"]Wۆ%Y.$ՂOLl F>wҬ@ jB-YR/DvSeu@#mEA] ޸/xiaŠ3 Q =c8 J!C2ܛⴿ$@#^ :Ua_ ;[Hh+Ys>8Q0J)Oۭ. x_sܚ7 l-"ߪKÁ0Дfݜ@jZA!cZgq[kh~mq(~?Y0!Nj/[73NDeqEm[gߑ˿4ׂbkݶh/J1URʨ8'fDIn$Ht+FRR^Z}}}j qZ>9I#$m\h1V Bn]{np[ j<))REFz05o#@eMH {X1)CU3~W}LLi->-N栕77D:4*-LQ3QNTd* ny.j[#bn?qfn~"s}@|^<lγؔͶ漏:?? Ȟ#Q넟)]+X0?ZrjէɹtυF0}JMXTO6bLt_"z"@a 9^uOC N7ĂwLd~8ؘgXa%B3YcxuH^FK1hz|CEWgcx,GOa Kiw5z\M=) eW(VF¸fX4ҮoY;dk_/ǖyYfF'HA8kgNmUo}xM _Z'0`37 N^Nqoqv/^1ID1|6f O܍,.^ dNȓAH Mm+lKc+5EY3A|֠1;RVj*Zh^Pv%lKi+^5LW|;U}Zar7ڃ/$D(@y UgW<۽씓5XBܺۍkBk! oHoo'Pz}!MB ps]Rթ\ܪ(5-H@;l(]6TC4`=GI<,w#JX4H}9.H H~ tk5[y(uNrmt}:/F-L;[<;>o@ 8cS QBY:ݵ&jϐګUJ0m.+)rShR,J7ʉ R8&yi釲-i`'[^<_ᕐU:9GCsr/y"ԝ!9ɼF/)Ŭ`k'rCUHR]PEe\L~}Oizo@e,N ۢ^d .csgkcOŽZH!$W.&Ă{Fઔs/8!C4|A 1UjInN% ԦPm#Q?x;{ާӘT'VENh@9\v"NXKv %{qOU뿾 E _KGXq}+5 m9Н&: I_b-vpHaVK'׎80@J7MT;壄ϖD sct9ÌkE)Uiɥj}QHeXSwVNԁ'}hYt:\GGþ|oͱNbysALYk䬣3Ⰻνqgˇ`1[ID? \4`QVLҋzsA@ZXbG.^TV>Gn;;{X*H<[_"9+4)BI{^m@KTۖ< -͋pse<}`ydq3uYMٴIk`z@ncgkPi,rfNZ2[wqhRqЧ"\Г{m4&R" ⾈hqUˁvV4w xͭ@ hcKlZ!sow8!ps0eRrAdY 5N`BYP# MmN{| :J3,^[8UTGkGD5`/9}9 z1GX֫ERxiPs`0ly݃+X<[EߐyaC'Wg brnѾ(e [e)U#'ge`Vd\_wR&# Is?0m粅zܣt4&1f?BoMZUX N:9)hD:o-h+wxxΟM+[E[՟mbaXҁNui9dWO[!Sp&VK?p}Ce\P pb y/0SUG{2hxvC#RMye*YFۡ7mbl@'PoLd2P'՗1[(Y"}cHbA%)Y3x0ਞx甩IVق4&yfSeTc`fbDOҺs1-BԻ-Am1a*S{gӛxeO|PaM;dPˍf)o+„swXF mP`D:0Y; =x7+u45[kQfNw1\ J%!6&\wzN*Cn3?0#% q2%lL M 6!E˪HoX XZ>-eW*(u$LY/<] m5D>aO<Ʋmw :PCЊdXn[H@ulA\#x:UjZm[7rk/e ߭( qF^QkS7.K] ]8xuW5ΧqcE^hnUup29yy<8bх?1ѭF?_eX sz9QM_d^KVvk9uz}%D'pR͕f:Y+e`Zs/BrQ|Gf5AKK5X-ege2%C&ۮ+/_' Esre %,cXdߧ;a+9h!ixɜ1Tp|Epk+7,标M_V-qH b0E:?ͅg[Mi &IAGY.JѵjEyseV JŬk'8=!Hy^1؍E74GhFF\N9OүUģ'ߠr L47 IAA|묉t/;Ack1iyl}"Mk@#xG׳K>PR|n9Leu=EɊpЛETlJ(G)[R +BZ(-K}\+,ð_[!Z_z dIZwX0z#&ΦȜ7|7▸PhgF%BrtZd=xq\AP5qvS_&rZ "x*&ġ(r皣Xsp hak{Gם˿ȣ4˰d~ :baPK0q쯹;0_۾?+xۉԺ-(~V qBwV;a09a" MÁr)+a~ìUz 1pԶ02.cvtIw؝ ?G06q̽.zP<+#>|=yfsc2lB5O0jp$~ !wGd3&w;(˲GT>SP2iY1*OCQRh=`U [Ah-cyzN1$}1L@zK اBɧb^eEW-E}j|߱Бs3147g'Eb^[CȌì=]*'~tJgC?n-O, KBσڨQ[_ `ͭ{1?7X~$d#V F<^i2ZDd5ZOyt򫸁 Rd(,ӭ~&Uz$ 3QCi#cƜj:"VDC6ɡrY*dU-EXOs[F=Ηf_tʧ@ Ͳӊ(Cnɥ3[H%D8ԟ `!z_nig=):VǰU/DM ,mDuډ>2v$4r BY;ޯ ee_}b'ǪÔ=D3 UJM0޾Rxb-9Zu:]NE+d8oJaߖh N4\WBidTŒK QsQ^[3w.cU`ErM>'BfyMA(:u]/h0VۧU~::|:MAJ3G%Q_ jAZGsF^snmA8$@zBV6CՍ\X_%ں #)K]?J#{3ȃ(9Ri^tz\jG3/my A% q72d#4 ΃v1N0cG10f]$XwOE'V/FfG \{n_*šw E%L[h(9:RQt|Ϲ8.l? .L0Rvi_t63mvDAXV-+\OC|oɾƺF]"]K 񅅇A*e+D,ؘD(moQ21l)4aQ:lkQ/+~YK7HBR:ZeDZ)qp-&j/@XpAЏzQ BJLM]*=iKVgZ]NftJtԻ,E2U)bN@^:H=HB"DvӀ>!(ZD,@B 4ÚlwYZ0ӪI#a#NH"C +ĉ}ohVVcr&.)XTͭZ'b.tve pW$Wvk\sGߛ/2U|Zɀ̼_UN'0wZxD#Hݒ `N-Ŷ1fWiR*DNzpy x( b הE#[gvDҺS*L7Ȳ;џ'~kjO㯭,$20F\V{y/~c{$x)_5/4QDC7F6oqS}tY5JiqY'!fͱ#fGD'<.H5' k!®KHƢO%7Y s^A铐wl*3!B' gf+=y'7u1[u*8Yeى6#a9şqcYN>6KFl*ݟL2n܋nf֕/*hQӍpm vx Sv'n3鍧 h'_:OfnՔ}/ c$ T8jEXҡ3x 0 t3 \ 1@w7٪{|Z*"4+߽VgJe>/cceA3Cdd$%`[>[VlNmv)5Z v1$S[GʓKHʲ$'"5˂q#Ձ.)H%C$Ǧ["X9STUDJBzPHo;͒-ŧO0P YmME ۃ6_MDT`eNgq 62YAe?4ZLABp&s::y1c)*kM5WOSsDZ\U7x|cۀX;=ka3x-Oj⦤5G9pJ>*8o!Dj$pؑc?E4R`xBvFܿܗYGOIA|JA}% ܪjCn|wSaBR"Ⱥj4o _r̅:q@AMO4~uKxm]CHMvl4|T2 `.N8QhGNAу3[QK>,`z\Ur}NbSё+^==0eE+I* `@rVouA}[t +!@3v`˶E%{|w5otUrX~B;']V^s~De75s~f=Cnݫ4,gn{GziENA G7Cң{e#kt`[?93r+vm}}ճcSf1-R՝pfGMx+$@m(S[:?AEb3K , :F!YM :,vfG߂(O; )~ZvLUXD+Sz+=Y񎸺s?ܦuQ~t^26!Ks@<RR2^ .(H21} .Rw8}8WJԕWC= .l – &ckgfmZ%7$\Hċp1(1 ]ytIVʪgr$Z` Ru-#IrNax]*+b%5#ZL6jC agTmldo(,M_j篢ޡ5_Ӹ853Z2TYJ*rc [BIyY7v\ W]@6`=uP|p2Fg Z8e ;QEq͟ɠ›K:yAj^4Yih; ]u<̼RN^90o/OkX9]An*K >4h &y\ZC@J׈9MDD}O#UμY8kwyՌbDmq* A=k[ yZǃK!7s@d1& ÏFy0A* HTEtd6m|ӕ׌rcRvxn ZRP2tɡ>s%4ܕ[jŬAzE芷@Z  =J0-(6,nPvmz,OZ#z,#t#Z=tP'W81tjxD}3^8~s gE^:^3fcʿ)bC=->lZH>u7mH|޽9W4 Z1= HcwY;Ff\ pj/.ƺl:~VnwBup[)dϡ?a]r-FT#(pRpzin x^3ճPb#h=q{fgS[_fHmjgp E bi 2*oeጸ]KyFr?FgߗPҋTnkSvƚ1P c6jG(J9ȟT%+QHMmO9E9S@{K<"i| g#[nX\v{ν) wr( U:9(ΰm]oL`=Bc>Ė)w֫^"v-C>_=gylm`hڛɘ1'ҍT=U ej1 w:byc_d9:b}hI ׽n"<@2UnV&(/LKFfnnb4ofx#oδE .s Ag$:DFk?.i`N l~gT23l^!:bxPCJ2.%AZ)8@ r27]4\iW571l(gxGgDIKF쾥C) ]4Jbhlö6-J϶#MqI^ɨQyۣ- El#|X8}_:\fϨ"gyVv깂WzD.LcxۥfcqʂX^jJ[7>,pU :y*)9^kFRE0xOi5~}~sJRKeYkuA|mGDs!Ncr UM*:>5S |viɏ<& R!4f93,rPi/eEt1# '7y |5Qe myp FKԡ$حitl1=O鳯662;1׊e;o u?7"`Uh(:s2shP⣖+91LB 9P%~ v`@6FnKY ޟͫ$k'W`ƫd2[83"ZGO{}K{`q⮝ݕzխ2ep_í&^fU-%CoqNt_F_С͕o -edJC:9q_pH'O#F)9e,R'{O*)]M*W& ȡʝ+ًL H6$4ӻуu9 xg}M ֪{{G ? h&1c@3?SѓL&Y9ZƻDZ+kM4 }`n)U' ф`SߦH3SCAʴ KgƝjk yt~5TMAJpvsS=e.;j+HXfkE\άn"ۚCXz""+8uT|" &Lr(Se)(raMJ?2J>@iPtt*PU7r]JNvA`UOƲvb9O=Kh6^3W eI Le5 6Yv[\ݸĤ\3rZسGHe H{ RU8#4(kR"kS_ ˸d[6y;@ddAs (*pu ZJ>dɢm n؜I]ԁ޳LΨďf=4QXPE{.w""ީ}W3Bk9aɑq WwyHqVɺDR;;؏O'ԙe(~&7:-9ҬDW#(¨Jz<|hSjh' ;z 0'P4mbňntUiɩ:*-L?%ϟ Ж,*E #mmϖkF13v~AwsY3%*e8&FQÈ]Ve,ZP*_g&Q_ plq)~Lq($y˩ܥR"I$ⱗ,P:RH7 Q}^;2Ub)`S+7FU.f@+`a;_c oW7`̮99R2g!]nkEr *˖`޶ŸC*}>gc_y(5ל0&KAD'V%)'sC~x@ȁG4\M`1& $&e37{`bBÄ[5># !zO~}S@GEˉW> c&.|7g I.SB:pd I|Ub'J0$SN"SEya<qػ<inKnW˶`:)TgQG;aQ̎Rt;):qŇZд[-Q*()Fpfנ25!|_F?h8GI9a@2 vd(z+=8q@zaTV3!oAg:;d 9ge4zDޣ/'C\"@ݦmm+#;Ԩ&v`R>g>ɯ3ORE&@,R7FH; v+uzF4)}?֐T?i5(cDfh;ޭӴuaOiؘsF&0MwPTd IJIņmh.T}~1 IЁxP/){̇4]F)䠙!dL)Od~Լ7sK]ppc8ɌVI}Zdd_mcG9d0Pz6eVǔ$~۞SqN3 5&]N &ao , 3kJE+ TNb&c0k`6󴺴RL^0u>p^QTׇ|'A_tY9%Q+쀍Cˈdb@9o Hx>sDgnW W歶dI+ F>mp~ƍo+))tcl[B1@N +I;7#Yb¬d}Q,7;CMQ~>>'@n YR÷VpܛR^8C>(F+ivy "LIH I%ϡ>,78[v}tw 3w~٩ade"UUb f>>5!˂8nhHe>j|D rfHJ“Ykv%VzJud&. S=9_0 ?Fdjp~3c|{c#LuKlOYǑB=ٗ,w3ί D|m׹Pgf 庲ZWQw\)Ir1˖[6 za^ 6AEFZu}qh"r1_L@ˡC{T*xDri*R'@Q旼m2a2[ԗ FeQuEO66:V2)1mc7b&"+?nie)0x)V:*I}C_v_|#I9' 9{K!{,iŜv]NQiEX(w3TkJ+~nC#@,=;d{,b:ć]i7[@[vTW4@]Շt$l!/({w,'9a2e+A%M1t7Ѩ11fkJBdjgEK`G yG"/Wpxvd: Y,  ڭLya;rƿWHBjFO02[B,#qNK0R1H#qbu9u_y൱A^Vq~jų$-wT,ƾʉ1^*%*3诏֫ٹXnO? ͊XES7K#u w}dHa9 sՂ?Ix`D^^{*a??\ s#oB~Ie9r$cZ;;g``8,ÛbU O MJ5KihݧTHcQ1In;H)dMg͈rdLnCF(N(00،l! ShP_F6qEXAE 0wN`ʣ酽ZuXHVLJهa.>=>>$ \2alT} EX1m4uN5$ ,Pe Cj*\WyCfd:YYA XIXk܏g#?*kْnBȱ6XkPvU@Kj8bQYU!%#_I+EZ`#xkv-?|ahڕ>m99a<޻"15Z8ibƷ{ZEgP6dykTV&Pjq > u»eJC"ғKX]+%JM>ÈxxRn3͟b%$plռgf 5i|C|Se3Y`xYʽ~qkJ#d3D Ƃ˸|\y]-xvީ7IИQSە+ v E I9HZ*~M&s1fD ԞU7wD:$U!^㔦pL)E,,i]J(jҥ>C`-R$c򗑪$heyף.~y*!k׌TxʡT>ZuC>O;oհ VE,cx;|1+T ouYc' -p{u&iK{$9;j@$;܂` K;PB[$1Hؓ<2+i5,+犫* hb> 5߉e[l$~h5q*)#UڞOm29[۸z~:v(8UP.FzFfcqvֻZģXyWZn&A>D]C渙M4$r_ z\ҡ،ٌ \h9ėR#V,Zk17 R8>r-ɺ@zxTܚl1|NXrٴF{0rA-OpIcBz*fDi6Mok :3 Fk5*-0-=a]:h53բ>vce[\ j^K2Iu~~^:?jͶPes\X#e+۾8.ت*Jenʹ~.qzD/_N,£pZ]4n{|yQ#w+jIpdNaOkzd ux-5av9(FrO=E⒝gk!,rFXEH )ťv'I6ˠ͝=M;aԔ 8˪eFtA qVmF:f._xݔqm'&&[o7ı@c'yu2J@z]s)@Ƌ6WFzn~Ѯo)g&2C"eìxa_;7€V1o_O+O@L7s4tx>r­O;rଡˠd I˂(7h>":W7u㷖>?-Y)Ư#8#⨔ت(5l\BMZg[:FNZ\s2J;\ixG/4SQŮVbRҼ 2!&*MեoA#ý 2T:V?i a+.eCh|%[iYJcd>i'^NIRƘ;֡~}oT/B *]/g~C7a3>H zWIKaew:8 O#CAΒ/F?tscPՏVi> >9S=wwzcr~kb۸=kȶ"һڌƻ,wQ^9ž5N )? tDLdSi_}dt _S[4jVN&t;L1NZU`xC,-DR}հn3sJu0դnEQi9I`幄UН} Dj) UYV=ֱH+amP99b^,%wY@1iˇZ~u>v aMQwXb9rAް3kn1eCI`ǶYVyoO (Q4ACj@CVvt Ôaf 7cqpʹ zHz9e] -/9Pyl~5yy;sſk'*Sd MVi愒?%Pd,={őW\pʜ"q[ D*oz Sr: s}KIFƁ0h^/Z^6G>iL/7_5Z㲄J:U ] Vu5&96H՜ M?QlB0o.8Pi:#;6wBqY G܆ %&cRېy bO  ؝PEz-܃=c8deOE MΨZRW25(&:<-~FN~ud1KuzXrZ[1I^A()ηB$%:v@h98o/eg~Boh;õ{VخkA?LyUt9xb[\2 3 1#EìP<%Fx;†4*QJ8PhnYs&,avjB'";1U=O;羐K ְ 3(M0 eAk2\GXz҅ZZ^;lnsF"6tw^4;Sd5B;9^~z-A[ K/y9LȘ*4t*-8ѽơK/Se.=`~W nh-*m3k,Ҹ=JMgK;7ׅPmY,?T*xy"V<ۇ[\Yz(9jB=`*lS!S1 I8fʈ+\ghãXR+%’C{zEٽn1]Zj SRLRb9'T JHPЇwKBFTy>=9 C mPdA> |Yq"w/k7zu#"mv] .K);W8q„c*2@cY >4H*Cabqg&Q8>Dۼj0R[Twz0UѧdETtv^1Uʧ3{6eg8"D> a)!=XN>-Lgm!e24.+ulɸ| xd\0@3eow˟[YpH:Mp+Y=,^e`*xq n;źw(@EfV` &0hFg6YBK}EP*@~;"oʺ.6HJ32+`Лo δpO.6@-uWNWPBHc;D-TW(l/Ȟ5$KQPZU=AYC#4zG8q]6Ω|+1 HBwoZ$fD|vep,MŽkzuJ=h\ea2e&jo>FOۥ)>Qh=)3C[D^]a?^+#lT&Y+J* ׂS\hA #JZL֞%"yHIUVT|Y ʆN^YGm2W%ƧT&ExKTbbąE3Z+ d$=vŝ`~t_:n#PΛ}~\sp.5LLc.nymg$}eNe$Ǔy僇pK6En:Ⱦ/ԟ]%q .44d;G2F-Q=;8Jt6ma饓h&OT-\_brH-lL~(4ʻv/_:V۴p@$"i^Qw(>_-106I[k̹ T9kP;CS ,cy(Ἁ  H8!Qlkn MSv{GF)\%[5] ZTH1eRp#f=x ۉmNJCu;<]n_wu2j^-7W@M񗄻W.568]3Q|v/w 'P|Q^ G2otDSԟڡ}a?0: znndk{g] tďdnL43 G0&b1yAl{Bݙ9^mJC[PoEӝ.ت%5`CQ*{kÌȐ;8f3vސ@Uv7A-q|̡uhR2"{rŢ>D"i](EU|~hH{L }C.-.+n4-=tL 6K`g6l8wGCct:eL@勸z佩zγItr)ϫˎ+rsU4OeO#'UMF~@Nh\Y¡8̇jB3_yQՅRZ CϏJgE͢j螸 t(GџRsu申~M@77Q!hO@qn{ꯏA5O/=e%-ʥR-֦m{.o,{D׉ lZevQaxMz6Tڿ }~ڧ։2PpZrIQ/]C@ 1bEɡ>djIlieAd=Oq>=߀z@9p\#Huǫ;au~<U1q&XL~@I1"sq$@= ^!HaJOCpTI=˛,M?3ѱN|⡱I ;"4B6yGQ&pTQr$UK4!ĠJբ`^*H6^CVmh93Owonr6:oJOMx$mK=-#,IYLTy b2T| T0)R]u 47<ޜw9tZI=#Qsb6fRl߄jbE@ Pq]oNaS&@ncͽwX2 'j{o-|+߳le H^F,2t~39 ǣ '^JWX:Fs*fF`_n'"X]"M;^QiX2QVeRU~& bo,H^)3\}Q!@Vjˠʋk4IvC2'⛈B²\55kLA%unl;J ;u75w(rI%0D_C!76ZΙiW##zQXwPH_S H8:t\^bT-AaBqk87SeHӊQޣ v뎙}i#?9 ~"eEuF&d幖@;y(|#t1>8nZJCEFZ%N ;q* ҳg.=kҊΉ֓W&^YHj>MLF6ZI"<{4Ν^^ YK6 ]߼lfAP_3քCEeU(oah1}^\cC̑br-Bi$㦍KB t 7sys\2 _bsAΎz< 0 % 6`ezբIJZ--}3(€#-} IQ>^OG,y&ŏa+";X'b>%&W7^R\Əϩ<;i iYo PpHɽf G08x=L'f0f@^ UYφcWU.Kip6Yv_ ,NF% G>4jKpiitu,+=6b%m`(_OŒ޼<)3NFqyJ6Ez0:㔄 W铼u6#`F4\qA?{ύo/  ֜="$hՃHC>$iHI6%JLj"VyPoF,0빺jlnn[F8nuu[ /r8G@d>qMRG _ ȝƼy"[zV,9МeA=(Ԍ&2F[GǩjisMj6sΥEZ˘ Pu׉P0xQu%U)TRF!5mv3nwmK=YڨoǎFO'ϖ!$6q~p4D`Hl[d~&_F!GdpkU ;+1ǪVPz 4sO :RsVCz7‚ce5jY^pc ‡4 FMcJ fC*Ce=_c0bnaTouX˕%Z(c}IFD}ݤ+-n6A"pr>"uuX" :S2(|t6 M>E~lat(Mtg_5);vʫB@u 4n!@xb皅=Fŝr_٣,s12gёӳͶ!X(Cc`P}!%|n!cTzo&1ajKZWo `^ 7Y}**I0$sA:2ixªB73 ܷS)KUE!j~CM_KD$*AL4$9Fb3$AΙ 5!P}V-ȵSP"QjLSxj\)/u-`TDi`ƄG)zkN'yjR?FB޴@HvQF"Pa۶{ QSPTRJjE(> :!ncy,WB} YAKc-'":ꏬ ʺtLli?,I8,=&`وC9grKqL4-dT8s_[S#؃iD@rĥ}4d3BUw`F6=X|+a+8 cpa \L N?#-)uiȨm((^yM]R3J½R..aipKfr0ȡ}Q:\87ɪ+J5LV t`ݐ*<?l.9"2=#~K:=& #Z P ad:1_j‚XQH)kNAJ`lAEZ5Og'p?As ͈4PWsAfgu_Qgx1tG.a詟% 6Ѽv0r(l-URNW~ NGUAH$ǵeܦx- p]n\ԵBKn@Y1tmif3 j񊱐n*ޜ sK3gߜk+d]`e[_^nSo"]=ы@3,kSԁf` =_4uoZI_,Sa[sݒdUfSkX'gI]5qÔ_Ό 9%/2AY0fp 6'9f Sȯ HvTI29Jxp>t'u#AsER2+#R@Lz.o~%EO߭ar>NF"9!VfWFvseF?Zt4.S f)v c;$f1`}( [ZSeJRJv]AQ jx]rH1G ٣I%bvUT.ҵBw!ڧ+&+-CvSY-"%jur6;$ÐME뇔tŸpѧl#pe;+d)'b "cY.y; Q) E_-bTCF5[|T 7kk2`ئ]{EkW!!EК./&,eZv>!Ȍ$*uII 2I)@iǐJG ȄH=YqK:bQ"_3KVS*"Rje` T%V=N!lj J-`ꩴf@Fpbcּ L47ae|H6W>"=~TҰA ym$)nw,KzӵC+ 1*BPr6<,j+4ME %VypQ+r_ %b.vNdbi=ܽ.IKd (A-UC e2S-TD hC"?v xn`X$™%zzZ92^>@xm%N2h_qY6x9;4 f6AL-tS~ QRQyFН/{+u,cS``=} xIMAjv1: ݵq">J` ^B+^|[ۍY)o}tA d:wedP/3x]195'0-2 A{|k})|prd/H tD޺V5=V00_1b+bcd +^fǵkⲽF@Vca{~Cj.p#f&A m$ц5p QԖ) r9|\4&JdErDNEL@^VFyv*GW:K]M!\iDJU`6";|xv#dvB1<ܯKU0d{QN͕dH5v{b7-sG?7T:aJCT h!SxS< Z'< J#͆s'Q@Nx1234i}EA(O!T6!bLJ MwNG!L 96uҐ+B7u|ܮv78Te [N4,!oW땵͠fX^@Օ!a\Nw@;eğ*-? qF_*`h3Ol҄!~cd5-Iα Ct W4FɚO4E_$Q Ce wԃ!vN4~4$H/#:)@ ϝc+BMq;~<##TR1. %a#u2r6G?ExwMÑ~. IHyPiĆy 3ÏL_Nv|0etg'"PWEnLJPZ'TN|\F1M&l 'ncLVM}4wRr|:j=~=H娑ݎm^z-@Ev.^n.5;ѷ$rzj:2|ϡ : M|;+ CŭX;+LԆZk!ޘڟ,XsʗBG LYBEasuA$k%Z79mU-J̫ڃnj{Go1p6>U<._aul Ӧ<<557Ɣ=Ydms_V[>lgB/ޒ$v'f3mLb\rAFwZٶŽM"A#g{M5y0'k}Qf[A hf#G'r6rAys)gc@4$KbZ:z-v52,?#7plNM|?d@!hvZt?]Y~+gu}>OJpT2ӓ=_)Em@_|W7qgTwE0([xiOz Ki W:ȋ|tMJj ob2=A ~t8҂Nt+pfEoy0̼1~lbyT/9> ! J\l? e~`NہN~pq.BxӬ:븂lA9,m,S@2~kwl״'7[6{ Z{$Yڶ &RZnB1aN=mP7 "/9.f(#,| 7lB0wnw-[Z{E*s&z|AUb@VL/<~kK1W2R}?=䟐OD`k>wCHh.~W`[``??iAG HE=p䉙@i ^Axd6d At[yq)uUzt6ѱ};46/T;Y] +MdG8{k l{tG}XcQڃE5,% ۸nWA/sufNE**]\]~.ٽ[V|x{L=[(\tj "QM-`$NhlrO)D/$ߖ=r;~B2M~\xnM+ Qқ,.4_i2_,q$Sxd;v&czrbxAYo OlV~ KQ81C | L@Ct{t ֜ǿܕcjue"n'sjO` &MѨ!TZT$6܅T ; T#C~<[3&yoա2ܺ0ߴLd߄";[ 6]!h_^ u[ׁRv"p.xSJ^ 1 T+=kv (͕j] SC !>F[5z N<|y(]p[\{'vrl,bʩ1A/dQ_<4몞?= }Z Ǩ%ןMB#@)=>8RK:t_m2XJe?b-CgWQ8m Mg.L'5hs\T͝T?ٷ-:EUkV:' !"P\hS?t'+c.pȨ1GT:g!b+T'5`)Q':*2>dl;ӧ˹c7)H^Ӕt'K:hKpF b Ii{䖘9 O =`[`TRNLUY!#M ۢpX4Ww¸G-L.Y^NjꄃA ǖN ^છ+q{89ͱ(۩ݳĂZT?R㆒IOw{˾3nHa>'bٚÐu-(2+F`mtE GC:cXWKJþ x5*e P;<6ɍB ` U |>RcF9$|3 Ok202[}'7:o/'`d'Ý%v/PB.q[Ђ9-שa59ȯdj ]3ƕ#:08Le\lTRZuǼ"8ʚ "IxG[uKW ÷H:$$IL}-f%U'npTT(8?'뗩%$Y LzkJv4aGhOV%>`/ 9 s$&p5#|W[3] 7΋WQghDuOJ7x& Kml.tyy^@4O?0;=w"iy=Umx+ZʶzHG%|IݏsE:r?/.#l;b!pC޼2;+X`/d=$ԫ6(q6"~C kȩsqpiϵ'yD*~9|PP>Hq&ۘuҥ Įd|QM8_j;tś.5_sQ.b;ÖO/6uOl:&t!8;Un]0}M!vm"teƅ".Aq5QHtZ^`j'ڰrLA):|t٧b]Ӗm8:ȓ޶keH]EF^.Ő=x"*v__ ?71H-OFJrvoaD}+˧L]#A*p^6< C\J4j|e^|v5FOlXS[%@%fC)W'MjU,zibD\bP @:ui/S}̕GӞ2shmMc6ѿR'dZ+5eU4bQ1YCHZڼ*൞:ItŽ6YG9ͷ y\s=q > fdǎ>G1 q *D%:x<aL8yӯry[8Awd*x"MD^*drY,BwŌbfCyks%~rMp B`;rsDdng??p!79n1t[-좠S~ҚOq9cyKH~EP֫%_R9{g6_Y8%W$cLE K]<$=/&1^n rڮU<;@d$aU>Vdg6ekfUk0h`ޑ10륈?~EEz>{&[Yf\ҟ?-53AKXZwQ/` !~.\$(SgWbF1YK%<Ơ(9~c|Fx*=6mL͋hrdzOAӹذ?,p8gj"uv/鵯M㐺R !%X($JX#[_G2`x'et6!N^sMA%A5+vya.YQOXVPkѝK[x!C:T>6;3t1۲?P9DPk}G>3s)I*OP)HlE%Q!Zalyp܋dҋ@9y,S_Nl<|?*#š%^W6d$B ?( ^v6fzҖGshFT)_0<KbmI 2#( w=ќ@v9F`bs{O5#Пb"0vC ]2"R)3B|j(1=}pQZKkr.WVu7562suV UemB,M!lEWp TP_ [ˏgeq=tl ? GΜsl܍fG<'wf?|Le SW@ڏ/UnZ( W<lɞéiwSi6i(}} ]tQ=a(59mYO8c^6/e6% ië_QxzGw+b7KZ) U,kr[!OQb'LqQEJJZɶvٹ 넚\J 4V&|=s&|ݜ(B\5On[GuL&Kq$twu滛_ܳcyxm؋v5p:g Ejn (ba3L9Ŵm{oRz~{.7 -HJIswgB*OЅ#e=x|ʏTSF\笕'1j e3uĘogD~S#FXQwfS~͹6{!Pgy^JM\.9A~,bb!`. 2x(;?QYdJm]o&ƈݷⶠ`}44!BSMauImmlWN-]\5D:+jzM›F&JNcXMmn/éj͉{dAY U/POk5TEϘ$ca\TFq \@]0Z~ m[n]Xd$ ~ ʊEQDp?@EnmD.3퍌aG5I ϛ~Yv1a>I/yPw'/,EYhI|B jS3Z -> Mq#W;{N s 9X]=cȰ 8- h !Nf"5vL&es˫t{t~O쐷*m4p% vD֝J4l .(Պ;t'**`”imAiaޱDOfe{\E\!z?hIL`?Ok?SIv7Uy*ZG+g~#l2L_aqBT*299IZ-e@cm"k?()GpڌqC?h}:H2K2X -)_;'UǦQ%ᅫA$`z)O $ѿ `1 Of@+K4X ?eM!68e"+X@{&71?3g0+X0w^RsD0T),Vo2'vz*/.~a*+-tj аlɮ'}+!%ܞJ8dY/xjȎưe7V1w+ Oe(Q˞i zؘf4%aU=x}0H}yaueK̪kuyM;Nܣ0Ԑ]Z{IL5=sȐJnӚԮ0:[%5]^h)e65)`ΊٖuVdf6 V JRɸ>2*$ FNE6 ۛ(%*H!NrFǵe.ngm֡SKUPk༁x)^**dD59vAȬ8"wH@a%bS`چx[/s,*bP"wwh-Ȟeiz()WF)!kq7[az -I)nK\(`m.V&eC#6ւVFX`nVȉMU5̈́7k<4lG1EPL)ɵ(p lIuy;B/VTsQ(aK9K糕?JL UkJv^ 0cV Kis%rr56Y Tg(H嵻|e®"bGq%&wxV&M8]w`IWCBT.b0PA4L)=dJ+.)e뽐#@-I&}T~C@_,/Q8h ϔRԸ!AぉvhϗJs}TO4r[%mD'<4$kG'cgl<_h) }Qo~yvlᅽU0׬Pv{쓔.n_IuV7A5 5 ;Oxi it>Y Jo`Hc|_+fF+W:|!&kWe;f鿍L$퉉!~ْ,踻F~cM޴%J?XFa_ ORlh59jguۘ1h SG?L<]; i87tsӫxgȪfCm,K /*ڿ0:)_|=ّqS _[qKVN`[#j?j }f7IԈ.>T72/Sы]iiM#0. Pm0J }9Hoysٲ/^1{$ ^duɩNq9Zu,vfH_Z/L'y >Ĕژ 굟fLpZL{D ԁ:/ﰆq̙ZZC:,J*&úh0UWyG;x4JLVHwKժ枞*6)#pI^+dѡ|blkcM.dϢjIVgbS9MW;w/n/>ﲉR`kTrg>a?8crF!q'x9f)ޓrQE~YWx~e>Oa_9zSGbw6H4_a܋_J[8l%EKuclM Ӫ xS66:7VS Zb4Oב앶i\Y⡃ԖtɉΨ*x.-*:`4!ՋD "%o*ڒ|p)rd6q;`}{RZչEgyl6T 50\Zov鱐pmo(Tbcplh^ <#^ >2$m0"^t }ޔ]Ż 8)'k+I` s8>~Ø+vcpaAmH$64ɺ)qF')| wB:GsSbiD2r} u A Lk0p\`|)+pB;q)%#⣷k"r0$V6a5 >$-l;oøYC[˅xKGLr*CY&/ d2iX,;v/W B9|Xz.S߮+.[>Sc(0x}r%O%۬FbV  ~CVΉ9N hs94D|Q8ՃOj6F6xy^&GRȶD3. j?>)=pׂ^lWSTΧdv]\9CpmkQ ?ރOT7Y-㪮D?F7%m$ }D;|HU2ž۲=8 7n7g /2Jq+{ 83;qxKq6_SqJ7T[%L A}dqne:2DRfh 4? d\#Z-2-suyV|rfd cA%5+Fp/Lêxē_\[!G삆I!G$6Q$'JW 5<Pj(/#TZ:|U6}@|@&9m`2;Z"p6.8s[|ghab)%!!'D۞h%Uo6Ry=vު'^OYJͼ|,01ܗ pr둓ԕAAr}R48;jnXap܎\@x-nz͏[:]VgL^fr9ј!=vfY~TRtt~rC-I6KL9z?98!i2Ŭ@GM`Q>h/Q M9~]D'i*!CAQ=="}jڙ͎Z' ;ArDwE.uvdVW>U(1겻`^+ |n-GjAh(:yr9(rwByBUTl) hSZVQ]*~1=S@d'|Kh6/G5V)@cyD` ?(P7QJHj M$}b&K9H)3sgkS#? M $}U?wyzK|;aYi/MĂe`("hiBXo{Бw^OUY^T{ 7YsYi&\qq,۠yne87"rV^\f^7p*lYZrW;F*kUw4=mhbNJDžSfYFo0I`xz 7CCJqhy֙߈\r:7}I`"+%7Y]ЃKoCvRn܊wc.&wz($O`µ1e \3 X ?1 呏Jbb%׼( S4li*)2NO/WS1ID*"qA9,_B8e;?60S \j5ZGHmVO '0X2|{_oĮbIMhZvlϰdǧN(oVVoQ8#i1=8N@a]^nk"x"r\e,ZBYegF2&<~.NVλ-V _8sQB&!j+`[37sс5yLJZ3-":Ͻw?*j5mxj`ߎx/&{4d#(yU#]I,Hffn0ӲZ=~hAa߃2 Ju:/[)Ibq8;<0T M5uIf0m.0a; FSXn}8V`K3Nr[E\~S8ms3'8X+SP@tR||l*eu^T$NFbO#FDLM&ˑ̙cjA#şCE qu:R5x)#)z=ǶuĀŪyP;wYė=[W}<9)3УzBSN/[;J65ϙRnK?hf=RIlؒz!Qmn^t@ =b3rh}0o ۷)l؇g PbK`z mu'7z R5ias,h7eK|AA'w:ٷ4RS1/PvaZB18.0-Nq[ɻ$c)A31w07U:88Ͼ {. c9״QYGXE5 @ Rvno}Qf8S7L;zT, Zd(&:-uIVئ0x@ rOj&"_F擦SO ~/{KzфbOm2nsmpM2{k EIrM[ $0\kEF ^^d>Jj7:0oH_~5橖 ഐXЂ9ZfwxUS>23wq`GN&zW* 2Ke!xi(]2 D`d(ݤ^ 7p;^;}UldRU1wԟl'a' 6[l+!ߥ$Z=`]wZ NsE8y0I=zw-7 !#ay:@wn EXn;ҁr~[4"o \ٙi> d&(4FKjh㝵(GFz};x7:>cPk("r1hc̶ԟ3=nMSDi˻jRcݑ[1nYO;wu' *\p4iV, `ė飬[ْ[-RIG'|jE~ ;vZ `{:xZ='9@YqI% ?]烱u 5y4&;{R]oU-iY2{Rf!0իFLQ )tv:kߑeu7x2ԯ/;0n0ý ]>qOKjNZjU 4Og01u:کyQzYmOsC]h\ t(!,e~Je}fatHa1ǻ>+2w G<{"+dбr!/*ɝ }}В YJ.C͵N[o X{<|/5Go9 -ؽy^۾S: BpXJA :?z@TŇ%ݽ!eX"e[uihhKV@7&5h-~#Tc%@?`ߏzyIQJdOWo2spqIחLzԻz\mY̕k\Yh{'Qǜ?ח2a do-S#dfwn㫔*.]ES|d`XFUtm0pyB%?Ρe]R݊-aF{&`Xt䋺rDU۔=xF,1Յp4R8".R*^XZ&H0SEmV~I:mjaIeQR7-q嚈&\s:؄ω2_O2;Fxpr_)'" IЃsB9ycMYvc]q0ccU57Xa3SuPK[5IU|X^95GBP(pp/(=vu#;@H:H*Y<݇yM_ {WdkAHIG/e9'v \ޖJ/]99诤fdQr5#> E^srma.yzJjYAR<;r#Mpuf\:9833!燜h EkN-k E8N}nNꗵ(=5dxD?1C j):H,EP k /)"[]YXnXrPXGh`nK, gy՗Ê<_ ht~Nɴʖȇ ~8G?Km ɲƼm h{n8#:yddьv?M˥$ DqE&^Z XǡO/\hE$nMWEuzm#3is. ـq 09T.@yk0 ! dEq"I;!/J]N0e{!wDֆSkϡx:\f{"J#ϠlV[z]ޑz ZR2 bM}0׹MK<<G07@.ښQX j,ZV$BƗ) Ff͗}/0>8؉ ཹ`º@nK^o |A 2ҁmz.q}8+viEQ5ښNS^fiSz7Fv cȥeuT{kv 7GT G9.~:DgzXv`"-h&`z>/00Vz"]y΍3*Vh\Jvig_B6֟|Z 6ElE{ S2$Zb7rI"βd 8 Bb8r4k3)Vc۞X+>CF.U8WwI[ýu*^,I 9`5~ḧ֢́2 <(4E%i9lA* j B&=V@ 6ҿyqXm"wtR>[z{4`~+h/ ik  iC}}?Foa[DZ'T̐o{0$p6I{hm }s @_n^XE*L Kxۀƫ)|.:2PjmhBY,QT|QNq=m$:13w_M$~SlR i7WCVL$(z6$ Ʒ)"Q L536ukǩWWV Xikxc h50Y;m`/xKZƚd3t?-c2FܞJY ӭs)߄Q>@K=53DCewv 4bkRZx2DS5dϜ|l5g%dE1 =g}Fm~jDK$+}vWOhM/tX~%ZO+<`[Jbhe4cV:x7@}#Pd2w~_8A :G` $ _g9Do}%vn $ܥ8d >ܧPe)v3IZ_l#`;eO23S>"6Xun_R W^|q-ޱIbbh D2Ǹ&hw3SF3wtkTp6xz9סbE3XL<{BΟЂYCD!G2H%g;$iY0!;2Tg-OHԗwwKJ rin]D4th_[t9Bb%m 6FsL,Ӡ/ȃIj0d. {Np\i]piPE }xmq/0*vSzƴ_qU!.IPʣKs!E508t̂iTQVIf3.;擕d'r"_W쨚z !l~N79y ;BbC%|'~=6p>E+ @BH7i|1*or(k-+b-L>ɉt#ɪ٘_6ZLs+ʹ [uE&sUq?ab@ o)4?pX=sZa_IC¥G'$.;l]5ӝğj7V YuB_@VF*:ByK-Nv&{YCتhB9*=n )!ZXxȓl6n|7Bz޽Y%UJ9#] $]k}P6q^ iH7M822#sBnD;Y= ;iOxp3#>md0d]9"}0 >9gbI z!E X*Y/U<4VտEƥ y#&^*ȯ\@1 "r,^!y{j[A04gޓpC` "rb@i[LiDٚbZnmgp+% dYQɅhZ҆%Zlp2nxye'3_"CaTYq3F-}a-E?aw7[VnBH8m+6H0W3BKk]qX3᰷>M{Glr$!:ǏHFA4 _~luM@[.,g1.⩹|F2ZDMyELep]P ?}T dP8ٟoΩ3M[AWG*?.~,ы t$:{luٚc0DlH&ɧB|۪0J =nmْ=1U\d0yfxn=l/aRCLBBtLºY޷]-Ty5e'8#D&5Px[{*)5϶z V}|i;&+3PQLL>ޙ͈<'J 4<:1kJJv-G(QCf;(j_X@*b%]yH7C͂Iw#gdP7WDCx_(nL7i]RYgIx=hP[*U@㬬?\s~g3_轰1F%wb$s ~9`3d1^>7ڸP&S}fINj^?W v tI`M^ʍL߸odIv TXTPe0U:ʘ$_7踅˟(d֮N<;;5nLbt-2j1) ^qp5A+<:܍w}8TQ%BAa<#ΚUn.7T--Jy5ҁ?O"P[v51 )yCP ،  FF@(XYC'#a𥿖B7ڍ0$wD 4nU&JGx Z gs|ܣzRYR 7(/(14kaԟ`|?46CơyOQp%"ʅ,̃f]NFvB2 8ˇ9ZOĦFC1Dk!{Z|blenҌYzz4"TBzw5G\Ml,AeVϲc2eOАjv™'~ [@[|Ng:{.d :7M@0~\Bŕɬk"O[A)LOՑJ|3债F g[]lG+¬^[D~*Q@T7J"a'L"^KNЙY:xy4ԥcY.@~?(ī.m k) Vu_ ʤi5 ;|V&hR~fZab{2՛14I+g@fl-,5fCd[Bn)"7'tdg`(=$;.HDލ4[]3dP6ނ%|lasB;œJj8gxf[oǤ1FHpˍQ)8v;0%ב]d| T2z<ӧJ4Ezm~0lPBfG57vdݨttR0)@b8Xm@?E[Lc7 u)rԿ8ѨׯL[bi}\w;\DY&~#eGk$ED\(aø-m"!} e]<N#Y{6[uNh4J '&>I}]{$2N&`v7a]d#mz')H+NE|ʒY"5k>^SG3Ьf*^RL%hgEa&Ap>bl7SVz8GUYL(VH.mRjwnAd'|QUyTKWj4Nj;i&1)Yސ6b)Gv#S4 eDEWu~j D\Y[4$cȋDԘ)Ma5VĮq`<xk=;$*GCWja5܆,D@;hoEm=/֓eWhߡ*}?:W>e7}/DS ~D}_onQå?{n}_I?^>=d_r DG^%_3v ) I7p떂nlD6c칖Rߵ\5Ѻ} NIKAs.,Wi>+|-Ֆ&/ M"%9Q1؛L%vXO45b42[‘"JG4E~ f%6+x=y=*ki9 7B.v}GQfKJ"5P6v̶2ԳzuEss_ Q&޼;9^ل_<j&b3Y\p U#އd9aVl#{:4OCگF+#,4!藰T] T=-@,o5A$* mn}>{pZcdۥJu ǥ픐 HP.ž %nvI_M, V(l5)~jaqDP96)`&+9cE&Cht ]GeߴYzJeJ@TE54DLp9U),fC/*S_;}ڼ2rhO:?8+7ԧ,}Vb= i.B ^ztKmA*LHMBc"-DWuQWwީddm"}'Zi"U-N9gJ2J慧3!=R&{AP޵DԷjt\'XҢjUJbR ;:P LND:`ۀ%wѶU^5J |&G 443р@%T&H]@wMu P5bׁX;0MiK0cBE4ŚXսsH7wl@.X!t]4n~uknUJ`WmtElQkQ FQJ4yn,);(4i*ɮSP c {3xyMwK$XM"kEs1]؈4ET{0[-72a)YԄz g^L~0LSc`2)3:8&S4] Ab cspVʛ\%+ = tfg-ĵ>PrށG½$~QQMb'w ?;-c6=ָL9q{Z|I̅_)on>?e&a]˶͟46LK|zi{ 6;zfy""爼: XqHĖO傱q/\+q=Re։rDu@LK$b!r.aq$A6uϥT)^-:謣SH/fRSBvbHAf󣯍<#vZyb³s6N8n5ML\C&TIEGA:S]j2C$n\L.,5|v9cG41^DP@G^`eEn{m7@{1 hQvfʻOL;ϳg>kQ $o+v_3ipcrhu:}HzDž>ȓ 4B0'/b7΍8xLBEJA9TySh1doެ Z7 sW׀=/պhq uȢXoGj@wS|7w$zHc0a/rIaGG7b_k {;-iE?LvL9M,&;^h9B.NvOJޠ#wA~YP\}wL7)9$^3jj*t){݋`v!kmI7ɿ=UzW=?_\+P{Qrgݸ D5qv$9'$fTgoA??Gz#mYcK1Ġc x7z*4ĕ5 yڐ2LqƽVv䯝iO&3 VDE1/b{il:u]:` >2 @ ى`ϸvRI"tRwwɚW]:Aez n"9'?s01BhT #o+p{$ L !o"$`| Rt[zWD|`Ӌ lYNTaj)?@Vtchne& '[YƷ__a!ՠI3zW2yuJvT/e@1(ˁGCbqVr]G #TKi 4HS2̑D+x`x=vsGGEꅒT&|d& o5~0:8sFl)Άs+G^@JI>*bLk&$h(hp0^HE/ݚ뇏OyNj$6[9G]Ԋg0s 640hJ!:گ7vdv9zw&-wwN΍3L]+8ډfMZ?nbN 3r(լ+Σڭg']8j_ǃjdPR@NK{bLl~jT_t@)xcNrh(Oz +&%i_ NJFib>vmXG! Z6׫㝢UC]*g$&}Eb{n@2&XJ:$1 دc0; E4YAH%4=oÂ(Z*K"Kә 7>xS^u<&V!㫿7 ^Ƴ#hbm,+6!"dDarƦ8m0L= j1w/~ƻ#7W_ w36M/Լq}`@ 95]ݟíc~JDʯlyPѷ!X~,t/r%/]J=N= Q͵GJ͒DX8~%HX t >y sÙnsRL5zO{7F)<@6)4z ё wz% =Ub 쾯a]:lK e;Q153z2k;_T!I#Z/-R/x]%,ef^><,9"r#D<慊$i)%m$qȘmrP r֘d'bͅY5p*M꼣g$xiCI϶v ﻸD!;*ig&[=[=Mh.woWZ+Lo[\'w5NH2GW$SAW["m箺W|hh1(8H4#L5I"*[,|1AC>Eiq(aX1Py0ΟEe"g~!U`I9)Q woiT og>fap^Dav9AOLc/iW`ZONea"K( V\W^."%<]|/T@Jdؼﴊ*lվfI&.߫@tv( cˎ:hJ;|!:%`Y6].!7Z=r/Iݿ,OOI2ru1BAY(-SD=X'ڌT̓g6I BvL5>[TLj{E$E59-T% a3 ā&iN[J`D4rnO|F vErԚZ R3,šC ѧ%߿U-;a}&?UdK,wwIJuGa0-8JL0sV)= R\hqz йƨ4ڳ`0Hi$`p0btv ުʧ+h |V‡ϋC5;^H*r9o,4c:L-FF9$B=-Ya$ۖU;jjVBU3T.ִ9SMe=KEgUWQ8A >Mvh^\:K1~LN_nATOfPOC`Njh|^;kۚQC(\GAep / $[vC ].j4sHĵa?v|54Q‰*`+'W?zpZs@ 9oHXeا h! M'FQ߈b8dku"9Jw*W`>f:7?PƐ3P[T)ID96oEםҏ&E8! .<-Eq{6 ( ( &0ZvNT-ؤ؅zL̫,wIqۯ.,Y4[ xkn{8FHi[HknygrX&_=V݇f#%Ɓf;/y98'4+֑D%/4rr]c׌mESC(g/y-=KDqS>a+}V2(G%u%&YYy\: {%Ne'xXy >b0N VJ$7"cIsR,)D/eqjݺh%j5g ȓ`_$$4gݜ/MNӑ Hv XG6愹G%CB.HzpyCds9#8b@ OzEY]2hҫgYԅT*i0b|%,2kB0wd$Ţ =0+9q龔Gy3j%_ t2e%4U+*p>9d+o.F 7Ϲ/nV?KR1lFǗi-Kx\mq̀4[.!@  fEJP_B /K:xxb6y;I->X=J_tyq?gXGXJw.^ KDeeIۯ'u-*LBݱ$΋=i,})dON1kv@|DkN1ͥ}SEZȌƺ~wl-"h[%. ] 7^f#}A `Mi':Oَ,IdB:wي:eXBrdB}k%F"Llb^^<9 Gr$vnL0ł|7,q z/3DXĪl]cuvTaZֽCNo_>0O;eB(O䧐L:ҴX1NN[xS) BN^3حlE}39_ r}V XRJ 3=]-E?Z7V_ÎTVb~>}#w"<]$>Իґ {̶:" *;&>:GKp^T+!uGeq ^Bz '*0sI.vsޑ(Q~JhSUD%lj7D9Q ,D ?mkWB Ρ5 re64z΀?qu!Ds(B V*uBjGP#QPg_n8; Qlhsg}MO W&!q94]`BTCgfyDJb$;-\{Vn=4nTwxig˨H2ӥ/b |b H@>Tb SɁKΉ&-K5 :>^5įLК[}^U;R@P_%L LF״M9# k;mf`y҆ "gFFiTI"A\vJe¸]Y3j S삮8v*" 9hm}6BrJ/:9al'ry!zAh]wlayzHeܴ6 I#d)Z(A) t'ăUGn]g$FnCש,W]n~tmjٺapd#ڔN q{< ј cNbaHj펬e}`bn,T)+D5*MlgDwwEoI'3@9~_/p$k/W,=kcyT]S9=E^k` \ X?j$In.GJ>U OYR˖(򵢮(`g6smgAh[J fk3%Ǿ+8@"1ncۓӰ1ZToAi|T"#(ρ9u>}[1f>)$+CN82 .iDyx8<ĀM*'q'vPSL,wIJ\J1-R29(QVK>]v0AkPp37=5C!UPpS_! ĕ)WB0|NJqj[paOv 1Y4Ub"VLtx\gPyOO iÌGWgICLXEPg憞t͆"'Vcm`>gAp}UV›ILx2֊܂k"z "cvfM”Ș.tooOʏ.ʀ%bR=wgU+> tE %W֫mXߨNyύ ,o/.$!IM4 uOyP<}I J A?ԓUzq4+Z .[l%8co 2=ړ,5=J2*6D; NRr.smW3ܙT誛{wWޢVZ.PE!""l䵛6=#XatO"uhgCw:WbGJ4͢ XgJ;e&ex)Rz~*"0߶39̆k|4ڴu[m&-Dæg^R-qw}?+c)ڱN+ԉe]dV rfJ6pNeDz|^?)n`tWYT?Թ[OC~;gAl% Jxb(]}l.,s?կ_K}"g5'oOͬJ^B!!_2Y Ƨ;veylc\:L~;WA~DWC #xжd*҂R1b/B}3|v]:/ }E0URpP&J"=s Sk9TH*|R3 ;Q'Y3 U3Ks,/>Jip U76U*ѧlVY0r-Z$>nP%~2OMFvhi87iU5ui<P@[Z8 dev8wS'=Qʬm(a#Z1o+yGX&@F8Є>Luۣ~9ymcEhsKFkY؁`ye&&`͜3lyAG퉙ՅV#Dc#9Ґ$T`k_bXӣЪ" 8[H+2cvȫNE.qS#n x A9k- ^pz)}(mYz&;R&䖼&K#i]u"rac|?(>Vc$׏49TNPf6$eVYάdo6sn7IrZUaZ.nE0rrFVA"A`бVK!G(uKK{%~z=Ǫ `ٔ J%gd7@f4rWfr R fVco2ځu޴IL4M!TD^@5(H hDZ>gtpJf=~.G'd IFk $rp{燌%R\$p08g7Jt*Eʊ(LqgB޼$y7ֲ^3G$Λ"RB2 -UcOw/dxsX̖YzN+&-4EK3b ݦqjX>攨o TNUa//qY T>o@$*xeEdzBP\,;8Lչ'G08VXG|$|#f4rMlfsgb),)3|@hy"T/Ӱi~B-O'LhMP6&TRgj~157&9N\B!ś,oߩ82eedbtX"5fU? EhzD6wtwئnݐTc")jix6Rܷ"IPaI1-|Q!ryq(!d$,_ЊG\ @G |J'\S)҈CEva)w$>(Fb~i,?hs/]iۈ?F*A  #3pOI2題 #?zj=N}J`;#*(iK`QoD9(IYJzg^ό@k`5U9%7yWcI_;(/A,u9JdcIR.s,7#sPU&ۑd '~V@G+9v< !AhS_9 ̥8({15*\q;T~ g/xZؽn;9BP:%f BhtYLݝ$YT c O'ƭb a- IER2ƞ,9cO? )@Aف{B$("NY?j[`\uQ~FRQ5vm=k&?-i#upah{&9Z=B+ ^A*7#W$7o"942q|DCsÜ=G~X1ӞH1Xk@1TG6V=zp.)+(q> D'R\.!҆HEDz;ò=PX" l2[~1vLœt7~{wNfֲo='o{4aOg2 m -* sLca I1)za:m"Iq:M u/M$ WdZ{hyd~tvu,oUyt)z],tt*\k?\+{]J$AzSGiz.? K4=x \7l׃O0^^wT7zO]4>_%oEA|eCY?ԭ`Bvus q}mpn[UΛ s^+ zF46L#ZE}/ڗ>A Kl0Dl> LhO/eoOw0 R!aIBNdԯ1.| ׺ҕJih}D^z @QVlkr{7b!'zN`0q*]*RwiY؝֓1;bu-[ˠlʱ:{oGI fsphFqqXND"%1}7yq y}ٮm&, O6q})X6!5L~Wa:lEl(39~ yգuG"z6#"вF MZڈ'kъHqZ_IRጧ\u7ri@Ⱥ&>i#o 3kya,c)jOq@L!ņTA׬ɵ>E=:(3 FO D鰳ӦF.US˳~.axk& oߚ9A!l(CI|DG!iRH>fTT.lK^V"rbg [mMiT[Ruݸ7쭲7ɡ\ d pE:VDQsY@)V!/EVk zUP"n)NsBbKLN{ğVG yӾk!],0z%Zg+=\O$7눗:-ctgc_ cӏ=^iN↶p0;?x-& M^=\HeZ58|OrՏM\ԷTfI:N&sX@d*6TB_c;bFllV:cĥk%i,S8񮽢̹my9uQ3Hh۔iUA*WQhaDE2A XCZ߄xX 0l4o =es<}%}u;k\CU8= :1W]AY8_n ~VEsLHaGå1գ2pJqq>u\o@f7t<'NⰔD;9䏎Cxl& HWӿȖi)ޣT͈8ASkrJ @,N%|m'rPFd_ >9s5bKx;V0$U%eflYD8]sIsf.!5ԥi$ZTyn :A#8y#F" Q#Ieug,YW FÑbJOz]" &inL fȒ8-;]:,Q~0+!%ѕ~ʎ'LdT]*r'%pknPت._*#.P0vvEBBX*PouتeFmBmI+Vݤy6xQߧ4xTk;*ILNL=$K-LIv"ɪG:fh EPto0Հ\ 46ʟ-ʬ 8,I\=}ku FyAKvUvPƁK,yr~&;xKTsN/eܱ¡$kvs7-(}'ɳ. l"1"Aoų۱!^,%g!sU 0'd#a#~m+_*$i+rg?ԷBDnTLm}&I^_J{%a0=0FiFu"vHЄܳ諠lZ~H-az& #kUPc5=5^YhUT;#{@5SE-.JSŭ,OԒ́F2|]pEƜcׅ5M݉~o ww n8Lb ۰1qL VϲiLo7e]"`V缩vτ}E3ZGBގ8*>>M&ɇjH]1G}MD4p+UpĖDMЊe~??UԱX) g'YjNv*~6&UGy}SE[2R&z>]s]HQpTX KFe %[H^͑f] !WTqCD'9=}z#OT uu4ߓKy8:|L WY9]"BΙp߹CC׵-./} ]PuݙnyrD$qu+ymH6E<%4H^gyX٭e!7:z[B/7a [mscpI*`rR+-8D!YSͱ/\Kd?#X=K^Öv_4sZŤr٘/qٷi:uM(a"PxvjveQڑYǏ7-e3dsYnӏΕ(W3ĸÓƙ7(p*+*X" *m/L?s3&2ͥ!)bo#N7?t\<%&M7 àJa -DDэe~"Uݝ:e||O..~L4t IBȈGGsQ T5Dž{"SN%H = OB?ܤGe_݋bH^v-_3bj30a إQFB<ZB`h2=|=,#SM_nI ^gGة䛈Rb~T'Ƿu^0oc$Vδ.C!YUPn&mhspPEMDs$NV%1GdiJ|m_O'FӹiMjnHޔFS?T y,AFwG7춇~HTs=9. h>frA%x nx $Q`h'0,qIS& }7 (,m!^]<"E|# ܣϋ(ѣqGV0nfl$L.rt)Nۀ}G^TJNŞG-".?: qPuxf\K^ѾJWlNmPu\1YěT(xFѓC(-qmH [AQCMd@Kc|Qo١ Ui"K~')9jJޫ5" vRZoW떢ܚTK1V+E~yØu n./փ2Vtr:8kYt#}tÆǤwq'(N881 dGSenhZuY8C!y3a0J(W|1GV9ROJ|xӑ {87Jr/sY4?F +݋}]ڸЫ.=A șՂX퟾'xob2f4'{`9fE4cogE;EeNkC${T^'7_wsE 27ŲHh;a m˅sSl+1P.>r5Q׷Vk/ez?J X$ <8@u33z!)׫SGcH/`=cS%`BIb<< SDasi4<`1 mu k\Gz,Xx eY aD X#3Es48Qҥ\ 3,a+(+=//"u46ɇzR4zhD(f}fO# p6s3ANfx2+]RJ [޴LG,[#VX*CluTdkNMYjXQpxؑNW= {<ޏl*v=%ؒw&'8fXFF .g[ bQc tRUs`!!(՟LƂٿfC͏UmB 16GmK o983DxBw @F<\HjPtGY[!>aͻ&1.4.*]j|5 UkD(фiLc +lcjX(y ߘw{d[·xj `e Ja]CJ 5,gy[4`Zճq XI*4Bb"P|эWl'#JLyC&Y~G\9R}L q5LVLAMNmCRzX(j ϓd\j}-( Y >bN՞L2ov1VN l7Ju+(F1'od߾CL: 2+jS@{նTlOc/0x6{m![܌PrQw*R'э" hqA $XhҟzW7=4#1WYa!'/tfm)HKXMb ,xؼunWNL6c8]omg/gtO<ͷGaG۴&qc]޵t5 0שiOq!^Xu5k{z^jrkա?*2gv ƓAg\ώ4 M9|<53)g"$J>r.W^\P?DV28c߯4t]F.62s.Z6ߡk"9vNLۊC'ph1Joh^7> 6c5i[0/ hIo}׸G5/1 - 'e;E|ΒP6-YX.B_Fqb|ڷiOcPê8/r8;,9s YU%F W7n=OK'fBKĽ}lܯfe^-UA y%ڔ4G@Hڕ>R7ɄD1E0xU섍=_Zڱ>xpEG4?VP8y|j#[]ˠتU.WGۼӾK HtN|FTctM\JPV51Z%kNe~ u7;˃b0$MNA kJK+f #Wd =i"A_5bE!39%(sҿSgCGyȸa~!iBq;{3q~u]<'S@ۆ@u/:dF[{k:T8/{8cL5y̿5Fo"ʜD, D xzKN}XA { Sutm61 O ;8n"ZߴCqAWYF,ǀ!`Dl PQ;^C{*=B{8o,b^?isn08J8̸V#;APi`S{ V`E72Y_b V.AjPWhICq8*>d L ]Zd-]s8O( Qj;()ߪ1n5fXH{`;XMi %4JDڬz*\ G& Qtz y7¤B#%taO b%ueL>y"yB<+v/fA?(``6T]`g b^mTGl zQ"ӊJe"KMkRM2b,GTY2MNnؘ=)γj5;k $~ 4~./*C-lqN Xn2U_OՍ(k7N;i`&a2S~q|u(=ҧ{{L//8w#ݥ hao%3}//g{2]m AS5/{"9WT!\Bed]\_Кg*`k]',w ȃىK5uGIpahCe5tK9XjE|nN2 PVFmT}v:fm1%iRm`X,"qUie/!]OYvT$辤G^xt6 hcRd)T'2|8* nqzwz!X\4/6sWd1tkc zCYp<42@RIb&]nTaG(1aF_ሶ֙ H~aFt;3'a.]R`v8)bS,;4f_dXK &RIa*[+\N$h}LgE<;Jo Q^azlBBwd1_.Y>0I1oZ+lT(u4Jxl({|QE퀓p6j뭰ǏJr?GEtV'iHrTB?SB`Hړڂ^ k׬VTAlm&s˗̵`Q)b/u^}kI-IZF ޷>\9Wu ~\9(4/SKye ł&43!bv1 jX6K^chTG J~Oq }^l֝MYxbUGvg>`V|@/Y>.,; pнunӷ(,gbm7ԤƬ02;ϼoo>7JH!.S/a(pB6'߈Р jFN޵d:e&ۘ(!Cگ |\J"Dݴ|| ٮ)͈fou#p01y5o! DBR?X;V동𕜨tv'$Q3y˶axE&QGQ-@cLA&갽fQ+%l1sb1terE `vL=B#"Ro J-t@,W!ct flx;qE/P<9^$~UL`gB,q,% Mv{s-'r6} Ү2"w>&+9biKʘ`wvʑ/rvׅO>~mOyMy1)Ҧq`QO 9K+VDS 1ڐq {?$Q.h!אJޗ}f#|߻= WGu8k5]\}t."xfGX\Ϣ ,_|z0C[pM$NxB mJC93ʧ&*OXJJ y@Bk J"uqA psM"ujMi KajIW&t }z3s OP<w(QQSFRE=@]_* "Cpܠdh$+30$STYcBǟ !}y\=MduT7"ZaPxz7S/rl5v6Op= 60Q껔>236SA]vFTrP\G@ٿrnD8W;0/MoB4@Ti# v[ 0K"LWzM>wb`yb) ɄKerR/I$_(oM=|I%2 0ks㓔7`AC#TH9ƅ3UmJ1׵+3-6ND@>BRn-C >{%_dkz֎ަH|d97F-C itNZT y=jPX](j(wxT5CLd$T *Gl4,s"$-κ\+:wJ-1Ȓ_x p$5N1}Jf3#wQmF4rL9{Mz% t#HXHyG!+%}k_tzZkݥ6v$M U%O꼊@q?Эɏ()T{=slV2}[,'(@0\N.4]ORAp3Ly)8te*Tfݮ* ?‰Uo7as]Q+T0M'ñ7bb"; 5>pJV[fs +:UNc]Xa?H=BTAN mH7?x-1lv,E FdILEsTg<7Ÿc83}>J?3}X{]mbݗ٩i(!YCqI}AW2[_%rI0P _*jcUfJO$_ͩIG*b|*R ;4Vryb.ԩYltכ?&KEA}S66Gĝ?%Jxcc\Q4KUPX MÚQmp\,;ԘDxY{)=55Ap^wS#i=vT철gtUJ0PPI>}iireQ;~rɸ@B J_y]aUmꞑqš}vM-,5Vm~l~R%vMQeԜ*2/Ƈ~w5@T+~?T@Վ4#Um 0)$EڈK]*ť#Ey6e3>{N-ݛ4PgBCc+8z}Oћwb> S1W,la؍eZ8 {gXN0Ϸ]X;$15G6D%wpjЍ5MJϣ`=(em+}3+9 G7`+殜 ?h`;MVTC/`` L H!-$zp/%XڿGmr=fu=0bSEXuMgL+SNU5=dUTT&W4a}aQ0wa4?a$:,Ύ!+J0 2}β{ Q[{n,gcrbJ~K1_.JYѾ@,N6BJWD;)xh`VeͦFE^~P9gpi cph[vpQ NJ^LLndy7% %L ^56< (Twė|RںqPpA,{E]*'*u:qTcq|X -Vۣz;@aH^JhY;v[cGXRޯK? GC"pNX,hCgX-&fB5`^Dt=ԉ*!WwHF>qe*9b~DŽĥY+ߕ*w/V:Ġvʃ3FRzlQV.$OFzř3B Vq -uufT}XaB\\>&!,H 7 kq_\ADgF‹9g3U4Z9ƼCd1 B>ٖǂhvʷP[!8Fq?Z@5ɊZ1}pBQ7D 3&*t0#Ipm~TVFP0IPMsn5p Wyӗ/ji(M[X2so"*n=% +k ,VE3~T1eO7Q)N9|dvWø[Yu9}&uǩg*G<`*`'b=l*?Sآ3¥ RmF[dulrIfjݧ:Ir8^:PG ]WlN&Rsul_obhg;"V% ўxղ#"3 (޴vI q v4B~LJsXg@~aPin[:̢cΜ,p+4jwluvJ7:c@wM y}sL9DtjU|E?|))?6N{IChSbG'f2^"W)?FSRfUfR!(#]r[=^;PG6D`y([TI c*_5ȗ2nIDfK?<ŚBҀ ꪟ+ UEt 5~ P;vu MQ[qe nHsu}%&o1A07Wq*̃n)hgU@u+4&ûi!ue$B↬\ߴen~b󑡣;Wq6٠L;RuBs? J2r"/c7A=V%PX!H!k-r IѠcq&#ת<| I _n*ƿM( ]i,kJ;Y!.}L M4C\ɴ D.1DLV'ݻ{W :¥CL_mn]rCgC<DZC'7jw)f|\i5(xʯoȽ4Dĩ?Â1 rxoq) ~ 8GԿ8cFn_RT $)e![F~h>#}b$dYP{9Rfɋ0-;U*ځT$[U1ndM`ty4 Hox3n̻g$՗[|%ӹVTDe49>EZoly\{ _amy6;Mg`` STik/- cdQPNfT-x݃1bq70n*42eQ?*D_xM6l 4@mZ'J6R<:v;Vut?t=n=%/ s:5I$j94 ne )-|Iխ) )t S}5c0NPYJŘ;kgS[4v @Ƀ|WI$f'd5m_V4V1lNh33[#%3ZʻnIAʶI2U *v )E5*4~@E}W!;Ꮿ\_`Vvu?=XeTeaEr[뉣J~Le̾~T uWeQ!ܯfچ`=Ҡ~{TG;{13&j-.%Q9LosӋ$SPmp["S&UDZxmI |$+ %%%y+|_,"v㤯&<E5O*H9]]g8Pv}K` ^-D6hڦ8Fl;}5=dkxF<# !. r8voHsEhsՏMْTg`E4[zӍСPP H-9|ge=vv|8sjk=E/}11cׂ(_o}͟8<KpO]F{_p/PhW'cvsFM|C0CSqbt-6Wj{NwEk$ĩ_;dv`pH&W_$RsXxaV{6PwvT3 w:t+/ TCBad~'iM4؝f*Leiأ`'^o\vrst ON'̢*fQ5x3 MG0iIyARK"7K`UBGbkhحh!)u*/ɨ͍kSaZ:SχWɭg9J?t˝iRSe:~ܮ kPF/aDGQk4`$ǍE< gS?&uvK0Hd[fM[t,^tT^a09g߀hn~HҜ*xO7T̀Μw坻Cd#q548aȨ 9'GNSd%xKaZ3n  [,w"j‚m oh%T?|_Mu)@)zP2ۅ)?<ӵX&S6g?)|GΪ%9+ovM̊Dz os`# _`M΁=\@"qa `1I'9 E}OZ.CDR4asxU *Kp1ywϕG%BM]-շUtB8 &a; {QUB;|hA0(.i[UXY}?GPPe;YTYkQsq}T)[ zk[) ar+GB?/(ټEm]!rxwFש#Q ^[J=ztrn-1^9,Q&Z#𙽺ox/,&r >dZJ1Vq2 &-ZYTG>Gi lE!ߺ\AQ$'X^Z9{tϋ B7kx~"bx@<(I:=,D >baW;ꍜZODn'͸Jn =Y LF rHIu \fEHm? Pӂ[؇Y6hUs#.nǸMpm{sR7\Gca YQސQxQ e|y &? ꛱'Kg7c@ |bWHI32$6S`;/% SH*WtL ?`)0NM[W!zHi h3"":OF 09 +s}bDT^B6{X<iATXD+-?5Ls?t`9pd8j j^D>X &,s~$<(?au7v+)3Y0V]O=l(*[p{yP6ʢc`$D%BضɏuḁA%h9O 0^ըbMYG9d l{< }kUqحK_3 ?=.w~MTn`E};_jjX ".NBHj7$`KO+UMK6/h#'P.zZ{qp~m ı*J 'ü4ѐPލ7d7\ "<NnR KC+"B*2@P1n.v^9A0f Id1-n U-Jr7gg"*:*c'AۍCWH2+?* l?Jg7=mә 3l1:ҥϞtzM6Ҋ=ydҐ:$Y3)9w{N~N죈/~[lx 9| 9չJ %E b2Ľ{k[; ԊAjf~|wo'X<"cS_O=| 0κъKV R\x,v2vy>ha٠CQy $1~Pc]d1Ht,do`twVT!LҌ!9<0.!(Ce)z>"2F8*nZ𗷥ۗ>2x{][v43s,< J.&t3H,6ʘ8xk3Z8ĭ)Fh8#i%x`Ź&K4y1vG[ "Гc' nl 6!ZS/M TܘJU~7ό h? Ń.oV3غYl.ŵr&# IRHp|<Ʌ*MՎPw.ïp)rL9xZrBB|Zv~O1yf{!Q]TΒ]z=Ռ,`p{Bqa)G;^`5brmr>|2-zluݖ_K_&?z~uqB;rP9Cs,S*> cl/(* y6ca@=_{oeǏx_Q8wuڕeL" /XәnЁ(^`f .h9gbH em%A$*]i|]4~Mmbx?R>﨎եUZt}~ K "9)>q%ah8lұ0.>4W2zcѬّTH sN}zq ܟ=7֙) EʵL~|J}Tϖ>aK]>6w;3YO_)rA}BFw2|o3zZ:Vn.krzzʽ%{Mo1bPքOvR1}<;aoW=1 nFH;fP⚎  G=MF4@tzwTĮ<|:5:K. uEP]l;C5,\5@ DD-nC^=@hip 7N~"my*Xq9D\ֺbnp@e0yp]$A`AwZcN𦁰vOw)^***'P~j+e՜ooHK%>[µZr&942nd} T=v[] x޷Ȋ1ƫecY/AٴBg*`F͘΂ "ź]s=ĕ4*Z8n+Î. ^W1F6ۨn*#I89|xBvBT\}n'[,1UtB5iI1jkp(аOmmkc 4g|~+*FiΒ/5 9*{3$5@=7$q}DxH9^xɺDç';rcAveNX#Ϙ(i~%q4E 0wX^>;~V9~awuW2Y -L\PY{̭q0 WQ4)f]b.Uvƃ/$kX1\W1͝{Gu:؊/Ռ[* TqXiW}l1 ^,8|_r7cW^nr'Yx1yDCI_lAF CUA9`BÊSpc[ǒ7Ow<Ʀ~6B @!*{c&_~ѥhnal t; ֏V 1 _ X2U_~F"6HW ,X4`WC̢BȾfdnΟcTLEEqâޙȅ"114켼VCWu'`dōGCa'aqǁfE 5oXPzDH 7C">/;mGr!pkYyRqԮ[| 90Pww,BS[<[PРΝ>=77q#o81(ɎfNV,j_l:[FhfOUw3z҂X,/mQL= 'c'|2(bu||2/?amUTN|(>B9X^%e9 ajpWZb48{Kέ︲롶0NӠyDxob6wYjCplKs\>də, LIo[m2z9H4~|EjmiMӐ3KɝߨO?+/,s=rh7L<E(Y}lֿbȁ)@fpQ=6f\?DZ2P6<  yj>P-osՓ=drSvf\ATg]p&`[GWgeV5{CpH0" b6RdZP93W8J^i8я ZX?zp /0+\TTyŵOgn>}JbF0[@NB6&3v\>nmJܐ(V:aJ( W\5 O>*ѵ1&E}1[3$7fGGіPu PfNGSEЏٕS@GZ Rw<3cSKB@ݞkfw4ү}#A_/YWIpgJ@D70\.a ?VMyZ>kkZ` ψ ٫>9;YcCψe5 ز"5}. ܌$oﳘ\Eɢ.$57x/7=Q)d{B Ap.rqg ݳtUnی迦N a-PĦU@6 v^;dZC1Z%)0^G+52gŽ1^S:C$gn'L^6;lp$GkoSE56j[9hq $'G{g %{+-Ժw#5u\<.0n˒Ruw4'o )"']D4- [S)[ +u9@i2dE*6SwBSB x:D'w.(`l"brHlZo4vBlH./L()j8^b>F)h/՜/Wn*'Evu#o fa19LށnZJn%>>վ@Dbַ:<* o_)^}4$Z%'Nsy1e}|%ikdG«NN`5; &K.~('&R5x6"ɽ]xN.q떩%;{N\/*/H~@@A/kJո`$2'#'<~$Ji+@:\+WHtCm9,1` Wjru|QE--qk7Rކ.I*a uG9 8 Б9 +$Q~" ]|Wrgn* >*-w^u 9@%!TVz "kt*^\;-C_$.R:ZY>\z"1[w`ljI;GL 6J-?o.Ek! DۑiSVP0_rRt}`hqd Ɋ6r3它%^_FзE99LJ/SCo5qpT3<\20y6 Dα7;.->y'?A+ \Yr5SRW`*3I' ZJutɞxM8Hh@ [B6޻$v&PtؓLSNtk9T0n o;D-)L]됚rT'@% rJ+r50$fU E&DL А}b,nE86d/ܕDcs ~(c7"/wN= 6i |q<!P 4jVJڇZN~C[cDeRc zmWkp9G!o &$ì]Ŧ+=qH<쫒 FpjO"|>v$.`$s&n}vHq:99i4pH'2;/K9sy+CL>NI#S:)oYl;E텈"nS"4&Ak,aj6v@0QU2PN&"mȲﲣ=UpqI2MAsgQp:"ɍˌݣH;(HlVz%>mX7N|r)DgTX?pYr/})9iKwsZ_5q\?B:N!;AgNTh`%O_0h9(0ZvIyPFΔ Z}x 2P鰠>{.M!k8 gTFLbt@hV)x[A(q~Z*6Yob";Z6Fi'5*ꥠ|h>_61 UOmC`)od6o#Fj*q$UH.}ru=CG˙G@ArYq0Q,9Gң9g(9|_gM$d/k/aNd\M#@ %mpӓ}r({N >@5μ\t)zsN'Tbrl~<?6f8>:RNp1xRs77$ t:;$ĸo)1 Mw=):5#3Vgk=_ހ$$/.?wFONgbQhr1y’UMD" g~k xXx=ob>J J"xcZ-`W"jʟ (;JwۢE{W\j%'O13D6c 7FQݣYGuМ"Ruw!lxz;U}e/ߜɗxLv?M륆f^:Ƕrv`$j 3{:`TFՅʢ u2QHX$ D Iy8*OQdMt^T!r91 @N =+vQ̒CΫ%NeyH'&$2zbC9Eb8ZABb!mQ2CIbU/M2m6NƸs`Si?pw0gZ ǩ x[9d%~ɊmQA<$ Gq%Gi4fH.e~Xނ#o}g0oǤCx=DvAaGW5,;';e 0&r=-%9@N"ZVstNLlnjX|>&FX e(ٖ_sٴ 3()-7Zg=eJڕ]ՂG t Dx gBA lK rFLJK OF's"~BMeSc[HQ.@'N,J~)y%pizQ7J(xp1Ehg Ȯ,?M$y4L>NrM&Q\M<i8<x ޯX85y8[\·<~h/ 9(1Put7e ,xвb̦$޶;g[L-:|FIv [{6eGӁ[y!%9zk ),' ѯUبFUߞf6k4q+1DX K5+(0S;i @R;Ko@SKJ E%MQ-*{uRSTM9+!^B1@츑gaDSA/fH h*pG}/촁#TG5ъ37v+> VDTB_lOIH_c͟-*?_m.n:EƴЎ'x}|K$mC a;'b0ޟа!Q|d@h)|v}?PUy~d*od^gnint <j_p =w 8G>[swSQ~`Fq:ϗql1vKPuTvP- ,64/YY_:ݑJ靣@ eМ_Vx1c90dgsV /?=U[Xn  HK`qwY1J5z[mհnóp9|r WfWN>a`aC&rY cN#JgoZPrc?WyO+[EvKņtj[_]L5;(;,Eٱ?"h^ Yp(AOPą\7x7_*X}}(,pc$@j1<ʌ%;]%BQ^my͘v1\26Q ~B2x/6Iω&D߰dQ|hP ס{H$zzz#1Fi[W-Ӊd L/}H5`dJ1>7-ý䀿A$ۖ›_֕Z ~GWBVZf-IMCDHQp!d-[ߧzZ\: ԓ9*e(E!࿻ñw k>6]T0MxXgkic>;po Xەl emjBbӑw[sӶHNBn J%TnO_JIڿ2ZgLMu1VՈv)6vwXmxU8K Su]r{F;SK ?-ƩWD y|ۉ(ytg^s*@?q$y~1ᘅ76gPܞ5XDU2m\-\q'r*d} r܅eepe&sg^Nk.XLƝ,}̮Vq\`"U?'żDʈ0W§P[~ji 1ԭb,cIͰR}&uML1ÉCn~SLzh#oRUtRڻCͫjKLwKӒ.x֩ou틅 o5~:4a1jw޸ƿOrG``K*rqqUpUf7wiqw`%iuYHV1z HG & : 7[+;2%&:JZA_G007]澆u .0{0@ԌQQyjmY5:^k~R,|>^*ˎJ I|r !(Pn-_S1%# gpg 0ܑp08K]ޒA3^ y] ;)ٳ؈Ңc."[ϕaj$~jQnAPnuq"VSF/8lՕE@HV\?mvGS2h5\T+.;Wߓjdc,t(hH|2*朐̻TMl.#ʊU(1^6:v)$P!QbJ'L5U :ys7GuKS Sν?ҋUC17#.TyĀtH_4׿AV*xYfX`JBXl_ݛe7=9$Ⳑbd;M>ܛ.'ӭgŗ4!AibE=7arL 5#: \Uy WX@CɐJDq^N^, %Lwp/Q0rCFYeάMZ7MlRYEwXJ3$6oWDX&5zSH-%EQ^gIfVpmw :>@(Z#gz>yL`i $]!*TɈ+ +EIFG93,Vg,;xSOqIauP, =(Q;ӭZL(<ic,- @ (sAG=Lb6,%L6ѡa\ .1NmoN-9p"'e莕(eM9#@ȨܕrX8:) eJJ`h߻AMQW9' T݁Tl6y=ݺS/MAc-IA)^oJ>i `R=ӃbȖ;5+L[̈́MdB.e8:,wϋc;7 h3o/({O],tg`?^c?aՒL7-ɥ3j5ȕK?>ؾ[: >4@^a*' x򤝚m{]OӢfHWP-˽Xqv 7!h@X yՌ~#"GN֕tnQZN|SҌ'[] *h(3Ӊո=I !Rm S`{G5vDEp@bb陯]"y &]r@qBgCu/Űkr P|-TVgVeZRխ)ÁDsiȒz R !6IUg{h $'Wo؁&M& Ol/>=[D6A,'0 EddķґNۤ/)vߦTl 0rNMUq?NB-hGT H8L<9տ{Cuk3v2 FIA>L'nF Y(ֱ8|f/CuQ0ohi]{~Mݨs|PACX2 ٦)Ֆm>:,z0 @F|kM<1#ʼnn 6͛,;;cz;Z\5uCaEg GlFuy+f QƄ\s9~bf" &dMIg_ZfI?"=_E$uqXtj'bgmEx =ppڥ8{v&cOCg^`uPjV&)"I2gv]MQQ$!heey"(,F4 nat"lHqSjN.Lo[X}%tl*wģbxER@k⫘+4D?sppfǓ^ɹ'a]zTT_~/ qM1T@egC%ThaX-YZ!Jdk5{EҔLͭ1TxagtMݽwFJZ.V&c(FaO.b,ALB%CxwRIBq99o$[iE2V{~r3DW;f퓿 ru莿PId0ӻ0Oj@gB_.&Ͱ `^N<qQOD^pG5L2=DZu;kK{^)s.$.U+fW/MGٹV`T 6{{,'54+ t%3zJRw :J3'ρR`Yb(Y3ÈR*9X6"k9n+S)UycǶd3}^U:]:Ssa0R~_"Q#NⓗЇ-to.tS ܣ_.;Q;¸mbdC#8$Epb~Qs)o7&U-rp5(d\Snc@?%o T_7 '|\ڳ| H&ͥ26̚{q-%QLZي_M`h@t <uP@.S_Ԡ#.77CO& jӴ$`CK9B1v0# &x^EdҌR~bD~HgۇK!-XY)\͖I#cJN7~jZ8s>9֦|/'pz׀KfK#BB_ܺmǻY u&'< s& h<'lM%BO,>vh6xUn VW8ⱙ[pg̟^·%CA mw!35,n+oLQyj #9y6)JOTb @=ڝAB/*|i UߛWQ7Vv9y kt0A'Xu[!D>eEI]NV)wv &.TenU\'cVT]PIcwvEw|anIEZR9_;+ՓLo؎^MI:CkW#l`=x tc ؋0K[,UU]}vİveI6(kqX[r-2rB#¨P&KWeOcdq#6DBf!yDVM~>u7Wݘ)kH`W1#yXh7tlW?J!NlrEe*<.NڧEy)$?v@~q%LFz{چmd@_4(}ގU~ֺ! "^.O0]3aEp,vkrbaG}p3GIk"L8[:ZʂckգW\/ bi?&B% ITKINӟEt+ܩ w*:)CSߌih-&9'VTR#XR(Y1WcfLh\Su+iTQ!SڗEVk'|..w ?3gFB ԋO"Sʎl\rqU8=}F16V%.Nt1t?Ȳ}E8Dw&ߤ5amZ=y|qsKbW=6˅tcNfVir"ԵC~~!'N0Ǝ]MBzm?8y㋽a?Vͦ@kCRV:.$dǥ9)ANZ޾3`Q4^LXwH`4+TX t xu-uxXPM#(-}ZMpr Lwf%Vg mL`o[WSM]C|P%K-Iȗ4TDL'‹$[CxaOt;kbfiF!l.|08r07:SZyd~0k] 5b>>pѼu@=S6^s)RG-W2,gp^-z!(JLx(!,f)ZљjVM.h'0X&]xY\ a!mgkĴ~m Njypka F` mG!kK[zzهħ~1pS?+Zp{p K|ߣOB_ȯ2{䂰ZPY[Z­?,' 2^D̟\G)I( {LJKؗڨbZ% }ݭ7@nvD+$#ؼz]hzsZmTz~kw6]cNtd! gkbzi7 m"^~*k| K,N>m8 sr kx.R4ݷ{etM]eq *RI%emsjfj'P}ʬ0at ]ijf}\AXqzxF3@w s~.[нYbas#Qɣs${50VԮ`I>l_]:BcRͯ9$n֜Ɇ~maOԚw%feP;vVh:~~-Op/7-’;|SpI^ǵW_H8S ;|)OBezr73"=\,q+}C3X sv;8Y,_908 -据pi1Q&gQBnj>}Ksh9 acbKg,JjeD]#fm'˷$f*ǒ-Pr/Nw4O4Yk$Ì}|Ā,:teWZ1Eb/O;#ECb !,Z䞤RSX.^cvX_=}H4b PpQ2$8s @<3 `YKziv4eBFM)L.X%͆eV̆?΁y5u2+#2C(R^1.E-X,c< h0I+0mal Եv7#c*,'ꂣ/NvRK3@M* g[B,U_"xN$:Lt#An8>F-柆lJ3щ~5KbbPN=F(c^J˶*fH4=(ݱwC.h\ CCo86ZPJ/Jԇ8&j%1V`Og%<F|A"L`!z`Yu&,v ae cFv o@Du.i %wj~h5T v=R$; <󂑷J\μufF/ȩc  JmJޭ.G_j &L|o,]~йA_eZ"*aA\9P?Bx E¨ωzuN2Pzʓ=ie:P.oyt†'#GJ>5867o,ڭikvR$c1_vi@\TT _ЮPMSCqó~ jTwj9@dae8S!S)3f,J!W%@.'[D2 *:?5/I8FW7w}@]R+I ɨ7/"326C*8$ BC,4>YZ#>CA[jM QF+RLC!xodn֍XF?LhZ;wnu. -=#2X ]**_t)EF30q_^a"iBFKv4 B<YG('+p6p;6#Q//rۿOsaRǦP]mkGxoSks$oB M}{2/Dzˍ1@Mf]̲wNm1M.N[4UTRK[=VvޮxE: %F.e-K=H qMctEO ㆾՎp^’O݉LZX%]~ǵGyq˪\py.XG0, T ?,[V C3 նKC<W\:O$"l&U5@ҐRL)&sxt"[H/MKE3˻Nz%=m JR<-^uעoJU]#IN"ivQB+K{ ic&NPPu÷lsG'8KΓ>ǿy65#2]i"liDxH"KT|ElsȽ@[SѣK}W~ t\SP4.Ge-xh\դ9UeTAOjo+ec d vg< 1h 0 F1wH$вxQ954qyxdZ+\N|o>M1>OlҤwۯЎGK?G}?|:|aOW'jL^g{'>gGn/zH 4Tq +jio-δi4:.!U=~S`K0BWס| 2JA}^ʨF~pX# !n2/2'//.m ~Q_jz,{+tٜ"~ztz?~AL2hp3HО)&@" ǣŽ>kTLNg0dE(B(PLʽ*>nrXl, JtS(mqRwo| Z˯태e66`;\b䨙>s77DZ F}܄G2!BQ.WW!DŸd6:+pCTQ4*GnH,ؽ7FǨ_)JFh&K0cvZw)\9d+% $ֆUxp'Bަ02xfi[ $J\87zNJ]?穪۔X) :L{9םٔk1c+~C 䜉:f pPӯI{GjW+yu~o)f&] B2`74(d4!A:yNZ_#Z,`Ȱ 3?Ĺes n|- *XS=LkddH2բz#ny@S.ES6盃4Bb+tq̏ :>s8S/}g\^\a;vB d7ERǚty䩨 v_|-滮XdT`=~$qBt1Lvj:9 VUkWEL66"2ݽLfŽ!<#ܦnah,-nlr+#`/ֲhNkōh X*f*j1LICcQqha;Y:d حGC,䨾Lh, H[i^P$SxĎ|[3nd{՞$P(t ?Qq 뽍dX@`üm(:kh8#p4[׬ñ8q+#wpyݟuإrߍy ?>tD^*_Llqv|II1 ;xU,[|pB:=y` /-QTiV,pY)GA'?iB2X'142R!;$1Fy7BV`! %Ͷ#,iz𩢙QCmCEy mAR0]Ӧ|zǍ2tjk7Ѱ{-X8'ߴ4_fFDp<AZlqkfu/.^LlEATJ3kY$vwn屪8yd>nROI:[4EVR"(QG5boT|8rעޗў,X 4z[=X{x7wq/ǂiVtOv}B*) FO?jq2lOOVy%Lkrb=o?ij}ՋIG!;`r ImZ^!;h0fӻl2G o+M3 V XA,S*;x/-hTI_%ӺAiO ~\; vAū!~1?p a|$} &'Z g:P~,sj6ml~a KV58;Cp<Ws37Z ,hpG_zkgjpuimYdj%ԗB+~YС5R(qU-u> ԇ?zXC2ȅcy4&XQPj$J"<0*B wfl{Y,SlSٺNlf׻a.̇{AcU<*3l6}rn]X'I%{AU‰r 8sP[|\"Ea[ <E0VEN63R6ЉGdH(xM%i>Lr!JW_zӀ)b>M&ڱZ@WIJ}9y 2%dEyKA0IIG&_5Ph+5ۅAwM*T3#*EⓈ;0-\`h?Di;ȻHY V;7}aJ0ǐ >{2::߀ձ K%%O$j+GG}T|?4hwTo7vg<cE$˝K>B솵s>XXhDbe7Oʗ/1w\S(Q Wi|i+I1m`ӾK`EpT029X<Y'`R1ɓ97HYZXI?YwpfakD~.5C;$͌=csYp* ϋ|{M }nGk,+J81%9~q} GrW U# Rl'HE, JbeɨnǜQhé5(<0ؼ :9}uп >_^qmt8{Zaڔk oMUz7h#t/Rrfx)yR8tF|St%&ӆ{>lsDaP[<;cQ”-5NCL3IԹ~NhLs"DRY?S11R ;fQ3pbe^$ Pu;%H֤?e=BV) `kQ|]A–ASw%1($nwL/P ~.,m^N'Ԋ1X$VTF-v;lQs /zۗ^Fi}r^BW$Z';BK\P!x{Vy$@, @wd>V@P1Nӷl8-:#&I 1c}*4մ-醥wIĦB<~s6ej+uH$&ݢd (%ɽDsFAٯd5ЌfI€$zĻ0HZ"fwÎ)Ogj႘%7xjiy5'c7e)5j-yٝx>7wqj!N)Ge7 4}tbH&MᩳIуѴl K,&#{ٷw]^P]o>e,N0VCӅFV2"XkCrIjig2dm|(U@4gj*+tO{\x^`!<`]Pc Rcu*Qp^zK̡AXT7>JV_RZP+cC@ qrlܗis\1'r fF74 Oȷtb(;o /J;Ň_l nY u|%YKo#DȒQa `PEjzf;3 iHڒ/{z1Jt:{Q\*<^^n.)댌.;^:6EI[i*lN~LDJ[ ]Άž5v+TKt۩ZxsUM|)' tu+#Df41jef޳bw倵ZsVxYk*mUprcmC uMm@2f/ze}{[c)F `7()sJ||tJ'"h1Xy?[Uv!8y}Y_TXm_vJ‚" .hTgk1wmHZO'־~$o`mEzb fd56J RZ#nn_ms62-ˋDcuϲ6:?4moN!7ƊhEY\7uNU/ahpZן=Mcc&Qȉ^a9U8L1!a,0ny~nP4Lϩ 9JeNWlBndm- տ| eX:Is_u6SEK S-uy43|pϐxѶbγ:SD*vovr0wg<4gWїDjR2e8kиӭkvҘ5-5SP6LQb5"jNg`$)6QP_2 XOw XS<2U2! 葀09;pG7p:g*³u&ۯ5~dJgaHA 6ޝ1H:{Lwa4]'7m2L 44xfA5Mk`p無G!I\ĭ|('в"&ٵdk {~J3/P$x%s+ȸ: f`zYDS7~ o,!c I(#\QJ9*2?5t)F1|\ ~cXAHDX19~FhpU1LjD,leGrќNkO#ި6'/rn5Isfy\NԦD dwac&NI:e:S%{q ڎ  ;?sKW0:J}UUeQO^ G {uU, 5<{H{a~~慐t/8=v`$/hŗˉIāa)FGp9tr &(n:AвUK!z@LOcpO0L T% I3"-srN[ChVN;&ȓvٴڀtmdˡyp;N*qsz|?#}nP/  mkvXN1N"[]bc;84=~0)^o_R0RZZyqX&~yb=u c//vGbPb3d10X4<?kgS*^/I@^T;f2!\xX+oԡDA?*o7z D[N[DZ$veafk8Rdw )}h+X "i12K{USڄ#f ZtC5wݙXVğJ9fB֌x8 k%Bx@b֔:]~K,!jf"b l1WIDļ/gI:2KX1;V;1t9N:4"Lܢ$|/αxy6*bZzVj蘧RnD40W֭dkqO!w2Bb29~E}c~ŋM/(yOm%F|yZHM./=qߧ18Ϲ؂[&|7SV;K^=.ft:*Ey)EcNj;v%Lek׭-~s7k!Иh2Tx)S nj\BCVGlMcpCjĉ;iW |Z;QѾ_2zoOϳ{Aʩx,-PlDv#h)p=B&s5\uT-xM]W9;1XDYO-+{1I%u2RݜSw/(}AVT39^Y~aC;+-&tt<>}i wD :ZJ<*(w%Aˈܫu拑\:/(#Ѕolel\TৢFC0<0!p#QbdvlGdD;Α䁷VNƣ5~ /X "I76^]u{ؼ!\gqʿҡ1w8VuX)Ԯego*r{B$S]x6Jf-A, OY.Zs9Η8OZ#iw&gVu-90W+dzai&Rxsa+):֨X?6KjW~{U/k=&9`R؅FƼٮ 0&?xs ʰڱOa}~.!yr";aPvfKMijC``T9r^Яޟz>2?ROWX ;*{v!iӸ\e&g(`a ]X& PbLNɳ%;xEƁAq9aJˆ䦂;FW` l~SDࠒvLhK;^o0}G/uMk#OU,XpjgvF_ W~jxܞZɮ#w$Q.:ٶ~je#smV&3T穀6Pr&8va-9TRQa]<1-x,<P]"~\@ ҍ2 [xE ><''uބ~4U9uG"tLMqqo:]5H(4΋x֙Y_ȩ"9Ҥa4IΒ'ٌS/5/S|D?*L@V=3b"TD?K\Dc 5K\ehaH;?K4T B+ f"rgX:in<9N4]&6\`8$I`c*mwm^_cL҇78Wcy W^> /R_v69-[~<xM}wN)lLaMoJyw*yv}{Fk9AƁsm. [Z,).S]MSĢ9%zͳB"[OBh7ϨOG Y%cgFHdͤ3毼nIiA"nb`ZxHȅgC\? e]"[Mj³~lOqp{Azaɕq,jCվݳ?1$MxI`̿XR;ԃzٱ`tHw !!*v?X[&LdнvZ< {eZwOZ'2|ӛ%JB3UJu<~0Cxfp}jXV0aRט^awuCRLJS9 DY%:!bms$OM^/a 3XQW!Lۤ1&c%XG`M7œhvpsdSkXL}9sI0Bg9]}׿Ƥ>F&I0"~(*'4Kv/'{6"Ù P{A p(/k`D\c&31~ #+RŁxVWދ-y^wck. ̰Z*~]7!74h>:k}$_RœLnJAl,W8$VtهxbL C֬*LeҍIR9{G_%-hԇ\H+ʹn=Jy;syVA[R H7#g(bi<OŤˡv2!n~z)EZ \-[gvN"gI!(ub}ռf9HC;2OFXS"s}nu_RȆDX+S=a8xf@{(ۺ ]9^ OU&KQs7Ϋ*6n[.nE =`@4Mv}\\G,ᘜ2HMWcH%xOe8԰\Ѐ+{ Z}-!.1/ͺ&nҺ2źcsHa?gTMkNBw2-&/ۋ9yEmW$'GȪ J+-Nʶ nԉ$sQ bb%d,!2}$v뙱[{c57ט^ZmOTz\IRQUK _KtT=Cߥ m^8Lb![d5锾LXos#15~OJh8)[Nޕ7UQo2J:%]ˏL Q=LR\1CGHS~'&O~ZOxXk/ֈ-4_V+zK܂Cb#H$D]S]8\ =O3̀sذjf9y* o~ ee#avPH%, Ɛ*@׋rWHy꾾kX!ˋŊ~2Iy5R@dTH7횑R"֦%E=@䷲9{RkZY>AL-Xn)'|1ukq*PwgٰNWjuO @G"78EY"輮yMS]:sEUn!YlG^c=6qtM$_ aVPdsCٵ<H[Cx.؟ Y<;=&"cTfZ``ծ*%;Dk=]_ya>.@a$m:T ?Ěˉ0Ÿ2VeBut2M[st٢Mϕ Hg.F !i.{]Ρ_!%&vN|qסG`<{Bw 'n?(; %F\aVy]Vr.(NWKq`x$4%mi,]8S3"a1Z &hbױt.ΑC̀VMBy;࿺m""_%Snp WPϘfzy>RZnN] 4/vgCŶ[F`m$gӝ fO hkcY'(h? b D7@- w6{.b Õ* L30DQ` [&țF_67C| 6с'kHy$|(xIW rlAȡ$i"P=+$wERX66}ʗ / gå-IEH0sYsHO@”͋X9DuB?נ<'0LJx|0 35t92^*-?A'm< lsn"ݡV _Ou3Rv0wvΑQZYUEDĽpXcզZ5aߥ}>*0XR\{|ƻ 7T07ѧʱp񄌴ڳ~ha);g𔓘͞A(,~]`:l  !-ͲX4:j-2/]=Y y$C]h.u2yL-^]OY_}У9,0ό5^n 39gݑiÁ;/9Nh<=` c)w@o\ . -\;CK ]s*,C1I)Fӑ[#]W\T^-*zOe&CEKG?^OKs+ZAMCp#u`-y?ݐ"z-k$yEجZ)7ֱ fFj1ەS#KϢ(hjY)bfD9:'z[ ;$ ҋ9A"~RS j(UAP@:JMVLuE/@"!4k)ߗ:VLg%WӡKYER|? bOg>)W0"Fj-Y_/nֲ\٫z\q^2k!PPEhǀЗ *?Rc;Ϥ3S=NpN8IX#(]D$wA92udVݵ "&_׉T}ؗO$kBx.K[<( ,+8AK(4bs1iUQF8gir͞.‡lw uz5Ŭ*Z4 h~iNcAl/6O2K"7{ॢxV[{h#H*|i톞E]같PC ݂$ܭlߐ4uvCD_22A R n8:J6QKLC 7{=:xDSu 6n^L|[5 !+/qiS;LCċ6hRYEA5K/1LHʳiCwEH{EE8kD|}[w?? mR*Vєp$'ˀ΅!%Y b^ZL-ɛ,T~uG{vHYXĊw?tG1WtNggq Bp;CF "{@ P!4ciP(+䯖XEOi3oDq3N^xCENL W,$۝'U>{xseܣgDI*)͘ApC 8^8$bq=puT1QŒ =DM ٫&5: (p};i &Q'p$>R^/fr!i31*"~H%=TM\,':5PW sӊ H ݕ?+b|W}@_~b.m>b}]gyZ zۦ?CIp<^_K+] 괟W5ڔk8t.H Lf8mF2[e!"7ՊhZ$l%/)СRʨ~lX)Ct(uEz޵gzs)2E=!lLKКxrlI%d4fN>#dX\h .+sh`a47@q$Omv%x2] xA'i:pCDTPFIg&-Cwھ+^U2SDO}vgq}{Yz5LlXlm'^_ucT@_\E8} C"0/}Wآ^W]e9H #ZftVZKPiFxSL`:+(X^!UN]U1舧0N 3%Y!hP?ؠIJnh4Q<G?Y'H*훓ȸyg+a·d? Q?%*GP-BvI,KcIGHAwB/â|HۯQO&d#6a ]4󏓐Il*X{V`"ߊĉc\I@.CTgpFjcFKjIa%< 1ϋ.H߽ 'ۛ5SpazduC B['E5j=+Ih jK %2 3]n%A9Mb{O:Ũt >J2E)c5϶s.U( ^CG7?S7g^A=!l9~،k#-\߁*PW+A~u y9p.e`)omSsH,>4ϣWfHpΪ'^uL+J _f3^dl۩-# @_p ( 3?t(/]BE'Vj? gn䎹?/]{3D翛 Dz.|(Ay?ʻjFb}~rO4leCW$ʃg(Sve@}FCƅP %;P}|7jp-c!Dr̭-Μ9W#f5_qqƻ|w_N]=# U:_\`F:_&ځ o6w\8晣& x$bs}5DQnBXEkwuyԀb&PP !E]+i8VL?-PYC. +$ 3*9e mɠn[+m HTn -T`TЋ1]y8gx`tqR8&[jN1R?F욁> M[Ȅ/`_ %'g.~RQgr/ѱ7By++tC/[@[yѪ!G6`aXQpi`xZWEa, n vT>|`֒cc >\=b6\ i"q6osIJ| .mKk@zͧaDo%B'1 рy{6iP6[r ]3+ Tz0Ȱ]xZGbӂ)%X+4[%SFӁ8 5`;? RR VOjt Li.POj6p*^ؾ\iGRnAߊ/ APgX1t4^K/ň7PCu(2p3+9 wt&I;Uͬ FIf?z 1TmK^ybbuz785[/gY1N06Ꝏ~'VG1/IWLryoYxXȚFs&%M+9+\,~mоJqfL6&ӣ(.,DpV-]S;YD#m' KuO PƳlm- w GtNMZѐh}•pF|BlDG5Oh&hnhk =<:&6gd+.X5Jx9nЭw}>"㢦>1?m%åda!B_"{ <ª0!wt3'n3raT沶Dkjfn-Z Ѭ N*ϱ&nHtODQm,=7>v\i A+ԈB7ZS ՙ7R;ʧȑULJ2ʖP "XHF܍q;h^Q$͵'C7T"37҃Enz~a!(\ dl;cKcq_꺊2aaUg*8WtĜxj'u$Nt QBnPpwͤf{1m8nc2T=-oϓwo Da+]II-r;- 7WA[;]N$d QEOd6 't+P uH^_ΰx;gO&eK778<Қ{ .9㖫f4;ᄖh6ą,z(: *n>+X7ῦ64o{2}Ω^\MVݤi~Q6 46D;0ZwEM[Ixov`spaUcCUмq!Kfǩ+W׻|/|Vu)8=ZiENOd+>HN=>`ij6 C#;B@smֲRv6F9su=w( _JTyqx%|i%TES,=9_jD{Ndw[B&vEA=/{L uqR9%`L.+|T>ˀ-2KRxIm}:6?e[mD9 Gi1/oǙu ܝ^10G0nܯmdr3^eKe]v,?4/dCy܍m)PX< Ђ+T(a@@3C4ټOӒwGy/!)VMKMQB8eR9=O0bJ\OdpñBk_f. ˕?4Cp J*\u3aV4MYU|6@ΪY71㈐rk{0&x"=7E3TxvyQC !ogT?Ҙok%)\ꯖ>%It@v"r u k_(9?IzUi3UIԜBl:6RQY%N}iϋ-m"~n {&ِq78hG-?9?$AOphڝ}"3L."񅨩ρ.Qd&rPftwugg[9QVD$j/$ǞA'>bIP6W2bKT.r|FO 44|K:.)zL"|ԍ)/xVn'IjVw wIt>UxM)rQTս2ѯCGk(M P6( s%⥸,ы"Mt}RiO 3h Ss p׫K*<OI6]Ǧ/W؜oLGXVTތ*&9{"Bexy& RD9J/TڌM)o܄bAcg'l}`,ӂΣp~*AV$)J(E1lL)Xu1׎!2HdvtS։ڶ; fBiEuYi*)d&[Ic?1"3AG,D#AqvޯRވoV5s#z1ϿѶ7:{?}j-1\5Y5OOp䣲dCdGEniK+|ehU|.(dÃ̀+auF: vf0#YݻN =b,\iXC2 _"#<6"4e䃒P({ Y#^d ls6Y]zsp列~ވIn:)e@j{,޻wco(_XlWY$W;8:;7U8' +Ww4KmAf(cNg1ɏXLxsՍ} 3)zGT(JC 7(%lZshGrJv%y&[Ձ`ǽVXyOFzfCqv:q8oPmdcL\;ܻHƒQFW1HOŽ4*h7lqdw8]Dو^xk( e6G#*eė`J{e-E p 2Ss i”0!'{ P7L!ל;cTi{'8W'>)p2 VvHe _YkJumiFi%k`˷@{fVVmN:'ԕX\p|k^J>ʉ[]@r(HY}e}<AI<N@}0HQ b^Y2VQ;0`[˥NZ4(#L [ ›8"/j"t|OJD1@I hX$XIA$FK,^".ZX"f:*N4?~޿"9z$oy47? F{ x Ahto!t23Rڢ:;#A&>k/ y&7ǦΉX} %AEXSVg]WM]A_٫^L뢗|IѴ2MkI}(3Mf^ĺVVɽDA31Ld7oYgng )UQʄiQ.R!Sn"DKq+o5xq i-yZ+:5_blۃ7!ƎIU2 mL [iߦÇk-La\~͗eV'PɪtY2ZF '߀<DD}&j䷻a'cR"aA0),wq:\F,"amT2U_~T~O9[qΐ׾JoX,u:HR^?^%rٱg@ܦccM4='ppIav2}"b᧤P:Xl]`O hk.t`s` AiP.S̅AagbˬTgi*|+iPك]^9$k7ڂ/cs7b&x+=?{+ W/$ JȺn>Ŋ%vtOW8ڨ`v>vuIxWy!."'P㭱O 'bĩC7bONÓ|JUq~)Kf\gU~k_>qZ0_?0VIRp}i~KfL)IWCҢ}_$z/J`Lv܉npy<bSTp`>V :%ג 6(~xC20p'[K֞΍hkG3d#A ͆HFŦb،31$u݅F #h-`Mc5 -.@S/|@P"Jn~Y+*:īy x5# Myb߸ o8n&8AKxAT%E Gv8lU Q.ouZʰ˛q7SSThtTP!I[ =˳QYN:NK.+#'QuQq5{R奤{7O*bW6o G9xR'X$:vQ yj[%H[<tq()#J 'h!_1zt2q 낃j0Q%mІ:u>ni %4(USj2QWRr=V ]`J'r_ꋅTo莚GP>CyrMBITˠuVZvw5u|oQL{].gKFaqw\e٧xF~]U)c;*JN&^Ç3g& D(H|vGI 4JnTA(q%H0Zro+H/v<:jQks[Q@I4cɥ|bB-+JOaXwQLb\#Ur֦^zAD F4 !Y/X BI/u/--rƱq{tJ]m7$aF*s)EGx k+19OE֗S#{}>)cex*>"~bHmAGp#r=|tn9u-mKv4"++ s K SG/׿bio5UmORq da0&Dhy.Ma&5My? ڈ%q-G<ЂqO]xtKȺQu&|VerL*(0'.{K^Ɗ$ AyS=mxb용Z2tF%y޿fAN$R;Ϋ,9ׂ gn5RnN>Cb/h*tY ӎɲ !:j Yvۮd.b?곑8^t"z ϋL<{r%Ren2Qv`ažGUma봽.k**ނL±dR}iN2cC#0ANpye~Yld6*X6XA$nHJv -\{Г"R7Ao^o0RKvO!%硓p@N/wl ,XRaB$f e ZGsV厖~$A~eGZBxapD}7N+nBW{yd JI©6ǯ4;GZ厾V/@ & eREo9;RzJK;$s XS4'[v 6ՒŊi~NR\4KuHSj|2ߤJ4UU4ChВS%zW!ww/BcSS"B͔,%!x<$˸SiAb…#4d'*{%^ TjHLcBx޲@4F}) 8H`P~QNQ]GͼbM|7"krz'@WVhw'a Ǻv<j rسRj/ciJڷqW hh›Z=Wms0ޱ Y Jt'"e*U d+lv=Erpk# ^8"l &"&aG}HKlU‡eeq?Xoe} ~\]i+]'?+?y??<;?|7C~~TsKw+v_'St=s!3@KET.&v}@Ro^ПK%s9J^KeK3TrXw&+TRoS(6 ͊:_w5oő7s{[ MۏOU).T3[㨰|@t9D>Դ:y[3VpdM+ D7xVƁV^T@%۸M&qא.m*] \=q%_ 3薃))o}RώR d6SZo7q8jyCgYD/ (/xe,` _TB tjˈLNo~x"_yS)1+0b#9o7[!sG43Fryqk6;W/Jq.ćV̪|w:87e\M j|k-zibE|eEyw̉v@t 별g â./jG6a?{oe!({4\MSXu W~%(Z}%D2Z1RٯNF A{p$rvx$nr/H:slWR.0J")UiZJk?"]aJ^tFL(eG]|ݯ1 |Fl/,.| Lύ.  #(wK2Bk="nZVҪU Zj&[Q`]{#b1v( WGDls_P !C%$ N]DO'S`8Onl+͐M/?u61h&GhK6BV $QX_FXPnė?MQe+y-LJ Xk|$HpBQxDU,:_HYTqnH )X =̆E m ۝xO(D9="}0NeǼ= \XoN}Ii0XAG1-Ax]v-#/q#kd}mEZhy-3XذqzpoebX[pKJu@ PPC SbY`}](uf![1.#necEZѯܙ_s ;}*g廥۟mGU+k56\mȀvM {o6e~:q{ؓr@Jlg=%ҋS ߻z߯}x*g '\?N*1pI,:_o8j9b-x"Zת~趵Es6r&yxH-dzSX/hR5)6j99>bב̙w^!2̀P!)h2Wnk FKR tty= yu޷IgߘȜ-{u3e&7tóӔI{)Kم8*5a{6wD~sBiaMWg@e9YXurz9jڥqN&[ {)1åǗJPe mU WC9gVn%R +8Dx`}O˕Ί[A앜mJ]> d0~6 S`lJB &:d!5{yB <^tgNf:oEwBjXg U# Rl'H~~6kuP8PzЊOYҙ3v2V݌V)vbu2hm6w_$u OKmG7cwm@x8߫֕nGhth5G/o9+>^j&C'Vh*q:AĭR{"R7>ۗ {ܵn#fCljYgXSFp ,KDyK&/ 趜Y+Ƙ9Ŏ4Le"q^/ٗh_XicyHΡVE>KPH01E삶[{\aϠBm Y60>pg֎N$%D=`#R ܚi2m^#P@F =Ñ˳98oHo|Ԡ <"K*LM-ez1.E3d3hbҡܝef!_]4;UcَL!e <<}u71jOZ2J.iIZMèk d}M|WL?# >묩t,lW6,㪬GX{]}"<.ҀqZK"dȂ`g.C׏[u\L.wRo}6U;Eni 5dg&SL3)?IbTY06 G ֕0s](I^dG;Ln${eo}m L~n:r<(8yYkV\hcbХ=zYsoV {>|@5 #2pOy3v7& So_Nk =`<\v)zYe/s`kX`[U᯼.`&Ri Aɰr+M8BkmOM$177J{`E1'^) Qg*x掋$`szkJq"H%Ŕ,|8t1/G/_hG}gӅz_ ɕlxg<]'9:/Ԛ.ZO'g[8g#RH;Y Ek'Q¶G["T Y/|sޤdIw dvpoX_Z{x >R3 m, m.Rhxf,mkYvtYɾ~^K*}2Lkhs=\|rW;Mr #'7c 3DC7[KNdK$( ;bI- NRU}%iˌг.QAˆTh?gք{&j=`F3 KZ\tz wOH%.Zr4r|Ŷ_<$] ucJRkt'Vw1ϟNgvmG0zA0@F&9:ڞ5ןfsVF$N dCXYm)\C&dRg~8mӡ?$G+] ʺaF]xT [©Uv!IH9є.MK3\ CnOXFS)6x[wBv~뷸(cOVn|:v[K^&wzrj` t/pQލAᤦ:r0tr`|1L gw PDw7ˬ5ЃU /$tKTh i;@j 2 ILWHs7E+ ǢE?YYa%Ḯt.l[-"2o1t#Ӭdlbt 4:Ӿ9oJCA3ή6Sd  /Hb*bՅLŷy30Cl7rw/db') OQ`+z,|ehS=L-ՈكFⰹr;LKXt;VEktlWYjZUWZ-2}$#wC܎0j@vFO{"9d`f 9AҁDJy5YdXy ~L^PS4PH2 I Sxv`k'#m<;UfGU{m>bE=NRyDp!zBr">Teb8yvv6iԾ[RoV:`&K `J-(kVgq)(v6lɵ?zYU 2\cuh7e1 Z49jM ӘNъĘ>@#!6ՠJ٧4!/f588|i''j *ڛ"gp=U4I#35; 2>ƥ'`y]8j;*+CU/F)^*wNʁ9.{>8ΎESr)^V5'a?>;_瑻X^Lo<ͅ8i_ w򇼾A g $^/,l|2\8ogyqW>^'rQwH<(l3 IkdǷ<`gLZ_znʗ>S nFґ"ZORdNy նy;^*?H m mz@mCZ/گV3x~3(-E__=3A q8Q>zS'>MU7Q߲]m)әl<++4PO_R:5c-ƋҌ$}ȓ@dP̹3CףfK+F4M/W~ae6wd0՘|gy0>+A!QVvk;e" n2$Bc_?` h[ӆ}wxs vѽ(Ȁ.\\Z եP.(`Hae7'Aqr*^ *<@8yUpo\Jx3KtKBzMtXv;30 vhW>pFq~WM|m{8ea$[o|_~zS8Cʐ1L#"_딗]c;Ԣ2ʘCfUO lx%qÃs좸LfiQ=h'BY4 [5ϟEyAKhUUT6՜!;&MWxY7W'9",iH5W@ 3ZyvOUc5ROt|>Sfb?+vsڢ7.fs_nF";$/ա'2lk?@4u6Wc@lGS<[zv>|~=㴷TU T䘦eS\^-mEZ p 8 tXVIMׁfKB V7OJ{ I^"JH 훃l{hvFv 6J]h\Kq" ۮBs"D =]XaB> .X%!' AݼJa讬|fS; j@LoW(]+\܇6_$TK'T(XjQ5ґweh0& X[j ў'QoU9dݴsB۟K;VrѴ19`:ގK尰NXF^5SݾC]þ!eJKBo{{ҝd2kh l;dK{C` ު茍T'K[v)_ &Lt< ܣ b3Y>4(^`54v72(S,l]3Ջ4B*"R8Ӝw<˜BUO^g#tXR/"S;uD;#yM?tp{n|,{z?lv꽬P`TȊXQ9юM@HjD+Ӎf30$%9Șϊxt.:9o6Ei#R,*`(pX i:Dw]z6ȇp#dQCtĚ$~p|;+WHčDwd<ΰ ²͖co2%*j"Zqg ,E5#ڊcu&aru<$*U9fe֝bP$gdj-t-vi%8/w:/V ^W+J6[6 ۥ)WNN}:꿮kX!f,%u+Dߪ)@uiX(}j0'{$˘ؑ7(;)fSK"O?g8Fr5OIK`tFϭ<% ^ cUv*>?%" ji&LCk >}ˎ^3+6hIZ= ^t'0m<; s3ȗf"4Fһ㖭Yg/R<-͇n=v%Fdg{ex߆}iko©)q3Lv3EƛGl}jg WMp35s1vb=;l;2xKU퇤E"9C)e`oD$3rv%` o;GL9|MA¸BqcWOplTRr:2..SC3{1%{$kʳS_n7>/f!k ct*KTZ²J?XF!fDUiF($O|Mv~pEncg JbǺrیG3%S^m~֟Coۮm)3}/R08/|գI9)#=cض֪`չ+l^W+!@*d|@`K5q-'zpB`gaֹ|w2dz/\I`f=qrTU4mR4/I> E??*5d RK7U{;6Kb(i޲F(޻DG8mƛ1+'ޭ")F\0>)7U-ЯIRk^߰7k"J-F8b/W}f$tWcN9C%7<;YYYcy?}.naɎ)xJίnM}tuRK<̃^Aq TaS c ٠ms1Y StaC?S,.Tr)h8W`DWϮY,:RAq5( )ߡm"w |=\dqI)@I*F5Zf?%Aw].Q vxC"aawbg Ni~wyo=z2@ g#Y hs]Ͻ V;-`c@/nliD#Nt`㽗9;D0~m႒23[: :S, ub@J ;v: egj-;VΞ:X JOܧ@ZNPc i=ZEWF](& 'mW*G Ⱦ-XX#a8x!7',o(Q p_ĽAzDM`֦55k ?h3~m۝mSU)+-"ÂИŖbf}>l7/-o1 `Nhu)$&p>dDw@x'pugq0>=.k6/y)P0ǻzDJx1eV?T>?PcoU -~[ATVRw:-ׂ퓌7v!νv4Ck{qۓ~+l%|zy}ɩ%&M g\]]o{4 LE)ɿf֕?7Xlx{gM^Sjg^rX*xIs_Gh PT4O#$JT{珶Y\T%mʋ?ٛzV{%c-ɒt+s`va(Gd(%wR.yi٭8H쮪D\R60e;!ly4ݷ騌ŎV4]a7ھf};Oh/~f;bc=0fU] ei~^q;5.0a/*ʲI?(2ijS!Yoت(XmC˳$ҙj䥋RWQi˕VG$.OReN]9cXrrVA4hgnMTk^f@5boG-#'+Le՟9aƣvzI346Yk>d=W9&2l2$ȍa8DD{0VlU R(wp+eXNREAp[%nݮCQk: ~AJ\P(MF(H,sGHr 4qy"AF6  wU T)gtL(oDoLasW':STkd}6 _BDJq$+! lE1g}w݁t_o$f|ePÅJJeOYp]+щΣuРc1;*ܳj)1z5`q9|NSIE?%J DS/̭*aEObvOa0,bd{ o}e̡ #hDr ['^Zh?~t_t?=Ea,3L>"um۷WtTXcqc2], )Y R/?{}fw7`Qb=&k+O2I XN$U#}يXwl,g؊: G:1EOpOߘr_RP7]̌&1 @}M6EMC]cALݳ rΫXŭXT+6,a9"&Y7t-P[]>,nBMx؂> x>ҐcaLA#nURR촍ζ*~x abL{Q[b ֪6?Šh<{ gbU1[/qP~?]t_$Pzcjs68se0KM9DKZ(Ѓ&ViE+^h\-^1,p пB^ô9=mWiPLF8@V!)_qYHPm6 h* >r-4DEY9ye '8@@T(P2ڵ }K~ɥp ԬOv|}>x;FXƈ,{[R ioi1m b0$ksfb^ D) %0'dȮц@no2CK~s$Cyhsq< 2QrN̆>"Uؖ=>dDrG9T!N圆&޳l?/ pAjILB>yu^ӞBƼlk І'ݑ-o\vZiY:<.ݑ#3_o~g1_6v_Qո_^]9On7Ј. 'mQh&H澥W=gHt%ux__{=vړ";S?W1Zshr.'l#J O"z`<$kΡKX*X9yH ѻ=d3s6F 羟eeYsƈh%Rl;*`8(3^I k8Ȣ5N@ /gvBن$ { ځk$7,Y\@lGk;_ؽr*O88Ω1۴uqOBG%?fqF$uAwxN3E 9.6L;\k,n&3`q{A,eaN$ݒ:b]}^zFDΣT g0* g+W1 ,+f62s2<`LV†qѕ;tE5Q̎"S'f9a]euDv0"o0c{OjE|A -f_ӞR/?o}B1P4?K-&3"\P,ʶ02^cec=Lv:dDha-I/;?0*QV0PuϷex_#!ZD1Xpa 8 ,DZgr;&Q9V>9Ei:GDӴ6n(upD5wP7@ q?QU9uLtЌ} L'({Ѧk H@+dI{$O[hX[81~NRУܬSö@4d:z%Vex>M q>3hP'y+6FJω"U৓x7_<a}ptf<5Ϛ7GoSZN"LŁ^- xgi9B  Zڿ\ Q } W0Gyy%39kd̈́'jh3vF1]?jJ%'|ܜAA~USGK&^5X{uxWäd{|)fM{Qſ.Е _t/@r: 䉵9Yߺܲ7 _$.~ŧp ygK%E} F@ :wNR!z]tP2/+̄tek{ 7` ̱چ91H_ PDT4iH4'V7XdIp#7Ple>8\d ܘuFF|+}P?OyC=5/Åʎ/Sdj5]A@3[MU&T (_GHiJW4$s-!&PU}dU ݬ(^rܕ@mIBŏ+3O{ n&_ZV;3ۤ:8"sei5NmMd}zG |v(^?њT썇3Q}FI.*B?xVs7je]OM-Hl(Sj_im3hK_pehnN}Jx*cD,ՔrwLD1l R)za╬bޱ ,v;0$W~C &I[PZ[\ŗJl,#瑹ѱ0G P2BFCm4{ztmFȠz ?FCS>ך] c#[3bXߥ?H^X2]ŷJyɫUdlAad6\T p%7]f,x'a[uf/[=ӓOPcmob#WFN`g@S6Շheݯ6Oգ#jq$VW$ҒE9L,#@N lw䦇rћhJַU;`F9JCzi2@B:bIK(W% $41mL# eݓc/zѓm1X8xMøny,6ugiԵxтg>2-ξn%c.|k" lz6+ZYmjW=⧶~TmȊimGw4F18_ W_ۿMm]^L"q  y,_zM|H'΢p/!o9/Fa롣@X؇7t̓Iy/pIn }ĸQIF N .8me'{{Eί ܏Gh+"5AMPO7XTqA9F\wXo8o#׽po[I$\ΐV9+ /lƐДΚOg ?r&|VUvF- e0pzNQI%3ZZ5# fz8,&DY[Zf= f^>̲g+2e}f_.?Y4|us4^8Y\ w||I<|fWK:dmr?}!Vgdoyln)EDFZ`Vi<"9/ ]:GFR?x"B MQ8508/+'%d NR[b\5u\sâ|sjH݅?X'~#2YK ˗8݁dStcGnF?.]u1<Q1_rl2xYݼt}lqѭ.oGs~nX#xP[Bh;5 DL2B^ 혛^gfIOU_vLJҁฃ桲0>^N٭oYrlQ*칱N˓E[w!( )fR+9oe o/Zv6MfEL6态>QЍK_[8Tg "gd3?H"ǗF:3*]VtڻdVVx)OCbpLC2@ YWeMP龐-egEBл3NW7GxGX8FPkwRvEFl$i_!Bʀ|Ϸ{z8Ψ5&O Ü[\`w[E#9VcBCL,.9#D=h0!:'oXK/= qj#"lepjZsa3LT5ͱo Эiñ7GX~]oVG]x'}OD&t]Rm.`Ҿ2M0S "%AE^1@6Szk"ō\yey90'y Yl7 OY]=:}RA=dl߾ʸ#!ei\ܣ% Y`ژάvVD?5ԫȞs!Ƌ!F,9ڤAM70vxɾP\o\*ca6Fc{͗l}E'bG5joԢmWwBRY۳d :/X&硙R[Z8!H',Ctdw_l0Zpz:HK6\77(R&TC PA 9<} okCE {cƘҕS؄ UBEŠ#n+ɓ6D9&2-d$fxhz 1GWu\*1U|{0YKDɇֹtviR5VHG-O>un3=Ai+\# .(b;f~-XϬG9wܗL9*R2?0TL"ݬsA>G<9`#JrBFpq}VIJs{}.}x?mь(< y `g}+,!0j*5YrRlSXO/_b;F,ńe8.O i0Sb)|"H@VemIa'y).Ƭ@->x~5,ˬ8V֎DouoƖ}M1jIKQS*vПdG21?lm_ޯԤ1 so,}RrP?Y¤A#ok F rtk *[YUP{V֡?e' D4\(t j[U[zqk*qA\({׷M 9%Qn6nO 661pQëe0FTޏ'?GCι1)ܞy:RAiQo( LHq_&d$VҡjqfR<X<<ϥ5/ x)KTzret1Xnl^рxC(F9xd>AE D񍴻p?@+bYJs4KN@apB_g W"vÛD=gcDO7 N=NEܰl(M+<}1`c_ק%F|=Z:7'Mђ# #_6: ~[o^;0+ Q||XH-8ZG 0I&Pi_HvYuJH!X=G@9~9q.`xL:rGF%4=AdVRYnA1#F,V>'h-u.t7ȻUJ n6樌ñBoN?VTl xcAɰQREf^b@[y&KNdݷmޱ0o{dۇqgIT%כ''g"ڄjp~FQn7&vsϑ.k3j𿳅H.Qܗ/ߋmQ ع **gpf*ٯ3YV!W9Q Ùfe ?wWٱhqOXuޅВ#2dh"$U" ^06pFm{X;Q1ˌ;̷4d^)acKRPEjo+9H1wQ7L|S}k^70%Dž8)_m TUkɉ̅WI1Eda.Ӄn^Sg M W|󈺓..~ԫX`9pZV>oRЯ gII]pߞ83nROEQ/hU\'eYnz+7r["UqPYmtoK9~ȄGo+V-\#$j<ɼ?j=3}i^qR$bUݨV EMѤ|TU e8 AxhY]KqYzǐPW[^ q0H"Xd88 л L 9 ht0u2K`W؈Et2g߬N6ud=`;IYxtƯjS]ZP!urӉDi[>V#ZM29dF}oYA_cFc:nJe܅q_ja&r-XC}L:d[O$n[N r=ǕBi%[~ 7X`In݄?Aa?Hm-ڧp{ߐ$@n~?k}ZQt|:>N >~ɾH@gX/}% ~8fRMOL ;L%!I}(0\bi_NeK7WF=gyLJ; V rzb/Ķ)1 ol9Dl"ƬS]иfjz?Rc^@GGC~o̝|Xu 0;#=g0*fs)E,Ki=3" K@P>qy7ߜ\!:^X'^6 5]fZm#zCCr͒)koȬ,];i.PlqM-܀TΣTH/:t(g'L( zҒ:_;jܘP8;t.@o_`ҨB?| Ir>%c2אŊ9!}<.AB^Bbwe̐ҩkXOrmᒏSQJn AY f/҇&j˳ ^4IyaMĸ)`aݟަj䑥cpʭxwq)ޑGY2lj#^s,w<4jPEX[%o9`E# Ua$Iid@ pAΞHuYZj~*hTObi^TL/uj.n\q(lUmЌ]we=ŭͪ4V#L-h9I,W5Fvo5i }C"*)=:q\Y=,3zM6J(tΓ^|Uв]-Zd(=mHl(u0WUzN G@*%%8IB. őyXp<i^#V{[nf>~w]7/pǭ^{CO"/? ם6,/CV6JScZmf ~51)ɏsSf[ne.0ۋbj= Aֿ zk~e`v;Xy&ʣE"^4aD/—QO >.1 xF͆"#P8bA!>6ም{'=[TfߊTHiCA3pֹT*g$79v-,䁁YD?l_2j,,vjspnWi%@&f푔w[!W YKN6KKuP bc|X9ŞE0Z1j$x(h| ʬ-"=XSuͥ^Y]󽹬V%.\/W.2 m'a`|P͘T:ȮM{G~z+*K$Q(ռy7I6 h`rL+׍Ȭz05<:Hx֥xc<ԉ-Ft2c1ej:^۱o%Ek'x~FM&?*`ҀiLJ2u7]HbIϰ#3uYd9|Fp7`^ˮPXA6c>vVd`YP}7SPM h+B%)y9RU5$~!_ck/Y9PH}gs' VV}>Љ%J(Ɂ\1F yA|[Du/ z'/Vq#O>=Mx/9B=F}>é>0 >g_6jR6U7ѳ=QvkuajN9>1h~p~$~y (10^p>5Éý8U@Rex d7 bA'$8/[:C[ $EittXz2m,^h?`oAPcTg5c”tܤgnZ.edo*~,,;pX Tsnj*5 ߅9RA(+٪[@} $HG Iq TL`HgmDZ~c Z]Pﴂf)Xx/p8UBj&QrO|aɇ@i?9#G#XFYb(puĘn;'9!΍5-ڗޫbOF2Uq܈ c[xjŶ2?4\V KJ g_cLTi:.*O* /߅6U?ϣOOܢ7 ȧRZmj11PF'Rsb)^W ‡>%I8A^įlXH)ޔ?'b/R=ڸCN33b00_q^u8#Ds)ghG ~[ih&}m2`k,l?njue/5pbįa#k P6WLȫOăj 2] DWNQ-MhԥywAH=*FJK5';˓NUfY{"_hDڑCd 5HP{Jgطy.Z_vSYF3m!9ʲnm |D {bv͊4)c-EHB!wWVwy H@9K1l'L$}l9nkF`#yӟZmA ZoNFwo N/yﭫRw.buts\Fm.܊) IL_>xwbSkԕ -@NAh__|jBb S4?4C:˸RZ\;3JeF0VUhn|GBєܫ_%5x +ϴ&'^IB!5hDH~*rͮiq;ׇ`QPh H"VYTʶ||45_`o6@[I׷[ӻ͘{E@WÊEemM7ӆ6Nr-9vfP/`;i J:5NE i,ΐH]{>/Dtۄf J@uSr4 qR@ uƻ ~lS3/N2A.dBqs $L_"3{v XԿ( uNuNk̦;1զ#H+#O@fe '=ijl8EՄ0Bdz7wڎ޼Mr'͊'u ܐ-^>K"Z,'MsL2]:d?LiF&v[HԌ hP_̩DD;6C!=VBx |$ |,ks]Hz9f*U8S|^P[wvO&\ԓ.$oIM\Fȝϴ$` ˫^ |;"pP6Ƌ)+'J;ɖ+!sM[pIKM1lH[SZC2|% A[b/IL'x{ ɿ-y8Ӂ{>,G@&dMN32B7ܼ@%$(_̠$LJ8~T/REy|2rxE+LaQd9f-KmNvL/(S Tj, g;-$D'ZmE0AqΤ>9{ihw̦V32c=Ѷ]$ DUןZFxk'8PvZydlK{kjduA(QN+0#q3ㆤ@*T2xR> )˩x] MȮX 7anuABU;K2mJ0Ƴ t Y=v"Sk=[% 4o55#AjK[e2]QObmOJa_p㋅Wb qRTg 99݊#tD58lsİ&}k cmDCeq,=#EY&L kȳ Tgf *G< >ɵҚ*L6J僜t(D@e3)*9xcR%~#g*\`2 <;~fGWu4_|e0wLDzoFx~ڦkk jj7\[lӽɛƤ"ϋtSL+u/wM՜:n#nL_G1Kg7c%c8{8ce`I!ONBG1h! Sd(ynJ. +ӡg L9#*A24<gEA'$yupu=re%\cHNL` ϶SA )0we[t}3M6dHB{NGO_[ $kkN`@bd_Pw=$Ĭh͠Ҡr٥Fzo'0IL) EΚk^D:?\o>ϯNWH\?!eVOYhQO\hEGūMPTNOؽY0ˁs sY~vT=Zg/p>hZrNm[zqF>}pyeۺj]`1k]-)s-xkne$L^?[b'f S'O=6N)peӓn=2ۋܺLzi [z$텚4|d6W KFs1UyC /}!Mּ BnbP3 (&ƠpA46_CeTO XGq Bc),@U\3h4cdBq`G`xa?l9~:]Tк \d0(=m'Z:$44fq9L}?$:Q6r+Ń v3h΢ =>/h\,V7O@&qf:ܤ{\uKB fdLK$ #RrQp #F><`Z_ wy*_&bv1);3 $lEeا9bC\i2>EA p$a֎?S] )*KH.K] /QNAr$mUVm&%& ywK."kYLn|h|;wNy9 XOz1@N^ڲ7 '⒉<8$Wx]L,^"(r=bN܎_Ċh^ |ymRNTVQ[*EV=XѨ^oǒ^A7$ԁuz>1:Oƅ % ńҖF>Þ}ӔkA/݂܋LX):ɣX"Ǩ#B"x\B,F,2yrHbk=gf6jتBĜk!-HYAX[])uw*+"QCIw%:$XhK~ZM3|cP(ފ3uheX[).2;R7Q /O L^nzԊeB9QZ{ 4Y?_8uɔ2'< hֵJhybEΗ / jN bC\`Οow7=D`P;fm &%m*Cr!ӷ[Z R3bk%E6!|Ik^3{QZNmNJa+D@7jq7.ܿ7\!Vzo.}d^L0..w#GCU;|fΐ8,=_!)~Q9$@Ew~X]{LQIs`f4 bntxVC=Qƹ75'=-a; h*fP8&m |g,ך '`~LWexzD%o ߩ\1Au{z3Sߡpy[(NA|s 6LGM >x6*ޱ +cgkbHvAmsĞƄP=nH2Mp-'$2Mշ8;b/2p>j|d~.J gjѧ\|mM3dtI L|qQ(d0_~Ԛc7 6utu$:'O( sJ$Ut#hV B#(uO58э=I;r(M\N<H,*_icnV Bmono-tools-2.11/docbrowser/theme-icons/Makefile.am0000664000175000017500000000117012225357701024210 0ustar00directhexdirecthex00000000000000theme = hicolor themedir = $(datadir)/icons/$(theme) theme_icons = \ apps,GNOME/monodoc-16.png \ apps,GNOME/monodoc-22.png \ apps,GNOME/monodoc-24.png \ apps,GNOME/monodoc-32.png \ apps,GNOME/monodoc-48.png \ apps,GNOME/monodoc-256.png install_icon_exec = $(srcdir)/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) EXTRA_DIST = \ $(wildcard GNOME/*.png) \ $(wildcard Mac/*.icns) \ icon-theme-installer mono-tools-2.11/docbrowser/theme-icons/GNOME/0000775000175000017500000000000012225357743023030 5ustar00directhexdirecthex00000000000000mono-tools-2.11/docbrowser/theme-icons/GNOME/monodoc-16.png0000664000175000017500000000147512225357701025421 0ustar00directhexdirecthex00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleCalculatorJH^tEXtAuthorJakub Steiner/~IDAT8}oLQ3[-J"$*k_`kY"l|&Dذ 6lDH|E$lTc#215;N]x7='P(,ϔjV("$MÎ#c.[z!)riZajTQ'3TiPDPX9@ܲ<1@b5RDe%/Q@#Qa)H; E6G b^R/_AmQNR vJT!~G $Iy@09>1q$_>eQZ|7B`YY,Dh+|~~{ %M=K7yP׳V.=^:CYja(@@s瘮|ТabD B,~,2=9^O""E"6uЋ7ZKwc.Zs9l9qe33Оfip >yP74J{QA_CuB9Qj|~T@IENDB`mono-tools-2.11/docbrowser/theme-icons/GNOME/monodoc-256.png0000664000175000017500000020036112225357701025502 0ustar00directhexdirecthex00000000000000PNG  IHDR\rfsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleCalculatorJH^tEXtAuthorJakub Steiner/ IDATxiey{sνULsGME٢[,;A 9d:"q;Ld6ӂ" " A 9DBl%eŌhRu^ry|xsvuu> TߺV{sγ<ZJ)jgy,ƹxceY/ZWo(7K^/Ҟ-oUExc=* e~Yۘ=> }iόW~s?7עxC6eKoxC/}=# Cښhw shRfw~}׼"xC|׈_>c?t~mEa|H[}V> wyfMh#DQ1hRΡY 5(aDJ~?/M+7pք~:{ǭ?R~ p^cRic4(mʠ&L,2|)Eq 1C!+1|?zA 6\x\7Ю}h(%=\z(ܛb۹攮hg41i1k4jv3~DMɠZƐ!b amk)%K:W=劔"1y/s %WX'׊~{7ǜy6r~(澔ҽm5CC@7 43 YXìmh;ӆ9PPc(%Q">RfY Ei|Hֱ\/(J8P9!xP?&zcDpFѵR7׀{/[a#J)zWox_Zp?_sgηǬkJ=R|(}{rJgsZkCmӠI9Gc kha>kQ(Qȹ&">R.\;\3D)PPr&640ư^h0cq&@XҚ2FPBkR?+e쯽>IO ^_M!Bއmk!>{QVqoc*J89K6[g˼kZWNA)1ڀĔY1$ pQ=:RʤڎňsnsζiGKZaEk֚b@1PHES(@)rk @. mO-l=zxWKmv!Gam)Ky6@iV=ˬy4$1ovf %q6uK>D?F@E?`\JV=9Ęk1l6 Q(Rhc1A.ZRJ>sÃ)e2g-9J)cENb=q"%G\_ߺ }=뽁p^7<籾ZrwלzB=Rr|i]s_13:|X͙25vf;yR k ca{}fVc`=y}mBP Z4_8Ku血k )rN %')ɒS!D6V"M J+ƑrF)b )Fq@&Hbȥ1HxGx>6 ޺K W[ȿ |fє£9燭ik+9Qwޡ3{;]9;]CXlPZˡ(g5D. cd9Vg0 ckx F3$~ZPr:GNY׉05OI)\R!3PdV a %ET0Z&BIc JɉwM+nc0Zя4S5k o5Gu]0^^הx\gcHvޣ)2s֜1kUְ;3k,gO;k8;cXNv[5G4Z+1<#X,{Wg>c|(ƒ"nB@+Ek-{b ($.!4 (S 180bO,%&˧X$ާ(!xf݌u&¼k>`!(N@)`"H"ƄR,{ R&I)y"H)y)םx_}qͣ7cԃ%R JJ(3{qjwF,{yLbl3Fcj\^FVkj>g1zRLXcPZb"9Bfmےrk;|hk1J1kdRJ,ks,ƐS"D٬Ui#Hso %g#L ME)T.kŤ$!B}ǘBP1I>HrI È{4",":8xQ-AWZV{[6Ţ1ua>k]luFbptzXX '+OGڧ,* 5a @o@uysi%CΌls;PqU+_sPs!ֆB)9Qmȹ`v Z\2Z{lXG1"rA<))3 1aCQ5NH 1eRh#8d"9nك)%|?@yy__'>,"[Jr>p;WRX~g~|#/n|#~2o<~8f KNw|gѵbZg$8Zg阵ĥܳRG|XX<e H,gvX,hUR3I#DJEb$11䔡sZ+B"nꌳ笤֔n)Z@1oX@soWTKPJf1S$]ג (MJԬ5{{S(E="`ɐr)`BHB!F +r,rS;B`_g;h7Ξ=xDL a~x| /}KZaA?ϔP 3ԆܲVJq6+:g 9fju6 J[R*\|\ fN,8zi?zI;-j)McT0Z~īTWc$"trF򠍸ښ/\6]HMp]k- ޣ+.:+j) iG=T/^nt lHAT1* P@k-}8c)u !u1nIR h9CU1(臁=49G82kp3?쳿uܹ 0"Ÿx`/K`'~^pݿws=N>͙3ghۖZynsj!łjEYϕyl7FQ\@+B !%R.h#1DU +#,X4MC^*-X gO9CӶBEԩ+Ŭk4hmХ6BtABY#&%'r" +WB+Cvbs,5E8hb)4NPJ(s&P"MPx1S՞Ҋk5hmYq5I$S^)Rm'<,Ia蚖!mR{BP!ac4m"&mC{0FSf]ú:aX'Iå!Һaoo3xxt=O>kƘp]wqw|>:@R 0lX\.Y.HNڭe6P"LΊN!ĀVhE%(rpƀ8'`c}M1K ]Yr)i܌ R8ˉR,)DF?4 D)4mCo!#2mے1Z8uC,m+`+UU73 DtPdJUb#Mp*zYIy?n h~{H1Kʰsm[ͫbfP :FL- \roq )Fڶad 5xitG{( Aҍ1lYo{i?S?u?s?)0 "%I>V)RuNm.\. EsM,Q 9g/?{UHsoʴH΅XiWc)(\C F@/ecjPhc*Y#gmFHQrٸ9MzL`XgHhQ)))bS-nI1m4ZB RZ[R,4`I1lY;EBS VRFMl-1U2e9U?mҾkT2RU 1F3!#8*EPCLGAkcX @s?sEZj= x 9rޡ` u9fg7}3#{RBZghMnyX67uNR5C/V7כ'a"yȥufL1V<^k R嚐t~`uWE&Y gmm!DIIz*X(I}OfF UduwHK,]YmkrhMHde$!'T6{5jiD}%ZYyfT'%ʙa" %mj-ݨ"%I9jH*i(`!'k:%!K'o~pUV&0ZaJ*?Ǻ+@+$9g5ݤi~_Bý9 մDS(UZ6i F/9pH:Zk+nK[]zc3֑Bڰa9PZXS6mEkK Ƶl8p6ՎXg1VKZ5 !R keֈ;6 FkAsٜPJ\J$z\( 8B)M]kZ'LOAԮsdt;X{JI fj!x-qm{uJkxaJLFsށ8)}[T7 xs nwz[Q"o+Eч*-_yڠ-M^8z=`#rJV;A}XRĊՔZJkm 3z-{,`iNJT q'f?S@Ja !Ba7֐SdZ Zk5)߿M۲{bL4'l^x\CJF,mJ6B)CRr G~"NplZɹaݯi]됓rNmK$s~ mR5Ĝuӽ$aj,pÍ~7]:ˑP~nuKp nɤߧ~\~]5ˆSrNtr,i.+7tsu]խFr@|Z@| O:1")&Xq(%CȾƫUIR*zjҴm躖9K5 c4]+Vp)kGBfRpcmm1AJ6=hc0։ UR{M5(˟됋hF)-mQP[hTbb̈́TCZSr!Tol$ǯRj hc)E.pm>#뿭^ں8acoKۂ> ^lۡ2GZA۵2țZ)a>}􍳤%MƊR.0TdY @kI.CVuT>*)/HzM)nF)q7AQ$&{p`1W7DZ8T\ckJRt}Wq 8m$كBѶҼcg!8'J#¾,J7WJg뀒uN =(^f[ȳ#w"TMm&³'x;m uNMBP@bԛ{\JKaQJѶ 63L|GFj%$mdV\U?RJ Bcf][I.9G&j]QRUŽ=8I1PuX,@0 R#_JUv\X G{MVl֡\B(!U(]>:40rBr?8&! .qR09)$`'B`6͔f PYfU 1H 0F9ab|tt]+rㄈS-R ] YI |$kaBi$ܨ`VfDXgAj+F@jźe^k&Cu>^,ea*Gʢ2,Šv_+pFRs 1JguXQHr3-՚F c!km 1е]l*#ʨ,{Vzju,E)ls>l)ȒZ)yuhg-R _vM7mι&(z>i@uF䜟:.)siyE/0ZIѕO+?4-Z+ȅm7 %Rf0c #f8zR/_V8 g9GLIL Xq 'JmIQ\"Mۈr)TA0m'5cBEg$?[IkV cTi%TN\0Qj!NWѲHI)et4m#VUjC+2WÚk%zWS^J!xJeǟ'MsJtmzLqtt.#⚖Ūg=x]s>9pۦSpO~r;8 0Z1Wm]u%%ԼWi ){)^AU0]B M1W*iT!sQ{L6EZ떒$sPi:Lqں=L@n9aJa Q k@,!eXfrAw&)Υk 1Jc؜(2 au5ۢxSxb`A{ՊB zIc4)ѓs" =9yr *\gywYsb!1>rI7c}NngBЭ<~@}ӟ~O?_J93Jt IDAT`;-' Wg{gJ>k[BLG8dKx#6Z)>^Ww#L>9JAbUIm5(B7N6`rJ)cX+kԹHʥ%[AV|PyIm3uBYbC!JVRRKi7VIWC8~jkK)SJڕ+`Y8+~d%ŪJ"i%HI}V+UX\f[}3.Iдw=To(B5PP ZC=t-ÖxI@:Z8<;LrOGѵC)3Z))? 'K 8JI$E0ѴXѳ#RIʆWm7HyyڿǁIEdnVoVEQ=wCVz5 ҠcaLh[I7Mt;;;'B$3ڊH})\$AڅykmaGZ0 >jy@#!!bqa=鵓慮>).?u,Q_b|SiyZ^݌Gtc&™3go;?O<}n|A~&mhbbN> p\'J`;m1"1sh'?vɅX%gbdH 8*SAD8c(AFZr5M#X l`bh#KSo/mRe )Dlcf!r)? %C_W 8 p|y—rߓ)w<pT RX)dfnsQS2m=54JgAQ5dJܹShqR SNib`www.4 W4KZ@dkZiR Zڦ[I5`۰Z@F2109ܿF #zA<׬W 傔dQ9z=xBN~ae۷IWj=?;g A_zkdxnC,\A ܶmyG x8Nxv\>wC8)hz埪ӁC *HK'8kѳrEڞnX kaQ:նaQ ֹڦJæÏQRM{YT0Rn0u]muY/}t,Y.gX,P%ΎR(ntn 鼸Zǟ_r~LA9(]j կ)(7(i8wsrQm >r?$X=s=SfA<5ﭳ#HL-VBPPk̻VZ]I,%fj"FK;)f*{qC 1۵ ڦmHIr bzVCbux@ZƁ_V|9b@H#)zT<. ~+!Vk_'d> 5\FQc$1xx#!H)Źsfm`mMx3\jrΗj͇&\*px?{c3xSu6ZRgSIQ %'R[2.z$6 (E׶(I󝳌C.:"Rhz~yHZP %C/B"y PC5?.Wo&/#ş{-XֵOq~scI h\iJ~f]l}mG?0ܦ^I|smbOYk7-U&?^djcEٸtM{ie]{!&T{T|-۴qbճ;ƚaH̗~ 5r%0J)<z |k꟤ .wS"@KRĚ9{ 錱,8Xڹ};\/ iHҺV {J\@C~ŰZT˽di%ﮖ;G_\K_yv_ +uZˢC`ݣ\b$/tVN3Ku|y_M71V|@7^8wvv# `0m>'oN8h֚vFTԒZ辭t5 SJm;W9r/^^=%GrIkly-wӓ pZ/w(r/z ٫W {QXVm-č֎t0`dYvLol8횀ۜMjR tH<.CFfXA -Vr4"y[X["o๎nϞ ԃePŀ(emҙ(K7RKՉ{|-11oYOㄟsaۿOrr9K~dj _Js%6rW/ מ9QkrWx/d]| aiVJkMtLMM(HxʵګՊq=^$,`]v\O:Nmc}_ųO= c%5,Wȵz, 7vsI\SJ9xf q $/80݌٤tUH϶k1FQʯ{ $= ?czI='v< wR,a_I/gpƠJE'uUK۶EYCȉY7( !pE^>Oگ0 m?y/4MsV^qsL@\#Fkǹj-eu BUGZQI@„|:Qz5}/GRKu `I2DF`J:=ۖ)%|s_,~>O? <]So>l'u# k'k:vv5"iL)9 NkiZqˍ>~/if-)WF)dk-i+wÿ r4%8pp/e8v(2[^sy2m?hۢS6(0/%ՂVzlBx­pmKtmm[hiq Asx?41Fi'Q9gn;%`K)EsZ6l7')ŵ?ҕi_,WtfH`?rK)Gg~En[;{|{7x;Iu 1eVcS!0:&]WdvJb A#ԹÈ2_JckIkjC~@j-SrA_wٿofm_Rǔ`,@! 3wVb}:6mNg !\2<7kzoz)1ZwY7cR!%gL-RZps="NѫN[RY3!C L?HSӐjؓ҆z@[#Ta=> .i:Zv`޶V3zN\9JULd4?ZkZG{'_잾_˗*EڠT$$]bD*?wܻ>'%Z+~Jf"HA CYt]JZGcU2S`ch\1QZq7VP S;3}?ĵ'WC Oބy3$dGT7qd~hWս?c?L)-~OݿwWWԗ*b1r'S"qG8!)sUf;u(Hq O)q#Mnz4Z|4Ó'|o:~LØ +K,c[mQFϩmulwo9$ pe|V^jI4ƈmAQߓU0~Iƨ_ RJuJoҖhú?s)_OsxKO}n6Z,DʑX+e)N C6tu]w`}衇//ȩSϳ9P~8YPua0 {s ߞx<p0MVJ5a) `LI9iYS>.* ػWD݌G=%{} 59UtJ">&փGPd~f2_S )Ijϫsf>1B|)aHֱ۶7JFXL.Te #UT}iJ ' aO?q~%^x{>RTL [$F5]G/\(iYkɟ͑o\KTl㠼Z6dmx0)7c{9uΥ>qF\X#)<(%#̛—[oX\C,Xig.yC 5m[H.~1\d*ra cՏơ)wb=Xoyb͕Á1:L)5J.򘒴*E*nМ:9 mJl˛椱j&%*KK!#yb,)D?R~q#F8 QE)lR6?ɍwJ+:r $#5ÈudFbʄ57SF?_Fz27 p|81Iㄠ#·ӀY٬5,\n jK\zj(VsﱗmRU|sm5Mμ"N::VR&#.xkd_(? B)Ae1ʔڳ!x6ibJQ&R*8u aõ1b ;5>+Nw~;"+o^!BELeHhdžs= BP[Հ' ǕA>^:N9cSNW:x)spp c㭲 0F6R~IAN݁e]ǝ=sn:G3hc)ȼ3}?c}b È2V1$AF'>%|#5)kJ`$ӌ<" h"A3.l\ 9K1H v)5к٩B !DWzv+cjiJzGh?<4Q6~rp={X y/ /$<`RyNjsoܬ4$@ks8c@)F?l])d$&6F@@i"s =O7]? Q\mdfU> ^ K']Ӷҁ ̳FFZicE1daJ}VIc@igOK# CZֹ:UYMV$%s[2u6ZEU>1F9~m*B՞z :/Ea_~tD=(9 JI݄(s&55s_twR8uԛ܉v95^dR(qx"N hzUԴߤDd\wkM% w_/wkk)KRȱ̥'DL*8 u2Ίi FiYg&(g]1xQ R/Tx0E)s39I9*u~˺:_bJaGbo?ssrm\  Yp#I͵P Bu-Ji+ ]e?#?Nl %l_|I姆}oRǽ/=1x `]uU-ZbP(^PZ:^X/Gb!>Aʫw28G5%kg~5JQJƔ73 32b\8-Ʋ[m}fɦHJ%Q4iZH==!@xc I<$x A~S`/PƎm fi$9,S,f_va}{שSƖ@NWso}k2nb`j02-BTߎ1gȉzD ]aE4P"ƄF!¬* Z 6 vқg0 Y̚JX1%nxrƔ@ iUUx駟~?'xV]+KwJ NUm\)GPUXL4J@V`RN7حL >&Dv5,Cw"pj GB#y(5R r4rG=rN> g(^#" i )LstPR@UB0F b IDAT.޶mQ%e01$L-,'Q[7+TF"'`vԢ27G-s);'>c=a~`pE7BW @* |Ņ~%Fͷ3 ;54emU`1@znZtgy z:Rȥυa 10t5.-4uY،Fު U<XgPi0 t5PUpϡy"Xi=aRCS} Fic ,l;fɕ40%cgs<۽o^4L< `Aʌr!I+' 0x>h0ou;0. H)$``5#pP)9c@]$ᇞ{q'r<I7ްl2m8D K+_G)=O)kY/n ,v]wZj(`9ARRDr KjPJvtl Y(cX*9xl m5C{30+r2QL#=Zi ?&BVrՎY"c-0~@u(%s{hcQ.ijb@d ИJpV|uUMw[a{/e5!%I3r̩K!Jرnxm_bTWs}`*]1e0 =I[WwO zp/u;2mW6,7m ڹ(L`10#KLJ C̾7v2d`hQf#b)rD硥G KqLq O)! iMכ''1 m4ZgqCA?x+L]$U;5u}^Le!2QOENWg zicJ+\rFUPPkcrk<8O:~pOowRXUPH`oobY%`N/z4 4bd#>vW~7 ?EhwB|>}9.rJO1ƈ O K|JUf')6>~ xy-L"3=1K}@֚%eX;9 >A [:0 -Bn(:Ml2"ρcPJ~cCco=0F+Fckap# दň Umע눒X.*F(WQkm.q$<~`oNBQBB9Elt-i919E876uq 2U4;YC1Xx@}箪 {*:pIlW `yV%'W@%ېț7@C=<_8@Ԉ1bZ~z_;_O6*(ɕӮxԓo}X4`C,a<#(<TE>c Ia޶Զ P ϵ("!DF(B UԵCb*mVe2FP+t}pPϗx Hƃ>qKf߿~MxPةqśeٳg? ,u#&_> ,7t?> =J7CJHcx,n/]Vk+go-o}- #1){IBͪri]ib,2jQpߩiEiu|J!Q1@FM c0IDK9$MY)q z}PdUM=Ͼg{7yW.vEZJ(h'"ɪM3CQbtwNBگگ}?@;).^"!x3y0߹Saת9 f5,f ue!<|// _hV!{(ec_*fJqV]lF ?3: R?@۵P XSYOG`pPA 7"g6[Yg匐ȁp M(qji{׷C E]'!$93βd6jjɮ9PU>= h.c)Vݐ`~xRcPؿǿӊ,6mYN)bmNIB k,P5UNJyv{.!<\mF]W 5Y@h*d }1D2 wdIa=kUUx>է"[םȂJs) ٙUՀ-o#R Mfڮ>꺡 PSOF>Fag7yvo"^s#{߳g5^XV?t8Գ>xF! B+.T<5#`#%Gc)CB!Z:I ̈T&c6UӠCfm){{! a3w\WO'M)W.߃zVc1oF@QRlya0g ޸xp/5cNl0֓b1(`qO&H茒R@H%;3꺒|5u @p'IBNw/^…~?,>AuX3 094Fy PCg3 sVFԇ@Ҕ`;HπRB`0v}# s H%`A;c:vk f QԸ&Ơr Dd{ gx+<^W/|A3rARi8$(bc@̰?qR"z677yO8MV#XU8\>W.O R%Ua 1gC)lCnAeBǛ?,NNymZ{/qC'ޏRd7ڠYBIXDkt8gنkF @;E| 4pɕ0/[ NJȝHg]B mڥw."^EAc`'VKM>Gݕ nFW.]@1''dʁrIP-Vr+o\?{us#ȃ/=veO:OB[NOQpRc1F{׊m*@_m -'{]UК>z}T-_)ѿ8c _k/wQ^ۯcq]?(춣OstB̴骬C.g(pUWH) 4Ȋ"Qμx ߾7s \9~ڑlz+wn󵫗`tZ~h0+JK##r!V.bxG7{Vl!,o<8'`^W7+qc j`-s}c)T ԕu+6z/~w|kG?_0b; q^ ʷppu;Wހ?.uZ|PL{R|cc} #2w$1D4*У X@J VH\?&<3 ũ'ߋaD\.?+ow_ʑogzn7hs̯_0ZT5;9cuHk!(pun/xs ] dz&;\VEt#pU?#4Ud k9'jɁ88l@j刖&yMw~3؏$f!݃.dy)|G>?ݛcv.k rQ8u 3 1x pԽ( ӭt$(MRRNCO$i}DRdAw"'mBg $'? X!|Jk-$7 "u 'ދ-Dž }{yU~HlNIRhއul_! ]|ſ+x,0rrY/0znSUnAit ) 5tqUE{_+hBƙGqwS'?'~g06d[̇~躞=)W%65h6QwOC{ @PU!ijPԺ!N {؀u֒= )G O݆@|dRԴ)#Xkhv F1K7\i*l4O'g>c7KA>Cs!`5-V9BAÈ8*x[Lj}"n:ҥK/oġM(c n R䜇uk홓Re2xbdcV{0l>Ęq} *W!F"rs(9C9S$\zu<8ƣ9~cuIM@zB)Sĩ60ֱy~u>mA6"9rgp1%$U]6@бA0rP`{XgУc)3ZXǾ͍ x*y__t󃷴o'޺ Fkhֲ±1DiniY/%<3׿/@0>n xRHOόJdQr 98kLu.JM!j;JN2c֬޽©wp0K@3['>џG8;2wY~G !#$u.䐂d">(P&Z̯a6ȻGA)i*UUvI:20ZOP0$ :bb"65.LສЊ j+;e4ChGCF܎J2مu=f Xwq\)X$@[(P(Pؾ3ͥR^[+qz7),u`VaS40 Go*uʁJJ)tWw"k͠GzB(P0kqz'AOď#g-;==ZBB$3uy; 9sb0"N(,?;ERlU(£U5wA."O';} Hf!IL45xPJ٧RDAH%B^ ư99̏ rO>v c}֝:`! di&/Ø o\ކ,)xU잸Vn SU;ۑ Uu XtR#J6i[ Q@_vjr5F.⾇$~g? pCG(C]!7v\X~'YLcϿHQ=r2 hӏ < &ZU;! ۀ5%ZkY+0kCazj2P( %PHJ|1|tl5.r U^#hYx?7_827=vq«xļКdk 2"dPb SWF[hka}p3Oq^R(J)U}F8'}@h%$`yc{m*\97ɁUvW>̲`R>s1~#FLWww݀ΣԷrFUF^U>Fr QU"#CfeQq hm; P(PWJ:eQ^o45(% :c6CmB},9XU1cӆV c碾ESYcJ!DŽ'/<.MC4pxC~o7 chҔ7B?y"az,~ہCywwDj/k0W9$/8a D$9@~w^.bkC;,Q[0 87q 776||cW?AnJ@ɨ*+@e F)? IDATcGk1UeZd咦A]5S0:@$JD*#V-ՏA؃SmE"-ȲYP4#|߯h󨭥ҲA*e=%Yi 7yiE;G1h!u4@9_ejr4cG@<.88=6Z[XkSa¼)143 Iuz7t) !IpXuҩAg@Nvv:ŀMss`H/тvsMM^I2~HMSJ7p Ɛ/>`MI1@DOеylxsν/~ /&C@PKnq`1xKlPҀR` C lBAk|4(< !$blj9'䢀"#h t. ^Fi7](3$ tM95o }?UNr}+n ͘2e}SJ" V QP%{uBև]) BѨj } RRBYZ.5**[ԳcAi{W_~lwù jHSt)fUaĊ] dl[?Zׯ?G?KkbZGlz7MV-r:X 0LMԫ*QxCPȨRSU Us1s cn*҅;s|ZHx*[릅0uSSS:Jan E9m}Dfb3jH9HnQW+a1^u)aQظLJO4Z̚CR29 1Ȱ_?phiWHE=iu#bHkj$}> -a~?!\xZq* LrTrnLE!6Zmm CSkϜ9sKg j RJ pxOHO*0p[r(bz.Il)^z㍱pU3BL!ig/@BGd31mۡeZS kUn0~RRz}?i ~][cA}A8W$cȠ.4Bo$f#m71[gU")^qu9و1 `sTMyQ2]z l_| b|Hh+α{Tdጅu5z )gc 53E(XciJ]AcŜnff5E9~3cD<0J:t]V!h%*VTu'c1@imסm)%ʄ3CZ 9A\"{0q;6 uss!a Rg-<!PlccF]'yjnޕǶ.1T!E C/j[/r3 tbrd~ŕeꪪ;;FPjq޵nȦ0ި8JYU2 eIŶ\ #@AJ5:y~]9TUPWNNCއ 8h[_f_6P~;SaWqZ(.V?"Ai:״2c)JtWU躁iE:J9C0@T( XFjX;$*0lM9I5D!r ڶg=d=vlǮm]X_z(|Rb /@*RiM[.TˁMU|yLNY$28W SR耤qa}Ow"!ApeJ)fDJ">k$#{ ±`Ic(w4d#%[TJya@6.oW.(Q{wYmH6sc8677Ӏ{" <ǖS n?<_uxy `$axhx1W%NF u\M.Ï E,v}7ȅ4C)(453P739|HS>0!ƌ"u.k+XKMA'f^> 3"4aQ,YC5%d Zl@k!ι4$R< =!3!y8Kdy'' >6t--F'Yݚ0e*9Z) wx5i?bpb+˿7~=4ZWE8B׊F3Ez%qJzN UtC? %a/E6><{"Pzu3C׳Ok<ص ?HhrsQ` -":c+3llO{F|)E2 EJ.1luz(PL]%im&ƅF'2p1dY8>ypurnJF ,Lb)BZj)QoRH1 'Xɣsv ~)t[`VL#b+pO#&$8Œ!!E Pa1BWY)k}H%s0a>D<䇏O l_z jsbDaC)LXu 1'Z wP یU ई`9ʲ>Uu@n #?Ykh,_r$ڌ)4;ImI"/"yqIń\EG34|Lhf34ޔRK:q!z:\kci( L9D0H"QCD~҇&`#ۙCH5[Cۊdy06IU3OKaZ!NӚ`CEf}UFW8jZ>8 .m׭U'qY4`C\e\L~(H)CP`#bBLfRWr^IhK,btpơSRJRF?y#*L N?p"4gX, 1DD-)#1CB?xS* y%AZ_Y`NNCRC`7!G{

s(:4x'#TU?0z8 A*X }e8)VӁ7gB$xq ^:n@-*J΂v8 E"f0v=oll Qfb f*l13/Z"7 !Js!'3TA5R)hĜ)Yk4PaqǩO}60\˯ Ck+.|4FN0᠅ |j簷I\!m'zIc Ѐ*|)8CWUpF_IuUQ@0xuv2v}vb1P(P {{> 'iO1;FdB]Pc0!)3|;o| e2_b;mSWq tik,|0!f*>ag=x'@7/T X%>^ J z9a.54j2tZ;,XP|l5Ú8]tuX ic.I8z# eFid#yG *U~ّ,]zr`| #yFRi@M`(@5W+N)p8iN(eYx% ༞0uQL=,5i>zulN͇8]ϴZT5.S[pUc-ν~>e+.ok*V@?ߘp.o'2'`9 NBf*uθPA::ɧq#"H`}sA|-i G駧:8髊}BEB0-cy :Q&R w66=9(:[SO ul[3P5Փ.W/BfIWO?9R6&;JA]75pek//!ZoV1G/R :0p|@E2hea /_z㓙((0LD Ty1J@#kgC {RV-iL]( }jCV\p HMcecd[Ó;a2J!S2 %?pL= <v]w ZX\cR #PƉ!#% +]iŐYs1W%cZ+k ̬ꪆ|~xbPf"Ү4rbE<\$) =`jjq$1tM=0jma?C7^"+%{גz)MT=UJAC)sk'=.r g ;55;AD[)&in"ǘJ\O Ж}scO|@~;n7(.;< Q%D PJQbIvѠoEr@^g-h5 QA2Q(M `F3 Rc.eJ-F J`eAm1xm$/c"AJ |Ld=~WOr"1% >£?|{o~Woq5|"7bAcͥ0=S'shۉ/|J1 >`l:6hK{M@)-KݐAVVnnKۥM`.*Y}K}= m )H Q(:[WQ7_*(b TYѥq(K+~!_=}ף+BU@}";))hSM|Vqš-BU9t"Umd'ZrcdiRZ43_Wq0> >8+sǕ׿"C|^F!:Tc-\Uc3XuM`p0khY~7I쥔HW0x9s IbO@ !l,85*ذw-Di)(&33峻<Dfk]O@ hJuIN&/xU<'gr)T*E@.U$DT#0!ɸ44t 7AGqu]j,jnDy8RDTW 1Sh+yzLF"^.Y_ }Iװqko}_V GC0[٩O \ߺʒ6nǁ(RH{ЌF >&vұg?pƠMZ*sa,eUxv'RKRVE(ZIy,I>] c ?|< v~?W S 1^tUPLL2\abu᷾J}aӜL5*y䰬&?;rrߐ'3c+hEEXe1a{-v' )1r;/ /}_͗H WRXD%~0>G'%\&!/KTP(ΓqLHcyz݃Ċ=C:NnU@(`ſ.Gr0>6~-~?w0̮* y#6)`D6~#3zv@KcU@1EqakVd2P.'(`j$Ge:0:*< 8ge (Պc60> [p+l*hk4DJ9I"7꺮'q-^O4`bo o?%ڷC1Ĝrsy#xIo_J@SVU ,9 t?1C6o|‘Yk~l 'AwCF/.Q qт+֯-4M~ߝ5 ڶ6XsHe\ʉ9S3?Ln=TufK+ -}Aڃ5D?u]٤S4uy hX6?!Bk:+<tMHPN+FLrcMU3m(2E4x JvW>?T"+a{_K_=l78߃2JF-c`n~zE`k,SS/|nj¹w=3p5 A9wakiq̙6M oU||l9/Kڶj_U XSل<c{N;p ڶ0}'7 N!FԮbbQw/(R3< gtޣ;Ҁjm 4ڶeʑ >H}M.H@cH YG uE?(5XQPL8耵-4(!$\ݝ}^/!xo 0ovTP (Lulv9%QG@L/'f˿A#l[b)0\EN~$MP9+D<9`I{]Qe;1@l몆Pk E)4MED[!8w*)yL3~@Y&- 8Kq-, x&wd+PPiE!@XLI IDATG1 M]!g+O?lPbS?o^=?t__1#.ӪڮC\kۗ߀tfܡ|*Ҳm +𛗮|{Y_p׸uL)DJoIZh޹4A<ΎB]jz3 ns !hP7̅5_՝aSR F֝nJ9 6SCQJ (v!pT79A`6b܂<{)R+vZl3>+5_NrO [õWxKK!Qqn*/g[p 059X;F1=w+KUUxG>t{>8Z?" pjŞ)@ 5,yRB)7 1xTڌ1VĐ\#\R }C_ưMV*ʄ['v棝!'c eR5#c5Z[:955{F L2(8Lcș5DʹD/vq 97 ]]#O=?5;tW^+_^["Փ.W/pPd,%I=$/K28\o+n؃s~޼0 [q8K)+*.~?}WϠ R]JFݘ瞤VU!dXŷJ&K,T̽; eXqբhBMfcwr Gvڴ6 Iař:nޝ=@uy&ݻoo[T!X)#8ZOZ0Wr()$['@6q92q8)dq(Qp70~\r$MQq̳VJ@G;;{{!f28>R\t=HChCs|BVd Kމ@.0m&":@k+\(@{kH]E#MV!%>A~8,g wv|6&)n !Û@`3l68NlJr@b ^zz?y?@z^%8Rj`vvv><\"p[o#W@\"H)@+ |۰WQFC!=f)iWs†4(E{B9mhK_QRT%h !h7k[93ػ^.^{{_۠b4S9ݷ^.~1GA !ߺq׿gXn{ߗ\{ꍮ,8 D6HzP3#" &ƀB}; _-rx1v-"5PtD)%PTss)0jOyUfZ!%0=QJ)RǺx m}{,j1ٿp) (I;_3#neRo}﫷ſO+z'mz~:p8Ϗo7\$ € =TډNfwLG8y` 9+T8˘\$X,e91BDRI(\|R5*{,nx)`8>n0}pڇp3|_m=8Kл]'[oi҃؀px8GBQdn[7}{PJ cO:I'c76y$s>R :yj4/}=PkHl${x=uRJhۉ0 _ Uu*$~詿W$XrJ=u]ar­oR?~'gq7F{g.=KOEL&;ŎƒGo)(9>kyQA|X{{@&XX3~Kw.V9W' <PJ)X~D`)V9jzj׭zyM@MA~Z0tHEݓ͡l; U4KFh 4Tn ة0 c\e^c4R|h td(iskeJ)w@hv1~wvv]Ùι Lʲp>wжCېr!Pw}X.|lݛ0 XksJ@j`ws䜰ӒQ).K2WJN5Fa"Po"U2e[0dd2-Fr Jkև8j4Mú P9E0o衛[P`sw_݇nО Oa38wjC4RL{8(>]n !Lom< ) 0>)OIlٌ€Vsͦi? yaBRDy"fcƼ( 4S9NԊGI1 4leICAh ݵLɈk ѻyB߻JNۈS* ~֋ga'{ ]&g/co{!%r#("96hm{70s~Pn"v?4bbl LS9ܒ!J׾ꅽwBxo//ׯ_hT~ܛiT \J`%&vWs'5m[J)k0lhduvk8!: t) gÊ@'aFqz! o~~gxM ڦ玔כmT%XVV#URґ~<: =otm>dU>,$_+v4:=Z1ƅ>Fܹs)%_6چxԯ",n_yO_x_:h1 %ݜol=8g9ĜOΑaГ9(|jAOOOi$ ux,A Z}\k_i>i o2V9=s!v]?P 4 CXvH_gw(ELt6cBq0܍lA$֓0i1sw^w(9I_iX PZc}p38si@Xp9>|ŽO"}M4PPh 3AaqB#Ibc,6h /on /G8r'ycmՅh=)?0eU~ƿ1 {w=Ryk)h q0\ Zrjdԗ7+M(h% ӣrJΈo ss=sw)!$unC6$%y8_:( ߻`wxc3"+JU!mBdgogΜ__ b4Ճr=.J@<;u+@o`?58w)IYH=4RIB@C'3]?V\1e;;!wz2wO00$ټ4dA;D.Wp7Yx$ O_ oC)~r;pLVu=xd ڶ̻J)8x 3%RSS$kO֦pzEW޺?}i|Si_qw8W)pZy?@N,PA۶膂!цP@iͶVf6NAUʈ-qvҡ@i *L`OCi! Waz-zo"yoe==q-o fsŧ{i\At%w^&^}On^n_ /MG@TNm #@' WO],ACO~ BB_E8tmz`u"G!`>:#a" )A KQ .l R:6n ؿ]| > zCui]/~%p]ՀoVi:k lj ޤh8]zΔA =(aa7^{1:iޒB56L"4Y ՘Ё5UJ<I!ᵿ# ?'m|Q8|~PA]{C.0`I(xנ"B,IL:w,sH)9?\xȩ^CaJGl < BrLð ,P8sfoT,7-@9%IpÙ }C`9'l: :t]rckk[~?^Q]kO?HE7A)Jq.yA:MR!Da׿s^|ncN ׷yc ƸH)lyIOFFq3~(x7m~ υI|, BZ6dJՂ,^C-%#0o9RՂ~gn7O#X3RZdy.(Akoedzvd(|͈z]|W^\j8!)[_uM`[BTb\\!I C8Kf1?0?n^M?l!ft}'Ibj8\@5a _;4_OX8hc)pY?7фoR Q8 CQB+Nc.|uL8M8e^ &X"%.0 0Jl2:L&֡m' >s]?.]y տo翈{zzZX#=JcBI#s*davM =|oOreŏ؏}CqS.<.&O`[80nZ u#؆\8kLf@N#W.̮q7B2ג*#";m+]DSNc&v%. 7r8K?lw% IDATv/]Å+W~'C8uy.!@I}R`BR+9x ^ zS[CDZ\x@憠zSPMADZ~v(de rtڲGA\SA@E{*0,KYPOpRH2 E~WƟ[k~mQXܥt.\ /e~eXJspot=Ci(V!XdX9@MA=)y ʕ+?n#&`' fMɿ}=)>i6zh 1E+'YZ| iU0j„G؋1o97o}${I߼P$UHFpnpgܛ"^SI1Sj0@y/ܤ0l rJMC>]@vvw1sS6߽?IlN.7Rƶc/h[c~)n5Msi}2n1x&zKNcSΤES` !w  1Au]Ћ5ZyJ?1(Eάֶs?.pa_/k8w .]WFӒH%g" ZdWmY !wNp8?ՎQk-B eTJYAi p"P)mg?OMlor']'mg) p$X6AW_SJ!.Si fT nbFW(L@ޙ= 寡%VJ!$ r/xJ~kM霗Rkq)]$(ⶦɥ/ s̓@hk1(膀$!]#et*G g5)EƇamTޙ]LH1"q(T'22%%d,^;.;H@2?lш!z\SBRg:i'?i̍Sazm+2a\v< $11Fj ;q.BBH 6,屘eUci-%bӧ9B$-YƎ}Jl)Z.QP%0 '{2k`V YFIY93H xR &Xt -1!ת 9(:Iœ1s@"c2ĬQ`Д50H!, P%!)4ΥT ?Wlж-~g~ӟ翁$ʀW=Z q̙c} xR2pcKbm?א#roZDwǜڛ=JƐއs9S-1PFX4&GȵseN.f>2?Wptm뺛'W۴Ak#`)p>_nb  V< @+I|4 ͹J+e'JQ$9ƽ9.J1.)#G.R7P2cyk 9rdLX,pDEH<) J=FZZ=NbkiC'JFK: 4w)^d!AʄT`9س$O軞2'1J5yCDm q$Y_ආ ì }%0!4ptWk9'(P8YH'ъSҀ)99;]g]ǼBQ0B hNN~bF\#/K)0!\2O$} U:˜SLINjCC4#9I1Ș[OZFkI(Alz&@d%Vm0ҡY ! C R5I#p⎗L:Yi ǩ{5(ᝃմP2C0+$188 JFO@i\qw^?sm>_{F7m@d*;M`=+f)0uYk}L@F`.bQb"Pp8 d 'ɔBDQFx((rOPPi[,Om~dfsBfyd*9rEl pIl>E=e26EA6=X+: 5ڶ|Iۢ[tFo-%`>[0٪Wm(bCQa>qs^20"s)ZQdn EAj5~I\*%c>iд-vžz7n7/h7'ܦR`Ts{<6&0Ut)9̧S{F[=Odd2A#o$4ĥ[k0 =hȇ `ŢЏ \j)(sЙ1:ki{! 3|hj3)f%I>H dh^&*cYA )Q/P޴)E h(ƌ]6ɵj8ؐ6@i KIq`4]׋ @TzņqHq9!I"^buZ#KƵZm "X(^s9gܻwk{BP \N-7R=l)Xpk2|xPrΩOJĕF1ia93֡/2]Sc bNElIyx?(B VH yY-C76U_-ݻW_kk{(Pt;R Y_' \r2! 9CYv̜C&ac| p:)' =}p%q:G9c@P𤯈DdJ5R2Re3_;0 Ҿ!JZ68QG2ӴAxuЦ𜞇7\2)fx/z -rNANbuE*6#6rRzAe9huO\,hCblNQJ`j뵵-68!(1_!C(R2[Q vhRqgäaصXLQ0(-ǥІ$|L)hAlZ{oG =$9ZC`ι1.%i=v)Zk1V-Vز0mSPFM1"EYKd1()b>_YJh} (V-9i=MrF4.bHhF 'rƭx_l+.RrbD ]߱"E*Rb\lJ=.\ƣ:fVl1VQܕ@΅N4|cpHȢG?c( ݢc;c9;wdXAzAL@NK @%_MF98JmJ6:;J\ ǀ Μ= 8aQ2z DՇqIRTw|6~h c(FqPi0?ж<*C䦇{3g~#3BFMdc 8_RF+춫6XPyPɣ' (%GrWjm ~(R` 8Cύ3ڐetJ[q+\jq5׆^{52%sjF KfChOoH*@{{ BB 0 ]v6hmG>s!@5Ws*שl+ȶ^_l+an= [c 3-mFt6cW-P.[snd]Db JQUX dr*r*HPk4:vڎpb/; %DZ#cz e }ߍW])O1I1ؤ1)1t鹁yg%!eܙ ((4,mЊLp3lX=G9u C1I~# IDAT' Xh0edVJ492D*RW `YAk&V:3 ImJ~@vwنÔ<%A!|Vi ]>f '`H _*5O"k&{z:=A9'L&RQR^'#WkWMʮڠZRR|M8Zi*R{HaQơM(`1_ІgIc¹l4\bMPFi2iZ.?5$>W k_i>o = 8%E~@}ʢ3PE"V[.J@HjZƍG\jmLq)8-˄IHmuiQ$nպhS 6P !*fe7]T\.OHbچM/Ei 7_$>Ez=f#t:SJ dߑ7%0tPh1Y]gX?/Y0$Oa$VdBK\:DnB_-V=E,[a=uD,Keס RPRyPV嚢d)J7[k b` XQ;m8Ds*$ZI϶AP5J6 "@_ F }Ji9ы[ӆ 6xFȍ0iqɅ n=+\s/@\dB6v RGCS-)X־= `kS˥5Za#yr<.F\ fz[)xޣYtJNmmG/MG) {;hϓ_RdBRRGh0'~ X 8lvBUd,j,)qq#l7nRY;mHT_#S/]2ƊN_(\I9KB2 /V|MC16q+d M;Au=nqm%R-TJa"B€v'-#|.S7(RB@aHªȆ֒R#`YoҘg# m1xuZGE^QAlb]0 GF<VjsfQSlCH) J!!UɄ,Y $S|`,֍cAVX×С!IؐRh'-fM9"L8F%BIOZG%p%/zY=b$oex=}yYzenHI[d+XkI%KR pOG zI_C47z/>㢔Y}!mt6V2r#I6c R\/.T`jB_;*J,gjTLf U>8yIi^|NKZsw;? .ESJsYJ5gƤme'B& Y\`K,іJ S!))m y2MUǍF,^/C:(Y>Ԙ ZAamo.91)V zoDrUmI~ʬEqKolx|,P%GI%P Bj ABNGfɄ/KeKZ)*ׄ^ ]r뼔R N(E8c"r vwv$:!$F (T+ c,Y294˜Uʱ).?k, P Ī;;VG*ZAn$BLXO_Ȅi`YV"9CKD%&MJNb2+e.AKIl;9\ (%|߿-h^M3` h_h4,l}Y$]zsΉ5ں[g~[Y?/q ~= ^8sXxfި9S%` ߺ/\ӆM \Sk Mh#@%8$m%g(Pp2-wV! u9C9=3\ϼs3 .}V;xTwש BGd—E<ȩyC^G"]@"|LϕO"Oً2Tc`gZSY3k`Ty6"",Y'=s2 /^bw}L ?}E"z 4ΐM].&(Ώen{hXh{_;%xºF㹋`Xh-3U5ڀGh~zz!J`( 8˚sX%j{B.a#D:ED(A!=h EY]S5@pb.nQc$ =|ɛp~hky >DӃ֌X싕hSy0$8W8!$c-Ju]cUyaj1FAD1Xh11i ]\mnwE ~4k A@k2Ɯ !{w݀ QYo(-5epJ8,,$'P:2Ӕ؇޵sMf489-:V h%$mUY01Vx}Lc8>"u/g?lקݛy,(xPJ%IK^6""r5,FT'vE]T 4:J^QDU TioK"ְ1 PeӒ֧ D\P!aօ@iUrHTEih//HiϧBxz$ꂜ7@|^u޾:xsC.@ss XTz:u.<?t],UFI# ~~=heU"l_N)B u ݸF)$jf]J*8Af9|$6V_~~9G9Dz1>E P¨+5h#q(5Rjp-ڒ+Ri8TKiP5Uy3=UvkuMf5(p&hp α2VF9i OV3 LVrO?#*7p1׍udLYR&]hY]A p4jD"qUiϤPa9Uphud TBA%x gi`yGs"Ԡ ?Os`yhbUj(uUU;h,hl7A0 ""Z~T:P2VT*IȌi*wjOXCd*Z}h izk!V#xZq..;>᰹>g8[ x'}kQ 7=*kήг$tRR0,,A%g>h}G@-T5NbȺ7p|mzȋS==EOUZk!OICM@gku8M@ǧٌv~ Ƴ /h\-{("!߬ٴRjhpT6ZIDX$HȺQd2[-!ʗ ,(.kp0 :̱C-P g gAhʡʓyԹ4dd($a(kkeVо -hXkΒ9,A]Aʊ@c4,<ţq'GqN@Iئc8o4 :- گ@{"Z !\85}+B*9YvU(k(B]KE&2g yPph,Ģ@Fkq⩪I{I0bmfER"!䫪&VW] Ѐ c4 FԨA]KRR@*X&''Q ZV` !fuYɊH6<$`0`'tsk+6Wsl&\ x&] VC=H _kߞXT]iֵTaOi?,,5k-=𨙆yJOyb s?͎Ioj "#Ȳ vQ!P AhMVCKPJiœ&yAf:6B;ٴf%MA*kITZ,*u)oBrFQx`<͚5 Z5gYAbcm2<^x5y7ZbLa$E3/% ~U){]:Y'Pp8>K,1șUEm?" eR?uA$SRd ƫL&w DjatƚwA1P D>w0KM23ԏG46#(cP EU:@@j Y+h5TIO@cfR>*fM-KYM35S1x1̼IDATR8C6hOnŦ̈́m:D: V [_X{Sa꺾3ۀQ.#K#EIWV%"CD0l2hZF&3`~.}(0&4sل p8Eӓڇi%1хzt B[)V[3bXeXp΢.gA7 )oS0Nisib<`ccuk+)x"Kkj~@|+qӳD' 1as0{kV*o vkάE1"V"(2(IlYxh,W&Rs4t֐^\GOE>P]Ω,b!=xZjHEմZcQ{UU"\1ҵ迳;wӪ(;WT 8F!Xb}%j'kF NNEȲpCACZiϾB@/!,@;&ɥTpbz&\8i<)`ӊ`ZFMcO&d>BN9~\9a р3>NIJ0h<VGXx-œ + ]Cpk{g??@SDQccxO XkKg.}tl@#cJX(\[(\(B=;5`\q_gIqV18sBZǘE@E)FJR]hCeQRN(~~jDN|j[ ܬ5t4bu5kOxamZ%7~? IzɚNgx[;x/vGHVx8"2|xaDuKrs˷%tS}S[QE]8Y 7,'jT]c0$f#,uٔʂL͌:gt^Ru@YJdY6 @Uc$@5T]AiEZ II>Ȱ2`:W\d#ǣ%[v7 c.mm<xsI gq }tdHaGUu#s7^(mf fVQ}B઎A`޵^UYkF8C9X0Q< qk'V2qz3'0VS:NȲàsۧ=3db=_@  @/u'>*o PPx<^ZT"}w~^DZL4ERAkMGR%+%?ߟAɉk))/f1~n z'~s6K*l5=x}o0) <bOg"yg*"<>'#)vvqxt/1x o?Pbnt2g ຩv^ .PWU1UPJl'fePuP.k2ͩU#*d $,paeTn x-ӵIܽ ^l%ܭ'fϞo{}=›) =D4[YF.b05M([o!h_ d(B#Cc5R`Z{{{(\Gc0P{X* FZ |]{w{pc}s O3|#Kŝ@<~UommNtIa<$>F He0%TMeZ,V0"Eq$s$G2N|m.%.j6+T`7`Gq?֢,Kb6!^ >s,ː71Sl>^>z ~EKkWwt=96?yڀ^ āH8$H3}PbZ*JIp{iP+CLϾZ#+h9 $ 5$Tyv*t>?8,O_o' _4_ p|1uU*pY-@ (˲,,qppp-Aн2?'~'~BD~rw.?mr)olNjGxs01ib>\*Gؐ4Лc| Z:G /?ô(}/~5Z ȭFU|g c$-eq~tD'Ogی*(0#/m% lF9gY]YVi,ˢ!\4|}(ԵR u'ֻ&v}ZJ6s &I<((HX|'|,;]M{!.oOfM:p)x4[[8J b2٩,*."DB`8(6Ѓ<ipx^ޤ/z #Kz lf:9NǺ3iҌfqT}#,>r㋖1;{xr϶v9y9yͣu$O\yJ0adcdi)-r B/Z֍_ndEYۀ"u`F'89wӽlGZ}5}{7Hwk=B V]߭zVx/]J83F?4@¹?+Hk讉Hk+5Cȍ/[g>ٷb;g.׳װ"IIpF@&'ߜ@g1v>&1)\/*˵0/7hg&VDz<=tc= 4 8,[BmE^Utx?aum*HQG=f&cki1 eiSȏr5osIOW{3sBsM}O!<ȹ6'bº/s[ƧR6`Xk] 'v3sVYxMAob;hrNk׳?:D7ۄoZ*!S=WDEURbZ)Mjl0)$؉dBUUEKL>yHs#]OqsT8,X\7LE+do낿y}+p6UU^cG dqJXιg[;G88)o>F1V:MD& AaF1,FGPVgd|sPkIB%(5LD"JOwG [efr7_U@wty|",.ޗc{6[T`ndz(r6G)q7Y0.Zɔ߶d^C[0DŽ( kSjM I50'Ť6'eZhYAy?\u**: dgEdža7/gN{]?|3&2d~]@{mgJoAPUՉv92Ɛ9˿c\S]~ɣGKz7xCvNZP^xç DBDx#1#?g~b%)T:4hR_7-W5&*aU}!ƣDyM~`oG/ps`_-m/3z,:p;Y˞v{tц~aq>K[a%u]?B` C|`u֗_~i~UF$D؏ԏw==!vaYtJD9 y3AtZ $ZcVjLJ ӂf<^^(q|NH1u <|qPEu>zil{[}Ms?""Y,Z@ X}O=z϶z-H1/gEMq ~_DU[SdpQ;gN'FNU9-O^~cpyӨB#$%UyiJ\}j|skc}]go{?ؗӃfz}E^].w7ww7vsh?<:ˋum?>xiEoSi ϗ[dE eCa=>vuuP͛oI4|lh۾D;.Ϸٶ~w0e@ hYVm ߦ n?JZk=7Et iφ_o*Տaԭ``qV8kNձSVד{˳r-k>g/v6ѯ߅wv>-ܶ>+ YC8onnpg}`Д;琦cFQ8??)i Q!+^6,Ca9Z:ەg'IE%o]An:Zm7vW{ J7O3]!0\<`0@`)%& NOO1LB!4iOW~ϽN^|:z[UzW]w5u[.vL짃!(-@H 6ӧ4M?[㜳.O`w9f}ԫ(oQ/s!xӀ[[_mTuů&d۲z <$ Ax$hSBh1cjs~~}vvUUa^l7,"mˡ/}>9zuF |ju__m뾻{0 V@-"̅@yl ۂ`vo 62+9c`" _ek-~&ۖm_!/Z! p-8n GêZx%Ճ1B-4xoS{?-~W˱';E-./k8Ճ0wVe+ ev@-p= (s[h[pþaۭRnL[/]i-{}ooz6^+`яd1/ Ka{1E]|v6龻l[oz|CګokAK\w7Z -_< pᢺ{Ex^m;h !YmW`K`q9u]! Bڟoߥɶeۯ->?^eB 0pa;o}VMu]?C9ۯ`s VA;󖽾i7ٶlu'{4e+ັ\{Zw.!;YBBX EBou}~Ѷeۯ->C?~peۯwcO~%k >6 ` ]nѯ}׃R!\7IW z  k?z aw[}@a}UW};IENDB`mono-tools-2.11/docbrowser/theme-icons/GNOME/monodoc-24.png0000664000175000017500000000212212225357701025406 0ustar00directhexdirecthex00000000000000PNG  IHDRw=sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleCalculatorJH^tEXtAuthorJakub Steiner/IDATHMhUw&4_͋*MX0.ݨ ](RЅŝw!-( V۔$4i^%/3f{\ϼɢw3g{U"½ %cphdi%jڒթ~6DD||8𩖛IeEmN{Ώ*pW__.gxvv}C z_W| elg;oAu^Wu? ;g;پj{L 9;˅eי'(VJiuQ@ҿK/N_+7ssp+cU#X_QFR/%vv$;{'>w|qÇi|8*\]g\RK\ZsfIJljjanT (ZfYaԒnZጣ; hwN@&LLZ+z4NTU5R+Zrn}@)QLS4XB@T#Ne \^^2TzoV+B3ovĔQ ,F1?~w@|l_AyG/~#:W\^1X*iųkwuzG!n6Γj!,u1;{;❥sBJ! u(J8)H1RV0`afwmq&BZۏTKJĘ軎Z+@dZYR,cJ+bJV+R 0av(YzaEYbZ'ĀRü;Ldb`0Z{!K? {>ۼ(B>~&y Vkl7w;BlBZ0ZSJZ˪Qb5]qZyUa5cZ)Rmb%ńur*gR8c"ZrDža'oy1Vjc:y;w׾y@ib^,3$0Ff%$Z0PjFk8 m⠔1a58cQR8o8NZ!Pj&؟>`v)-yzܧ~+KTB}i>t8Lϭy >RY PdW`* YBh `]rYъzv9KZiw(YJ\h|n#BqRX!e1yOk2}wzmeRZi!9TyZKBsΓsaY֤HY"0r:KN%7(*\vkyJJg(d#yΔ"B(o󷚛s2>퟇OAk.~R_Q*}rtiX(rs;aX6k}ߓsX2*c,Zi FW[fwGf2 9eutM4 EZ p13sdJbf^!Wnah'>v躎Z2(ML{"`5 Ҽ1ZF9sRI1et}w̋cȥ`} C2)^@΅޳,X'Ąs3)c-8aaß#B} ;o o}SwO+XJ^pN?33]ʥRZΊ،LZzPQ}GNI9ut޲s޲Zut֠dhP2̿Z g^f9w)osBLBՖ%4PqL1cRYWL dJܾnǼ$Z)aaꅬ:ׂ %W-ӌ{@`h8]t:rhХa -Ke6XNA{R (e1Prd!(J@*.eeDqc{\2_S%\xٹpA?7VİlM9*ܥbqP bQ=1E}U 1X !콧<`X fy:gخ{Pe02>•Z[E1: 1E,13.3㴐 R3 EJaDkӘV..6FI}R*Պe^)Д03=ZK'֚RTC VnEG)L;#pr&JNԍh蜣 32C-M'<?OΙ{OWW1cA+ò,hm8lR`{UvğO//>\JyR̼wqrV_ Y%k8NCY+EwnSr&Ȫ_q%9.\nV}G5c(y=_k#'Tck1(0 PR ] \j^o8G3hYAv$@Ci[Ն~zoAɬ77kqI@DV9疭RJP+uL ysl[JN,a&gy?oݺE)eQT4n'$J1'%/-ܿ%iil& 4x9'?rϭ+gM)̏_ ~vRۡ{mYORY0@5Th3펔 Hi%t^)gpq9/ٶ֬Vkn2(syڳ,;tV=UǪsXQZ@m$4s"7+k2fj=cOJypJyumȩPjfg./.ҠK@w,ݎ"Klm4!% a8LT$_ 9J,lYS$9a%1jM*{R r>;W| _`^1 :֙S&^sPZZE=d>$ol> e"}'k9+EWÊa^R$іܞкruyś>Fœj]څ}孟G3{;{پ}A_֗RK!).(3J'R.~utNnI\M`caT{ͦ\n6б=CgجzzoyMy[x2(+ׇ9fc`?BL0-- K̝;I!byfekelB806R*Zj`'Rղx ,41Fb[yc,;V8+r!0NC͙X ֶxΟ*)ˁ6R#)%B65n/֒RndD)w*d˲YQ5lm <^ڥJ ụk ˿C07:g&r)L$‹V(  .P멵p;YLi޿'a?ggV}Q /{UEBJ'rĜ/og?˗;+ɀ;W'<&Sc%NC@=t%r̤+CSIK17n_nV]u\{6CF]7n -.VNuvfZkBLnsd?Ews@Mx{O?8Ĕ0CRXcdm1hp RJ /:}uiPJ15\fu[O{ 88k#saEc aŲ,\H0 ȿ!bd%-˫ VY1^8q]G5J.Lkجה0ZIɹ^pqs'y:GI(BqZ?α,g w"*<LH D?L(j{a!%gNY0 ZM_׿Ht3M#(El_H6\s]']xc/s6jp!R TRܽw(k? ߝ=`=d uj[ˊRR[)Rrpg\_5 \ҥ,m:n]letְ]u2;ΝҪܕ֘/~_?8'v~ĢO\gFv{Q}淝sĔ;nQhw_C(1"s }0 H(er}sv)ȥbRz<J>Whm}'ZFӻA2RV![Xyn﷜8まC{/ՙj4hJy~c}EZ4(dEH#zM ,,ZKgP <ɔV8w[<%)EiG|;ߖ8-T`و/bKDȻ9@a 1/0e}s?f[N|K%<nv'޸a}eY^F}0<]J~:YOKE`H%SS W5@͑f@Suso}P05)WmZr^%$Bs%8")AR=;B`&!s̬ @fe^ ໎Ohk,JkIröN2"wkBaƉX8\l72텭-g((*V+wtqG./)IIj%l6k!Ŗ4 i&eFi07FpK'a"9GΙ~2(K$۾d#VSա}9}׷ʌ)[Z|1!kaFE)8Nl7ri,Z'P}qIdBVo[YD'e4$'_qA&JYs4 G${^7U9S LoˇPJy#?#_u@+ ^ z߯{'VWcyP3˲ܶ^jXLj- ,Xr3o XVsg+-7lњ7;t Uәoe$>= C$a ,0.qIcoFN#Kz1Syg-&EɪkEﺞeVz趝M2Lkᤡua/2Ƙ6.gYD_+sfٰV(mZjl9HX4F!B@m=Ԓmﱇ> "}&}{yoy_ 8@]ԇpBdHk8Akqd^}o{6=S)J]O=%C9A[+k^:wUeK\l!+F(o|Ȟ@\+if^2sL1O\c!Ԁb[z4ɮ0ƶxyKI[^fNˣv}NZ1&AջN9ejlh4-50rWT>$7;yZ}Z&yZCv Ŝ€ ZKҞH1 9 ZNnRƃ^*$ķժ)PZqDճ{[K9-:q16N'Kw_ꇮ1xI17vֵp#N88??  |7S_ uZm_yyrx"duXY^"NtKaY)g :9ߏZdv>R?n5һ:My/4R66D *92-RbdIز~$"8݌ #Dɵe6r _J9JXg<<3 JIv^EhC%ӘԶ5 Yֹ֯X=%GEV0`{GLaX*"Z'T;m?޶^yrXoQ8/`t% :0A--NqNA߉$kz MJu+!(Aia*-F j.1 k\#-2w ʸ1pI1'7j-Sʙ܄qxmHo{BK{AvRN z=FՎVt-`J0RV_ rկHMw9K0Lv3CoML_wGx_ՏlW*w-R!:MSv_b}$^z_o[T字FϕSz)ބ?;)iCQd:XjCpݠj!Hj@WeI@k$kSZaeUne`uϥs%~\92.9&b,T%͜Kn;)_\]chAl2x{Eƿ.V:߱^8)EAHzG êgQ A8Z3.3WP"gs9vCZaO\\\03cȏzo MݝD'bPmTAj`,~bCӴbe{GXhT%WkX|[r&,,aDQ,'$XemRZEGۍ\!k?!!#nw`Gn]b9bPkfY`(~G|rQLV_NbCO޽˿1"]r"%(mZ޽]ׁAod=:{?S?|Iu]~OZ_Z?UJyt}_kkS)eN9)Ok-q?s?sۃ??^qQW/-KzqRL޺;dձG^H&oкa3 X*X]H|HQL[d˚J6*ta{ۜVkB*!QPs`mK~"L,'mq%v{acKF#^J˻VÚiruqoG2a D?5Zu 0OPǺٮyh*O=$;bT*ݱ6KإHSjAhۑ{s="700l& һ1 ]GYu=`BkfaoFܔ"yzՕ~mZ a6@k 7՚q?&JX)ƓM-,~XGa^o+۫o :=6$3?TJJZwz9,`SϹqX8ejhX{\V7Bk;p>=#rxW8׍*qRZQPBN@(db`0U`(UV@[Zg5m1hŞV 1]Fg8p-rI%d`l/v{d-I2piq<9rQ^r:W:@,փ _(5 i(L:+hH1"r_i$Q2RwG(M>cX(m {EQNeM8]Y_QUqs?~{տ !|ƛ׏>O~/rR?:l6nnvr8ׁB~3 NNq8ũl96M vN uUr2 2+$dCJpջ6[YжrNm-JS|w}a&_^m6H{ByR[43HPP7- ζĕs/c(ȩiX0GyeFaږDqѴ5N#CQt+GUjʜbM׮{)EmDOck4bNR]yM #S\ AiB46r+c<_8zy z Zދ8Ⓔ׷]yt::.v9%4-7>@!CZ~59fv"`)' ׄuzNFm0`UxJsMiQYVPO%qlKF@EJSO/u~;B_=G2RwnUU^),1}>\\\`ݢwν֮EBX.-c SWMsup7B].ZHVc#zkQYf}u#&*'c0͘|aiƧw#^FQn#C1!Ba2^$Ve"cbZ~)kÍ$nF!gڵڰt:hnֲJhq z|t5+eebϳVXIa8o62cs cij%\.1x 'yxtQ 8nxE5Y],,&b\VHWi.cS&BAmF:T*uN* Sl/-if;^R( ֲչ+ ݚf{Z3b+63|S lM*(TQT5SeXU3:=Xnqi.6FKzZ!eN㤔q^\=b[9h0{izP}dn6V)ԕCL4R"9rQ bt^&·3ꖼq-+*#~v#L3Tɨ Xf*ct-6&f,8l;@ Ok:/î8\)iW ٜ܂Y( gcۑ.a<=%]6(=Z3qhV`YTȡ E,qHp!^ È"qN#?,# k=%N9I؄d/uZ/~de8`'~%7NJ>xoȥN' >ۿ!6{4u^5rbZV@pUF~F)WQi]-.+7Cbva=Fa+eDkQgh"[H Q1&{yXN7-G]-ǃs(JB?0Z?X N{L㌣e-)/-l֏wwh~ !-K xs8LA3xŏZYC 0BPY'8l0L8@u",~ilH WF-8r֫kׯoqssK09"!M]I[ $ c60m4>ߧ)p48idVAGHr_'ံmPa^J8aY֭P%C?y A cٗ?Ѧ mZgH9/-on8k&eb]mۭXb4x>ɚ= {Baqw&ٚȉ iz'(Oh7~(??7<_%_+2{su@8J#k &`M=%3#m!k D; &͒^(ɓn3,Ս!*hhR<q=ș%aTUcBuJYVH00Mעz/sF{q{ -siR!CQ ;Q'2RGض-4JiiavMMX:p1pb\1m!销H,LUk9Ȋ~?70d4F\FIn1Et]'X jv1sˎ#$+V- 3Zt0fs5Jd͓8.RIO'n;9MS4PXp/9Ejs%by?CL%qnL,vPCͯBд %wÀ9RcsЦoێ#)2gf,$n)Q"ScJ$ק9GvC5bDk`,Xΰ~ZQ5ъF+r1=|Oow7`=+~R/տq/zL}>ǧ󧻐 ;>~p YB2 _&Z}t+>E0TFֈb _އ(!qC?O$z4qέiE^F$ 9g6\_6yTq檕fTX B"MӢkF^F\ŤeRB~gej괌Hb""!nFV_OmV~c@ekݓSOq=&\@UH~tɫiMZqr땰hFW7)Q֧$>Wc B,061FX IΈV pPq!&ĜQJFU5 % q5oq gp=8,!ƈU;֑JXp(4‡H;*\v@):*( u&CbqMB &t̴tRXhɇ(i\p[*\% ݓXyp&i$?c:%z>gi0g+i{Wx@/[T?x7朥Mٱ3CVH44JoU$A lݒxRL̗2+䁡VHofLj{KOiٖ ~02O36Nbk՚5k1SrC&jV_r(9kk 4B 8a^-֘(ynR Ti Ӡ@9o)IF\7|` X'886UsN`Gaq=`8ɋQVaC-$W?/iC@A Ȟk8z8 Ypţ̚ z4zB)4zJ+lv[8sr#ચhe` EJ i?Oi~2b̸;0:hj]Y$mM=|n]L5!QeϢ,7L&RBiD\ C1&|?7H___p+yx|\*6ׁm~|>~~6šnF aseh|i3O3fmwxj ]ӀF.wxm)\MM2_)jG-Bd[wm /.*ǍZ8W5J8vzԕCIy0K&њ?h#R}ӊyBu|s(ٕ6k%'\u]iKsV"ffd隄Q1L !Po E^qhڦA6ܴGm6 I axsWC{TaJ޽CXu.PJte&ٌ$Հlٯ2Fp{Q buaYյPcNIbvqCU'?{TβR"Cp\:H+md3-yM$Ip J$ At[Zn0 xU 'mci/(&׾?gk&= iu Jk%Y zi]}p@CAfֿU&UbRYRk ][*MxŮʕ# N9cxF !fhմ)iAk(ev;3pXelY"!>o ]uO=y_QU/~1p~fĉFֶHVqi1M#E%6Mt+_YW9M"@-z3ѨaFubZoșq2 JkZЂ tkȑ 7w]Ƹ񍯣m[ ,fʈ+\2fO7:$@ ziwpDLƾRfXҙe0- ]۲ٰ;i:hhVNqsF gݠOA]#;I<b&:ޱƊNc&݈dJR2RL7TMtD3()"ںT(2JyU/D!rVg!1 iDTJTF^kZOבv(8C_m$rI&5t3ZY4ZDofHg=(w,Ƒ3x Nʹ`'0tm{\{ڦ+Q&l$C.IXyXL3[y9F_Uvŋ__]>|9*R੯<5˫yB jzfxp}s N^nWWAm ͖ܺU1̆-[GNP<ӎU1w`]kl#`m?{LcLLgąt%lMnK9O_ALXWrY6X:(3ArR@D @'[xq k,h7a܉N)'O=ooV( $`=F uYRhCI_7(yb 5qhi5M^XEZFnwU0%ncl-^wÃ{b)8I)&NRa,U0&Aju~+ IDATXinpuu*4nTyXp֡a|p}j] (&V d r̰5{`bYiqq~qk oou|#p0i?&PJa?5 x ]+|IKkiC? u0Om[cg|'+Hh᰺^/1'ɇW8{MOBdpVc@?pBDOlȌ8{f#wh;ģ.KԶkVd8H[9^w0Ju9L@)Z}G*僸`E];4mGSEӜ 4iCy4]{O?3Rѵ5fq}{KaCbO]\p:p?J[<V21݅04^z ݬҢOơvksE3a`_>ACA(Ɓݝif{xm2a!&(hYphմ- U+TuNHM`Ƀc~-nLH<[K7j4uK=+1p_GLL4ZL ÑNNX }Vn/9 ZK1%c P`isMӌ%}0NEB!њ뷬@B𸹹 ·Þ./Gz KhY^JĹgX綾?2` Z)#{ɃmBcka Ok#MJPT5#^SFIsL$H54 >_a4l1 NABfkk*n;q.a b LC1NfZ!!,Sjqf׶`ulotedeLsVcOÈ\EaWAK7#e8=QxU\3r RDUעQS-ΒZA}^_>kc3T;8Mh$ZaTR5kJXM B`7;-ҮnooPee"4!~f')"5:|_ ə)ˆ10b^p?"I0ZdqJaZgГ+Qm1=6x䁜`+')2i\[k1X4ƑQE4;h#҈a$Zg1#- 46[|OX)|Bm%B3ɇ `8k HbS8hsH׍_|M55gx1* Kzu|ͣ! -d'H\{go6wOqmOg#L[ɇ6mAd`Ni2+#4-71QmVV8s%' \U+Z*#o03Zk`B8Nhj^x%lu陿8Up@UUy-B3 |s*BpIupj;T])fxt]=n3I0X[JΰuM2fɫxpJEyFk>0OQ5JZ4 k=e H8'ҽq`a 0 jfڦi`4qO'ME^Da\N 1Ĉp}slu<YTr~b3PF\uɪ^3kRz%.zM+8vx8 ޭ*k FL@@6n)/_0H+9Dơ`3W:%!#t-ζg&ÀFZ1MiF5VFs MIHY/_g)1Msh9%1+Vh1L#%$yq}}iI< jqԶyFtEib)L8aMױZܔH:Q{L_8=;FL$W3q`8{vBl6{ wQcӏ_fw4"gK+7*?OPl=p]ca۶e=R dRɌ?ZV€q\/icTm-ʇ,NjX"JcIBfaNd#Vaj F3eʥخ5TFV0"iQLS2`gQ+%(F3@6]*l+y&gx?bÒG0O"ڦa rlP9+1:@{FG(//=DHUޤ]UƐ7bJl_ܲj9z]oK{k@0S@=Cxzt:>p/"YNfFA"\$8Ai03*+1!iY+آ&urhLs+PY1{//quo&')`:??wOω'| S.j^nno%~n=]v;ߣ? oؖsr{Lۻ[m: ÈX&:55RQO.q&q/Sr^K؈ԂPbCu3<@)0UQpiVwxCO)Lhk,mJ(>l62rPB\"^77PСUn78ݡX?ul6kjR.L1ҬW{CFl6ImU#t9u0<%i1`b̤_az|qX"ij!V8?1' '^cOgĸfR()9C_G$(OS>Obe^sяeTE+3{R(?i@ QǍyU/Xx?b{q{w# /p7ϯ˟g?ח|Q߻>??:~>ao ]jy/.y<~zl]UEt  UM p\ysJF V O:JY*avA?zlwn&dDmd4k Yn2y DŽQKRaVx?X[g\">톦A8R65ps5#.{,p&CB#!df1F7F'+/ t PZr6.~)e=7$i}_ 8"ݎir`02oϘuEq93+%[ޠm[vB5v52ug Nf?cbFYC[pu jp:|C)gg6!qC (F*L izn|poO)V/S|\eڔyՋŵ.DZXbK̘gj3nStHY+(=ZFuͯҸ`{7Fp@jǠs6̱a[L8h RrF*@ab8(|7$^v®W*C Q qc{~<$;at Nq8 l\( 9Fh]0(9"Fύ><]? 9zHgg7٩U!r8P{֨4 'qС%"G!+ +G1RJn3?<@]w_ o?oﯿ>uTrxz T.SvPxC8aۋ=pyyE 6&5g= g(A 4ŋ+cqZPs-P S,^%m Mӡ} D;'Hs1bsp8$bb0i)%59p8`cftbb\)eddX(Ș8cmp}sH֔QRyyIf7R#=[^qq{8RRT], XYp(G6-_tBYlThWtQN=LP xaEȔ1)<8 }Oh0ΒZ.FA{Β-kŎ8 # ׯg=4{~#-h$%örNb@>kϗęt3/g}OoA\ b94ZB"v-r+8شׄ];\h x{2D|իo=&7>s<_$F<;;Đ/_VwUWw5[ 6e@%SDӴa/ ^^F0 €V^qaxٴa[&MCdmI,VuMo~9DFFx"MU䍈7oCu]C;\V8W]4x&`:ML$c{{t.P^=6kdLJB˛r!%Bws:aÓCƣ@#t"2a<1K`:ѵ-dV}$<16ߠZJP)sl6[+eY>2#[R,4|xxLQH/3"X~"l!3HqN(|-$̓} qG#o+,s"$"A8kHIXF((rf9Y^Pu50vwy"ĩBv](csi ]Gv@K_ZKeQrxtLf-7 -,ôe+Aj7+ah8c~tRqX,{>k\Ww-1DOw 3vPIH'v=*ze+q'EGn =yeO 17~IɆSY"MhQ'yprI&FXUѲ=H+&1)9yp9_{7Fׄ@=M*yW˫O4Md2ynC}4EM(l>z|{/[1Ф:'jhaҠ%*DYXA@2FX -(Bȳ>df/$6!J | f2d_xjMsBHuݐg{m aYk9y႐]i2o!9MPB12;a. IDATY@ 1ܸqrISWcG!ˬvԚnִRTS4ߵ)4$d\4r+}P؋@zqgK]gYsPb Š7YQtAKRg ¬)l&(]to11{9lSǝm"inַW!5c3f}f[B~APJ(y/j\In~wnbVVZD0 !ܘL  +J yp`9*atEJ5aOJ"Cdwow֚#yz,T;Jl5e}(%qޣZ1 #AWj`$s(Eg7WJ žD8蝌:jm2ݙgeDOan9ԳjyAă.o};B5\[M(JTׄX%C;<''cd"(@)PeP]ɟɟ~'8Wdk ppgOFD)]ϫl{?$@=|[]2VwƃNJQӽ()$[) P; a4L& i eN tCF)&ʢ}E9.%aDFQ"|YC*_U5,( V _PVĴ9'ĺi!Ҵ-;;;B~4{QZ4`hh\ޡ"+2zV5ya8 Oh.%Rx" SzEc@fL'A=1Hd#&Q54jK! L;(~\JiP(bFCr6隊$a1L @d<]I# s({kxj_&*!AɹҚ֔hnFB:Cyop8WdW .>V|Հ1~fdxxU{P)mrMOVE1k Mۢ8A0( *bޕYCZRj兔esCzN'kUjY1B̆99l =#+vfu= 6ͣ YoDg=os-Gֆ=YB4V8a'`j9&UUB+ƀњݝ] LRmÍ}aGo"n*Ɠ M0lpLj|y R~nݺcwoWF @;goV>\VT~t}KY Z\1?9m*fLJ# RjVEZ m]G&M(՞a aۇG%8xcã#asifM }Ѷ@?`ȢNc_و`OXZL'A]f'! e\ XEY㌦n\=LĐIPeQM]߾k[rAYvCCQ x}XVKk;s6ZRx|خ̹VIvq#@4u>s!TJ|4-ɘ ohr􄦮h}SӵlCuH" -m4O코0s^^i(ݿrU=6TVHkE!k+cc&Nݕ k8ExѝEAYK}{s15:mg5UWq+v)˚gJ BC@g4MCY 1д m1 0_eZFBMRB1L)ZA>|p΍H@J۽]фčBk =P {(5模!x,f}@)-AfGR*+JE9"DCv\M[tmnE)$83F~ @Kˠ,KL'§"F+e'|1r|:%MX<4HCw qQ) qgyN^\2{xK 3Y&R1P#j)l)q&EA HMR߾;=FlQ{a~fzI__}{?._;lk9mNömx<./]o3_mc'g7?2u89d׶}f$M`MFӊ8͛7Zz_eRDX\q^fE$n>dt.Iᕂaf(wl(в!|HyQ1sFF,,GQ{)4TPD@f Xm16Gͬdl@edJ I'"#B&f}<"5h=(ꦣ3nاi5&B)5HB۴][q,Y.C6S{j<>᭯}KdVd2tvV I DqZU~S*ܶz`B]6?~i(5MCrTR-*NNf(Nu?ߝ#h4׉Vs=MOS7F%A4La';k-0NX7-> A(AEB ('#qZ ,D]W(e|pcm \/8>&P,n-U݈ĭʌ;bF j1}2k>4oJ  eXH0SE1|xBPDiky1GVBM0q}+i`P̮?Ayw?j خsNOg$fD(K 4e>\eYބ{Z.hc(G#B}ͯ\i<'h$5%ee޿qv@֭[}3W{l/]wsyPj@pzzJB+ò :!DbyL)?@!-OOORUJkvvv#JiBGAC3 0[҃Ϭd(Os5XV!ܿΜW#RhzlRL#s>283e{LJBeaٙr2>﯒0YLwoT}^ -nsz|뛁n@:Z& !&5!:XS=|4GX@a2bbg:b0 X>re_<}v"{^EEk|.HEx!iZxV{Q_6X(F% =uyI6Ǣ^cD[Kexyu]EfSe! {c@|]n!&$R@~: zy|&ٺjsŌZXi/| .SqAT& Uy*"rguJ{C/}'E[U]c!@z u"3WM7ƊR iTթ0n4lG4= ˺c2/$[oV h/p@}~`5NȦ#?o#:ۼa Zܮ5&wmɮxx<% Bz=>Fhd"ҲZA2#E!SfumnZa]f;H5YػJsezCh3 W a]3rh M]Ϩ=jAp50I =DOSu2{ n._=/^Gߋ~UG?K-w4mx4&JzGVlkQ (x:Rk*MUHmM^ԕ[+⽽?#e^]\5?|A=W7UU>889m /sWhGx:eU늼qrz aNwE:xٌr>!& U]| 2 FD&F UU1L;aKQ$!dLRق1&D`ʢdQ-)mHl\[ Z*6=D {t:"*@Y7~W~+ ڧ콳o<6 xttt_9Ϲ_< !ui}]|`<YJƍ#/Gh0qt<#zт毛ZZõ5M]pP.ipZ\Uد2n ah {?-Y,d};XY51Fn8s4*&Rc͎WE)BƍU4zav*rѹf뚟FpY?:^/ÞՁJ=bhbƘ=x vj俹 Pk)G#ʢD B-hBkڢ,XV5Vk&6eX+i%7h m 3QP\Ydt}' PZvz ;>OpNDbI'KBpDm4U}nu Y1˛Az{'oV<6 pn 6۶Ϻc2 BD۾a\|sF$pS$rڶŇxlɆZ5(Yk **6dA낪0Z\UqÇ_T9)R7:y@u<:W {Y~>< =xD{rBQdR$ĵ23J?cѪIýZlc4NErS?~9`9>_ tc2e٫<>J|OTȠUcX=e) $\/I(1p2;aYU(I1ѵ &;ܛ&;S"b2-m4}__>g zy-_?y X'U*"/V)w]Gx'ۋŒd" %үo񬾋Z1$֐YNQ>o淿O;*G:<:f}^ OȬm,;u]ۯx)ʒ<шh5DD !:ʢMEk I4AR͝'9ݺW/o|}|*~m\Y|Yg;%|2'a%/2/1pr|4(eppO>·m+;>nwLvW9J~M!^-9Zk jX-\;uӀXSd),0pQk"1 bTdgOZʐbQ5.s{l69ɯگ}GMpk{ 20C IDATW=u'gWWCg?2U]tm;(A=!oޤdvcƣQ%#A6[2hC.BTx͙ٳ|[+ܽzWqUVد̣ ?ow:;u= ! =x=11m@ 1xTUEtF@,`2b\K{1 iiM5% 'ôBqxoµ@{QMg~^@sco?<,c;wNieZ5cbs= ;;߼&Lƌ#Zx<TZ3Q!}"nBLh-j{<'Lst}~Vmjluc EOg(Dޚo P)˒h.EYcy{;<~o x2I$2G  /11ٌ~~{g2{b@WM6{Ju=8`%guYv6R4Øg<%%17){ .VsdFҜ1!rT,D5/%Qs#F̎<&KߏV^>l^>>,v$eI){0ƓK6+}O1D~.p}bE2csڶ5~7><1>WȓvԞ4`n+^T 8sw `뛯m[fz~eY9J[vwwwk1R m+ ZN&%E)(˜9]cۋ,-?e /:ګ=Oc(%]׳*Ud2d9F(m)ݞNޔe(mƍEӹHxpXKֽ?>>?~?#oz/;YƨTmyʢNuc0:h2bdv-M=TSb<5p.F19t/{=z Mǿ76,d{cٶ {`–m;r俍 p[0pvym5;zH!PUbI}tJ׉NӶDo2crbA:;^SLހ\׸-,~V-T@f3( \@)q9Ge]QUmSpo*Jý)xO hxO3 `Vr˝Z!躎tBH"PyVk%E"8i`)˜ŢFkMv^@,r\H)bLxu Mw?x/p [<"_"y^GnU BHLyH Va^H@ .Z+JERiBhޣi?l;FDRhH/)ت,3S3S섣xxms>ܦg5qp`X1Q k Z=fɲ HkJL'rDSU F+^ʠ'_Ο>{w+Zx`dص{cg, UG7673YkN/$eQB0CRu6V8]MtQY*T }=dyA6ysNNPIIх(f V_c'yble73!81 J,NȫPYz }ύ7(#V,<t2ƹ,4M3&:/xx./9߿)}CW˖2/) MSԭ`2̒fV}Mݻ~hUME 7nQ-+&GGLc4uR" ܆H!FtQYq?xT\ۋg =]-' 5M!T 6Y^mhmm+E;w%u]% @ d|wcTex4*EI۶xh#TMKSlF۶Lo3;`q}ڞ&S?w6HCP@΋(dNQJW,gY *BvjML!2AESI0ti-Zxt11L $aF[b C+'Tf&n5hq,3IH[Ѩ)Yf99(FqM~M~K=&O~Xf?؝N9-pcs $B"pGB dx2tQ/2 1P#'Ğ,jmgΫ \sOŞh _'Wn~^)w[ʓ)fE^:) ډ#y>a>_0b`4w[,hn=da"%4mKe<I2c/])%͇9[Ն1u_㼔Cmuk3oDgk3 !Rg1_8,ĠpUC 5nlFU$`4[TMtgJ")arK<ǻPR2_J0 fێ,Z9 e1i&̛}29Y3O mՊESQ#SeP lT]#p!2;:~޿MN0B]]SRࣀ>䇩0;pO N_U aeAKc2, MKJ@ z7i<8\Wu=Yi(s9ځb2HJӻ]7Y5u]_MFӝb(dCb4qZug<*Wc̐i"'/uКΓWaGM):>P]XoCB UE[7mӒeMӠFDYܸ1N<@{?vkkqͬe7^ۜJgg?W| t]wggg?_V)|~o[^6ЛO)8wFVUKl1BkMfsZN"HfuSaW8Vr0ڐH]f1|- y._(a .-K#Ht$dLp!:@K 7uyW@Q,48h9NNw2B"$@eLK͛Եi{/"01&" ,M.MӬƦn֪E̒[CdLJx3ݙ2/PU41.1Y!N PP(meV 8 &<;t<˄Z[+hEYJ1)wWz޼L;9zHp oPw΄|9'|ZO!PUKԀF0!%lBJem]J~6NL?տ[lv?p~뷎ݕy!^[ݔ7x{uE msgG۶wrEmU6ݴUn~w#`ȋ{;mGb$DRhD?n̒y%6 zjp6n)SXf<QW {osamU_%;h#g s wG=McDz( P"˦f2tY|A9 ˣNHAzm2Lhk;NE4eI۴Nz{LZBJiN/0A a"(qלLS UCU5((@)A4Ͱz5fx vvX,u\M׃JyA` ?eX?}~wsr&LQgp׭*k {lg(b4ږd#ʠ"Z (ҷϿVC*^ 4 m_ZX.onΫWtgA{vykkX0IQTRhmzq*Im!{h6KJ} Z Ũ$~Ooyg9O_ݟfGw~s|t鲢j=sl.R34M(GkɠG1bV#/J,Iڦp.deIҚtJzF U{XId[z;Ý""7n9ݤ(nіD0=&-( n0 ;Z{gW4 XaX It~C͙q3zʗU^ׯ:@"3#ndވ{}a%A+hIXlUJEk2-,%B$,(}0#18h[Sc^fBtcEIyY.Luv;65)%BL~88'aHYwHiv,.ƒ؍ 8,ÿx^I_?⧴l(J,Vڏb|7)J,I_W޹$)JLSJ'??җ OT O[1 ~:{@/=}*\\|MT\ҿpyOZB Uuv7ȍS B M ]PrZI?YZ`U Ư/~W2)efX0N0I4횤j6wV}Qc#$^ M3FP>x("=19gJan Z+ GGyEyf6BTp|tL?r-&cd6b[Ǣc1$T0[s&Byij ƚ|Z$;f{$- J{Om899 BgְxO6 sxúw~IyvRqGСQNDN> Q*['k8>>bݑiPdRU)sN~+_? ~yϿf|$/ xc~_BgUU݅?I7N`iVVܿ]S"jbzNNm8xH_mې:,)ljd&֫5m0z臞J#m,'o??R:VJQ5 u`m+PÎY@P.FRFە%Lݶ+AЬhWSLjv:Qًb^m8?? ;u'נRhĻ~ ƱXz='lw[JVTV4aeFi+OtUET75˲0;QId4H Ga=5iq^?'U2Waر9:=>Pڔ*ZZk~dյ8;NYݍwoj}@h m, 圻o{¿eqS)6&mzFkCtZ.&!eZXLZqq~J1 mp||,b,uMLy^D A;G۶,;R0Mod!Z1'Ϝ9>IeW_(Zp"v{ZYʗ* b SJQ轀.S.C^&S\/:G8^PڢE4#V1wx9%*kX܌ZVvp[Q*NOO"QQ`RHjJ m*Xumv$٬פQ@zmҭ:Iv~8K"/>pΓOLUUtuMFdfk ˲vk..\m1-"NӼ6-P-%)qqASn໿Ͻ6G]4oAeUE׈2eHX1Eb-n*{Kl6Ge+TDӴ Abg?S/|xv ZprP>ix_*{Z~p5U*<|u'ɻ_3dݚztE/<#&j* kU-˲7Tha{n0*1ڎ;oCW_CJb09a gR*9 wiF4 ]iDi=u0/̋#DZ3-ef 1H)c/qPZ/kQ[牺j@I""Pd8C ŐVB {WJ"IJՙYx:q]<| L]֥=I)#( o?˛[Z^u]Rٚq ݪiAv1`]H16 Χ_v %zL1pt|\CCNi% Jk\IxgY,DTs7?E8O;SpM˲x>bKFM123)D VLS_@?ys.P/?S6èx]xYk7n:*ꂿ_6z^S뀀WA/:>>_< V[B DLBUUFXv^AWsWwNFVTҵVLx)qsOjXhҷ2Tӄ0v>)ffOx1,~g\yvX8ۍ&޿ݸρ'vdr 40 8\ tm,U]1%VBZx1=Zie2 #0w^eT+mO+6mV뵰I2Tuњ +Cw m[p#¼,T0(2!B)~03uU&D["$:[EiR(zItSjvcD45M2@䴍ѬG.v= l27jGΙ9Z3>1lW=D.5JuUY OT" BMk )&ꪢm;RiwFtkk^Wmu]Y߯JH~,ޕoS`m@=v:mY'yvܸ' U׉b\ϋC2 X}jM]lAݮD/.vn( 6Y 9⬀N !{;' Jm{)F@9eK[V4FFZHQ́eVS.D۴lԥn9J99X^UM.t}eFyIdg|C-xzCuғރ0brJZ"bb=˲RB7kk3.c}Y͕Ww??8TFS++rSJҚi %zCd5m݊[5aRkE-I8<ó\R# uIUV׾N^42U`= xEw5) w"xV5ҏ)1 MwBɵg2O(8Ncˤ^נdnN8A /F7}\_x7׾(;~b;̜3yb7y.&nޣ ?3l'.vY?1NlM'ہ9XB わH<&ڍ aSU/q^JRo[șclpj;ܹ-i zqH^1⦄<էBxt#/X~~\' |ydm+kkJvg*k0VaəiӃGw۵0JS뎘] v E'%EzT#m`LvG'~$s5 l~rdm ~dr)qbi!<~3v%t>c0&0MⳠE~95uUs|r})4'Nk9^u;5Oq CO]#OG;Y癪L4ϸJ >D9 (nR[p>ж-uݲ ,̳L9Z(E)ͲLTG9:^~hNV r&!쥮ybj:n:R,~>XPRƯmئL84dԦ0V~ud33 |z Eox!B  9'-ݲkuE]KJ,*kQڐ{SSל9%Ą5D {v%Tpk7x `/ \n|iA/3/?v6{] pǔR%FD{bQRjUvQ)Fm6TUTvHZMq>1i[kmۮ"bZÛ_eguôUg(bRӏ3hC@B t^K[גPm9>9egܼeխ!J29!HpP8¾$= &׶-{д vLkHM_ D[7Tb&*۰VdwـRdZ3O_Y46A=DSXml]dyk^qmqαެ`mEӵBi֌MJȬ<4m1w܂+uGJT3J u+ ԍ̇yĿ$|b4- x>"تO|ۼ>DN,iV"8J$|sm[Vpz[ėTZS7R$:/TU3/0ӹ0o~.+^W4>iq>$ι{sW~ZJQ\q@<P~EZ6<. )lh,ˌ.؀z;'/ѭ.yLVqvlw#4CϭK=# un)DB13TBAU xiQJi249cLu@M_Ce-UU:n ~C4u- !p|r 1uUX )ÝBi;d [ x9+mۆ5 8? gfwh]Bۮ1UY<QB6` Dka'5F䐇]y{^I~Bk%1.u]є8XkIYJCJ.&Ձ)FIMSӵ1%b_3ci躎Lfũ22/$iVJkUEM|t7-| ƫT py3_4݇H `] 5 N!Z"HI,`+BE2M0RWPnBծŔ11eZixLē3ad}3{{o~5]$agJb?'{2@ӓl.sv[P򚘥ġ:!J43LRbݶCǡͼ,!EÓ3~x̪8sJAvX)cT5v,n[߶02Z1[Fu݅%"¡S+)E,2]'{] m4ֈ!ι 4,LӓSL]c,Êq~q-tX$C#!ɱJb6|I pHM.Â[|qLK`O~Yͯ@ZQI0sz9a>GۭxHh]bW-mUɜZy9$g9%(]#/|~/KW +"۱7g@VuվUY_+קiKU5bΨ+twzʰެ9>:{/jO =Eеһm,ZüЖ|#DƘPbླྀک'蘒%yf oYkM4dDWSt`rGk)&YһPՆFqKB6Fΐb;^uuScVh/BU7EPnI蜙"OUSbFr~:Ъ$]CUOF'bVҟj!"V{+1/STz$`c$sޓTesTbQE,@w uJ+K>ɕ~u?{?|]\\۪q%1+Wg;L H^C.:=F)hCyVTu#(!*03< Vb5hE,\$R*DKY5 yϞ+/{c\o_ 2.dqdqe,*'iD)WbŸEkC k 2Ҧ'`lB(R8(V(@ZP)]dHhvjb4MEL|KkNNOק_<)eȊ'pbJ)U]͋|l7BI\bRire6`A$-N⠔F)F"3lJ2|>{ae>Pd.q((dMFb;yoү}3&x>)z]iZ(̉e҂TXsPrڈ5t9B nq(cU/̕>x|{^7M_k Z ǯ;:a 3'zu.|;804&,TtF,:ho6ժиR.u^nE6/3m} Ѽ@/׾eHĬŸ|le+ڮŇXh2(u1Mג3T>#]W0+kkS@ HmYPhfѭVa߳Պ,f!̛oQ-PI5㼈Ӽvڦf=>&q:i,j֫c06߼E) Jbh+bL" ]Z/!%nYc w@vW<^&x2ˌtCnb$E/̫B@/"|y543DK+` J|o|x*O=>|Z3>vb.E?_ 0'keg""!5mbYA]մVubaF1جV SV o0̑]=soqdǑ~tmE i)/Ut>3RX:@e۵h )C*ZO!xmUpn}Ӳj;%4{1كm2UUsD]dVݲ֛oW@.@OiVa02/25-붣k֬7K+`T۶-:"?meXoVLTu8Mx =/XE0'Z4i(6u#r11[us0Cꪖ>9OJfCԴ][غaZQm #XzEuܮWkH|q)tα>:~|k|틌GE~mV9*n>$c k%Ir͚ix:'j;ܛ#)$V{W[os:^/`|R/zmՀ6`ss IDATժMݏe(a瓢Ǒvw0ZGUTtVJ|x0*RJl6GLӵy{gYn $Pۦ[^ K "S5 ʕi;d_hPJP8)Av9Â2yj`C.*bHlM՟K?>y}x a5U+H} MWDqNXUMӡR s݊]Xs(DJBĘP⣗~w꯾[[q|j!=~ݎigR)_MVJQ]s.R[Ue$]цif-Zi{n5FPh]Ak*cƉ]SW5wʵU O<$؍343/9lgi@Mh+l68x 1CNڅ"kj,TJ =Yk*qkPkM,PΌd(rlD9Gk5id$8MӉzMJ|cilUZ"34͘Jl++ VsjV'A*T;[h|H|2)`Y Ux2T<l- 65͜HQdON6X[pZK˂2OX+qh[Ril#cҗKovbvN(V̒nw(m_w_IǫH=5ċs&'GKs"XbaV}4O38>ZӶ {)>%)UaD3=z^u]1,t>ie>f@?pE&Ǟps3Jn4;RXJdKOONytmٱj 'V@c~8ԺcƗ^ ӎ/寗xiU]<, 'Dzh YYH>Ӻnoߏ`+kqn@)ǘv( )BbyYQF .!Q.#7Gc.1K4[zW7~ʼn8;2mfFlQ:TŐ'FaCM ڐ2 m-+M[!R7uspМ.qآ~|B#+ ee/KF+1}%!TЅnJL' \L0@T G B2JQH"˂,uXcJeL˵!xơ'UE >u4M VR ub %EUt8lklh!SbV#YDg-P4b:7zP46C Ԅo{ZƋη~e؞a2'*ҜX¸(X#w-hBҼȜu]m/ h4R{?w/}]E]}/\wU*M+yY9xqx9ETo]1FE$JVSUQ`k+KkRL Q.߈|J(a衠ԵBLԛ74#_ϔ=臑yՊRm,gg~رn>=Bb{|t$(L*v1-XVu]wS譥_Ybl|su[5P7-C?$bZsrJ r3MKhm7t-M۰ZwDb<~rV!{N{uɦn0"$Yo s@#f:]BT1IB`ZLȪ(ˌDZX)u%Qp<>>*)ѤlniXz+E(LUbbASp"+A`L)~ǯٜ}5E\~mΙ{?,},. |֊4V+b 45%`9QVdPrYWcBhzmVn|Yzlbp $s|56M'h/,78I9W@L"yrv*⢜eYTbuy[6'7e^>#7ѕM[ەEi$AJiڃqM6#|n]ߚiUd^wz"gHO1SXʲo.kI1Ʌ0 ԨVbUJOPۦe7L׫dJ<ʜo/ =]'m 2>z/zKt roYgq ͚kFvmWӭ$Js1mMC.$R%%K0+qV7;Ȅ'_U{cPKkCYXS:B̘JZ a?Op{?dմ|(9 o'IPcH ł0YK,FR-b3,4ˊ-Y۞ĥZ˿Yܴ[V ^^x&xU_=j"@וt!&|t=Kk·.&>Yk=,OcDqDiO}?6-8R7~bsƻ75iLc'O,Kxb'뼨扑c)Sb^hӌBf\ha(@f hPoi*FLB?4`^h+i,Um[PAK\G^QneѬ戦iIYP9%VteiT?k%'6r9e?|8FRTst|!8̈́(a')&HUiK$<᫘ĽR暄yiŴ$mJ#+uSK5qCq:-̇ @׊(TS7gG!Lp|ޗQQ92-ˁYR9ȴ%U@~9)0W+7.MӐy{^ _JWo?r_p{ ,sM.?vyߏ0=cJ)In*9A UȠU`8qN:ixAqL [8bXjjmlmHch;1y?ByӼ:- vۋIX#&6uʐb 9bH"3ѵb#7* SR*^@(sM%!{ʠb&|_UR֬V'qPhm[*"9*-Nti/bg6bws^zz)I3n/O60.^;y*jr=Zk E 1D<;kVXSAV4u#3uUtf؉ʒUAK5;aP8)13Z+l VeS8È2Zޟɦ7va}&_&A_y{D0F@v%~9~N$ږ9ѡDRJM=;f$lU@B1^RZhD@{y1 k+Gu]ǯ>axa&^u?_~<ܤSmS@U9g JI? s^ $~=/=Ҷ4NVʉDl=M3u✧6~ycO/>-[ b]k[ɅS6цʼn ~1\,e똊2` bۮcrѤ(bQ ˶.N(%lh8&}n['gg$ 8/ĹX wR焚Ck;X0(Pb;{G&Ԣд@մ&DU}1Ĝ1&ta,EzUqevNt躎i>Ͻ:a8CLދyQkq@.2< 9ڦAkn?~&<=~4lI1(z\b<$LnqJZq{VxgSP=۶@NnjBc Z"c4m8|Zky7SA ug0> Juwd`{mu㦝ukmʲz'Q BW Nv{mFz`&Me))"ڭW}Fj֜7>O2n{< m4~W 9"(XBb" 2 k<;o9! Eٱ1~Xo6eN(΋J+H S0(jA(޽{~q L"/svݐ \ qmJW_`Md2hƱKFѶD;'o6ۅaXiw xjE#wO;>?hYu+zi9`$V݊P̀Ӭ*Kf)A X(;>C @4N5ˬ*h0UJv+=` O jC,~q K }M%q@ qDaݮY hsHʲhh'd{箔Í%LBkzڶ7`gFtܭ8=>h]ъjfÝSb3}(-mC%KJkƔ8T і49 iMm680zf>h4}?)]SQ1oW2/^t|Vý~EX}tNMCXW9#؊X,Lk˜(rJƐ"f)4|/X5ۿ-x=^xU]۰WK)M_:n& tSbr/Gk97 )|aLBqt$Pޏ9MP5⓰o[%|y^xr~7s(%'@i~Y_jڶrRGԶ5=J\ˍn)DeXA@$ {t5M#ED}ArUJ8"&szJIX֠:LDa9<Ϣv"86uBRǴNĀ0y)-%3iW)yE],I/8IE \⠄xϷke&H]CΩ0</I}Q[wr<1<BRִ0̉Ey(sB7!jL5Rڢ梴|dYm6x/=:UU_@|66g m?b[ -%8MTujbK)1< )g׶ E!RBw2@0 ^}yi$wұ/Hzf *,v@& d0Q+|^\.5uϋXf; f2aO,,  [[b*FL2{{j$8k,NFC0?>v_rpp𵃃Gh/p6G.>~R%r }DS}W/?$ 'Rnļil@G6|&(>ڠꪢ,,X7 1I_ [ eu}Wu|݇kݦ!E q$;ib1U4c|-wme:il+x,LٌYl>c<}Sf- ˽%|48W<Đ̈́*u=u]SV"T4x?y͹c6'Y߇#B9(yN4-6㪒~2/~bGꙨVMS-g1~4 ,wy) &,)ߏ/sq],RMӡrHP|tJ)dxIƚ)e]JBȌ8;;( 3Qڰu dN0/W9(49'!|$}?d,:`,}(u)k:JWPLf- 82UtD]:^ʷ?q>U!sdGaDR WHF(g vs~IvK^"i @~Գ^+8`hj1i|;~Y[2sRqw=*Eapo%uYLgYÔmTX̗$8B^}QdCqmy@!ų:"g(m40`$6Z)JkIJt. U#$>J) (K!{&NmYA A bKN4P2K`12fKH7$i2C)8\,4-~P)*j(]a1`]/|X,ԏ2s`TgKBSڱ*P,Ze;iyۿ}m>?s׾mnH*o0JIDߋ<4 0 EɘʭͱEҼӔH)a6_2w3e믿< p9)x<,tUZ/z}RwBÿz,Ϲ֚8l!n%!PqzAHk5TYgI8ݤiA͇rIH5%뺝᫏_bGy[?B[ˈ⭣\Ȣ:1ĝK0 $ҲC3!J+eJWfxzKW̪DŽV0#C7_j- =!z䏑ZBvqJϐMQL!D[Bvr~SD9'>1a # M?LlF|̚Շs)@"ks >ϔ>( m)<(o OqŢ =!1(eh+wDYJ2XNiGAR S 5~bo-D/ A8E.QӔCK )$A~?7o89j9'GLҢ al5v׺B1yOL))Jg!Kp|z0Nޭn.:(?, Z!z`KizsQx}15iR>{k6mG ,k(|hNOOp xE92?~"% |`JqpsA'}7v'J{z;o){kE3NHF A[l>lc}eqw!cE W{ic8bNTg\!&7meư+> \j-\/|MUvSrb 1B E!m>xFll{KĦkes?ψ) ̧l+ e-H ,$=ǀ) \iwVMkڮ%t0Q:'*"y]E%SI'ѕHb;DX3Fѫ_w+b՛Qp*1 r .D1 w$жISVGfZ8l6kY9G]ׯI A<>=yYWQM}]:0U d/{~0VSxٜ3PL4B]7 :}?&qrYkʲ{]%mUQ2|8W 'tgw ->ٟP ׮(FHy3NOOQ ٕyxMΕ$P Hu2Xj$$6uMӴ }F}bRg*h`ÀFvKӏ!J:˺iiZ8+;qE},*qψDu.WD/Z)FRon_m妷N1&,1= ֚99=(щSuHTazta>l|PYVyTZc[J#&Q~ܪnVL~DC醞|nsy8N'kiE ð|ȜH:ǢB,E&Uf fI)RM A<:bi`_}~~G umSkρ .]Vu;댁Ǿ_)QCʛIsE]{nC|F;h Εk @ ZKYK]؁_x׵9{x~_%( `g 1]ΩW_~08W3pݱ$Ɣ~4"\ .,ev}b6r*9'ֹҮ YW_|،d/2Sӵ]dQ"fJ gyx| 9,(RmD#c,P^BՊaټGqBB Z c8;?lAs:=a4SLIlaKE$"{0#U-,Wn`a$ nEQUgooMWo:i}d45Ui I+Mi2cE$az4'jґVe[hR1b>GS5Ƚ;+_EA1q|^,E&p]]W>B]* a0q#+-H48*,3_]g޿޵$~KA*YϾki֘Dk;RUrQwq'=~zC6yly1f]WU {aJ8_D)CȇNI*Fg:λء^}G 0@Jv'9q&=k6R—绮iZHRޓp۶ɥN=fD-+C 59q$f#ca3>wJ]O q4-M0M`)f-_E1ڰ^o0Z@~`МKy9AL*%qIuaH5C;&|` U~1 Q$c.!-);c:Ϫ1++.C\_Guգ7P*R f=>DB|41;wL }N`riD.bDfWYZC܎T=~{j88<<:> xww=3y/,`Z_JybY J.a 1YG7Ea0~$e?M`ݹURV ]FQ;imW5~[.ie@Ez4^Y?d!%BދBcQߋTr@tr4>+My6Fg#[A]D@v)3^)2^Bӻt1RDLst][&[=;DtB_ZRJBಥ8v|aKs:NFTVX.h,*%1}Ik#%e˯ 'ߎ{/s(M͢s"䷱.1⻐̪JX)X r8sm2яO9k͹Zm8Ϫl]UsM@㪲6n=RSwG1IBv7&{/K|6U޷;_(H W*tA,hO ->qb~ڵu.>m9_=]2eӴ/xQ4ۢR@iȮfIB4NB$n) R:F)QK;m e|ՠt)` #!%ITLvM{(3qIrKpV+:KPK%DF2 pe8a(tՓV*˼ʵcp]'KM쬫cyG(Hdard+!\ϤCf`laQQUh|{PKum\-jՠԣ8ĄHH0X{>ͩlaX]?'J&4y=>>LZ2/1l֡!q 0XZ1\'tU2b<,]<~9K ІV7WQ܎^<0 8aM!`3J;RW)FTcӴm3"zs 50”iz)4\_~+O|Ÿ u6?# k~GCUVE߇aQeI]Sjȇd^}Õ8LJ8;6";2* m FSUe]c)+_)Jy5 Rv c #uYa4uYSW$OHN@,$RiDJgQj8 B3 0 _gu=J+UYQ(1i'sbvMɌK ωqbu') Jq !y7ns}{[gEYu5_U!ɿKך]w]ZEા*ES~}%6I&4Qi[$NGxsD'@QJi~x%7]m AP_Ƨ~of#Pʐ$h)yfq޵/ߗ*&en`T5Ŧ8MY\&J׮@s]Vg Gq{ 4uXVT.S|,E]gUՊҬ7 f'gg3g^y COa)]i6:/D00N-g36F,|d+S^q"hB%VRM!&QMԹG=k|)$T!|hچqv4cBu0 iR߆OD"&9Z=EYZʽ>ypӹI?ď-QiZQU:'^fUt3P3>4m˦mN@6qʶ֖;H=9yEgO /pӲu\t>w T*MOn< 4U hR~0}˅Y(-k+'Vv:0Rgl@QUgTx^?#RF{~?GSbwT%a6M e{Af1#nCL(Aq$,(S r`rR$׀ "$nUs( =-riۂҴHL,Ev Њ!+y՗PJD\R 3+KV+PO$R,3R @' }CvWhbwG?z$miPlq%EaE0|1TB  kt?,GYZcA*{,sq s\XŔKsaeO=ȱ(,b48§~؀i;Zaʦb[sBJklД(9@e h>8g@MѠ@B{,˒osuPN~~b MO\0\W ]_\񝞲;[۵}'>/(E;zfZnug-YQZ* TA]U۲1RCOQQde뾻jtgc۴wƏo?7=CUew -dL/sbIMQǖj 5Mv}9Ov }OJ+u2s9Y>#qEe$zE5WuÐd.x5ٴw [gU>#lY :8Ziaz),~S 0_gb=_YS})1ibBq 1DY` W 5X[dw><|~Gqr%eM-)Nbql-l,P;EÔҮf V€"EqL)*`V{4Z|uf>|:KkqB0BCfmG<\߉."ҵպk-pjX9ǧg4Ӂs,?gorup"x͝jaxvބ pB@Y_W mi( M*|gTeM=_t@ӴhM*'JeG+Џ4MCFkJi˃%o:>М'nuʏÿGrvrZM~+Oz|r,MCUθ( C߳\.8::0 b~rryOsb4mzPّqFCUqiۖԬ1wepǂRBF8n׶! Øwz&YH֮լ&ٌbAaD2xnC`\ux><|sAg霘(A:qJKEUBqq"a5eYᧉNc|hOhYoXڑd@!.ԟM=q3t%M6 `ȠDTqXt]۱G68+µׄi[Z6BW<9=mrA|{z'KRk[HaM!mKaRpEa4߶nmD?mQP:GUA[M ]ʲ2[Tu8RdTS͇!,9ܓ8VLa*'˽=ڮcDTTL^ܶtH x<Uxx# UYRV{{UU/s"@]W)gg+ah> չ~peIUV4l6-EaDϱg.slzq)g)B NUwvv SJ*!sOCo+v%埫λxol+ړPbB }-fәh&he4Mֆ"b..\AYW&2}2SڝQ +^}~.񛌫^cjWLrqDy:oͽͯ׾WQZ`]׊ \a0ʰZOFk1 > 9^s"hڜ IDAT&WDdi6mxX l( Ka-e]μu R8KYWtÖxr"mfI'Nw(ʺk;0]7^9k?`Z]1mjX%:"2H,\VZ4-F)IlȕbTՂf⽏]X)w qY\s;gpޮ*c!%7a\<~9xZ:FVhqw})kj  D!1f;O iYE*;0ͰNta@ߎ^O;>R9aON?$[O{,ܦ0,^eXd(-c4q.dS" FclA5p雦e}x6s W8RZ~Z\[xeK|GAUQUl6 !xONv)1@^0Y8Hk`b$"1Em6pvz8$嵋(싘Y-}hO~>'>1|ԯiVg  u1P:rFKR"S<;v\4lRJUC=^|#yp~-'xns|V +,%$W_eX1}JcL40 &qb 1FVȜϲ4j*|I};Pr&4+˼gqlV]1Q8l8h_!v7?V)^-_僟/y_70~Av f )1 =GG/ѵm OČ [R(8 ÈsvLIZCa@=gR9]氥X]?>@5Fq@l%)HO>@DܓJvEaz8 #{iCtZtNeY %N^Z@6kݮjP:8&X_ɪ~nv}F:`4*6h[9pb 4!ȒsDKglSL}!<4&^nbhak&ϻ: @wyXI(9>>ٕ؛v$ơhhYdL?Mn fHPJVDk񃦞( Ezݲuxݐk{4// 1\\S^'Ϣp]pUyݽq* | lk5._|,J)F^VU J2.A9ˍLvmN-mۂ vB%p\ljFTTPT%}+|H"1n2>d#NK^{[ofjaؽfXv%gciୢ( m&5, 1I$CEQakS #:|(cxp|Ja4u4m+uVu\߄=Sc`gwP,)F.(l!v8R$DN]9[~虂r}Me4MūD3K?`s|{8{͹taBWƘɚJSV5$- ?.9cuH#Qh~3|wnr}>s>k\uy;zzFHպeiu- SnJĎ0Rq`g\r~v,*w;yƟw[׾ux+&EY7=2r p)U u쀫oE4J)4Q4Gi !rY[}l{vvECm )%9mǺ: _vkHkOLF =3;"?3_2_ ۢ*XjV+6MC5u]aJK+G8Rs&X>;;|&c6+fUOb,Δo[DU_CUWMdǝ(@z?!)5ԕ |VELI4a +(\q) p'yaPBQ!W>OwVƕ,sVs拥 =^M-Ϗt8s{pzCNDM~$ ;m]dZ-۔)x5C u'M t3v sf9C?f? rYsZٴZIUb=[Yag;ZoQe6'?}3%[k/>sS^o9'm{& w@ͅEQ(? *ʺ-چgV,I[}+kW8'?[X^~e4@6t DmQSJ㬣٬I$u+o_s_5~]U:?7{ cvMJq} crrsn5|˿ o}׿]f/ rTJ,}Z+rj1YVu8M&fjqa#>&65)˧Iz(HZgA6bS:&V3S0)Q4&A]FS+qpN]2 >m !~dqhkxzC餤-n(pyo,b'rw9{|lqL)ɢm%:E `Z'.<*_*5a:%pI:LӸX(7Tl߻wO66rr%m>Ԯ.gt 7/ÿO0&Fj;nz~#nc9~hahaYRT{[d2oop6gݘDobh- mmnգ8B˽=)+2ǡ*8TeI]h;ql}8XWl$ŝp{ iv2I;"Fb b1~Nr)z>)z0QS&ja]=rp +Y*ivV JUѤ ??k^{W"W۷xp}|>>WR8=~oEb}Jš!PIUѐ5~זAX Z's14x8KK'qM `,iK‘8>Kv\nIz}c1nw;},Md gN͎1<6fiJ;=CN"s;)=Q]ӰUSJQU3 ]08zO|W}Z~M~)_|8oŷNw MrOΏ9S'}r~?!W ]s,8)0N#e);Szv'pOgُ}Yqdsv.}-^|[QqX,LG)闗k߾*F W:^d S/ ylb$ Bo[ \YqrvNƈNuʔC }KdXҲkH&ۣ)^n6-Gsʝgs5a #eQWer×w ͼO>·LukuΧymhP}Ei&YXxQ$ "DUUvI)R@,pe8(!q_T7\]5t=uj @7ƼVEYxT\]? pU;,mٜ,seBoE{K6T}QUb!*i4pMA!b`[ zh? eoD9G/ÿGS'AS`<-a@]׿~f͝w~̝w[?{x_f}˗o6xĸ\,ngMuUiЎb lr4L!P 狹/ֺ ,lN5_Z_i4 8[P-3 Q(3na[O8M~ y/vUq oTDim:| XKUa!G(,Im%IStX'>{RV[} !\fd٪a>0EJh+6 !r'?l~W_2Lc9TIXnxp r2'̉lFi(JXJ5GJ;yf۷b|yTb\z|e 4M˲|?|igto"6U,HcTi9_)ÏI [kbﻖl6$&|Q+%iԕ$4QEv6 Z}Xni1d["_;"o|cGqyx<<<_q?ko0?|MǶ]Mh H9ٰ(4NT(楤:8X'y菬W;4,$P,ٌi2UK\Z EQ) 8g98gu.} ľuoaXH z9>FP$' btBx>DB.ga聭Mr$)hЅWcPڢP9/b` TJ#{|JզE)b/ɗ2?|?&7iH)q|i0麞DB+M {J[ИչhTu fpxx69S5)F_wF ɉ8տ~|d^n4>ip'niǗ]a/ ykm%`H_\5k\$::ycbG AY]ҜI ipc􄺞r-3\%l~LPf3gX0 cPsHWX7oWe7b6@ۏ<6%Fv6")jݐªe_CJ?}| ѿ?:|/~?7ATcf;9 NpΑbOEĭnE}$_u-@YS}/mDCEХ ,e!@?NHVLÈIyaӡ,l-%%X5bH$ev8L_ݿ_q~~ٝw_/WTmT}߳WgrvC$8\s *cج״cD/%v"<Ε]Q<:&بoUۧzAa- !>Z%Zk6Җ .)p~~͖նx$=]d3V+BLI|tn4j8<%=lMZT aMi-Ui)0Wh?o>R Yr,ٜ"Z3Gh:B/ u(ាmJ{S˜ouqUݚ[$6p||L4mѿE*q τ x${4Ms/1{|p*Jo__kMw~̕pk[A1R.+B [mYZc˩* )qN 6A8Q+/yɛ< )J,x@"%(V$GI@$(FX6 RU/2o㚇ougSۮ)-מ{7d䡴XVZT*^Z1]gEȣ,K u6p $$ M?C7}ZK 2b(D]bC3Yk1,K1ɮ|!!Ŕ nE"q0O3xezO]X mVT?CxK/{P缛|p1;,2TUE"TbBk{JEm?En'ksXYʅA{rłq\NOcl6Nm}?oo- !<>H%=2Ml0v% O X/SvOB{ *")ED%UP[.Ѧ x'h꒐Ɣ:NvE-%l1v?tM+{]WƏ+_Q>m$@>|EG臉4 c2ʪ<*$ѵ !Ȅ&&k)P͊pV^^e*J@k+|˿Xkږ/?bq z>+?R:(qB,8>V4-Pca)ZKEhGb8.uU3MRG^:W~AWU0J)x'V13RG;J._{$WeuCqUtV\Ne,j**1a'A솵$5n!xiURb-E!K$(b ? O}226 xϣ?' l,$l-1ZZMUUf(c"M]%1( zb"[0ϳ Tonl6ct[_7"|K}]x-i!Ƹ7,_|[wSxf2`Q[jԭ8-(pm(B@q^_KZmC6˿z(LS Ȳ(AZ/sV@Y|~??{)Hb IDATK+8̈́(xU2ؑ}?#HbX;wfL61m{n8JCr<3e!Ԧ,HJ,rVLX1σ,!o6^Oف~f\ffhۖkEЧ(ˣ-oӕ{VW"+ B9dX|c9lPR0M#g\]]gʡnj3I &1Dlf0ӌ: ̙bCDՊ<[QЌ.{)~O׶D-~dռ'??/{X <~8O6OwTeC?[UP|$;ʲ|&$1Ovf^|^ITuqu5?S$Ç__]`<U:>Akömϼ=I]]̀Njy!x4qGV:y,d&Y~V([| -r'%HZu PGz+w^z|os?c|/|[ CBlEeg"bw e`Licbijh α`g;'j"{c\]mX 4 ͎]aGNxrqAZt˂ߓcg=)%Śqi~(JEmw8'gL!!jr{YZ. ${SZBhꆢ8j5bQ7()#d܂ v-MSm^.h&)'RX;2 =̳0\("QYkEY(U8pR'/ﻖJ)_(?/XT#(1I_~$D%:|$e(fvEJRǦRbzˬs`z ˊ3aj郎>RJm \n`!ENZ} )B ( 8PJS Bcb9&kmPJՂkDiLRe%R1jB`FV1 `(GkŜ-Byǝ1U]3 31 JeN&-PJT8qqЋLvB =OӔu$NkgRJx'̢H"Z1 qp!%/,E\=yb@b3Z0S1 "&W$]n5ZgI)JGMIS^"<n_]oOۋEЋp};(lPFiBpx_XvP6q~~0 M N\5{ц }eE% >}Y wס  (E"ˢggl=a""@E#} r="av$;,)L5*)6ӖTk#FC6WTuCg|"x'#ԙ=YBmI1d%pg8^ƁpE`F c0XI|VD%KeOG=)XDȊ"^[+= Z\E@%f֜S̆@$kVFYJRi$=WWGfJQ֒E#DӴB4B Eg_iqqqb'$ж-)%lZRҘv'?_z4ܘx{>5Gꔶmp}0YЊGIڦAGis `h;Ϥq\bI? ǞmS|DOdwao*]MI`$NחUg*ˣ,-O.6"ӴTUd6{6,W+9b!b),M0=hE^[\]]a;Y"sҭeyڝXZ4!zvq(FLz+ 64m{ցnXg5m;'௮[eJO5E^zUVY.:V`\)JCO)\x(r0%س\cVKxQFS݌C].>:^U^82EIT ؕV$NOTeu>p~~Q n$G4eݡƅ Jmv>: z1]ˆTsqHBt*݆uNj %\_K,:QĆ) ZHK>| J^-)Bf1WHZVR5Ȭ4 Ð)͟r0'~;{yWx퍏rE|h#07cq 0LzG$XVEl7hclPZ^֊3Pc? =D{7tsT RTJ- q݀o>kUT\^]Sڔ\o6TuJLh`.$sًkThJO.hKOQ$#qw}5SJ42⬸9E=H|!a'j PV $nreYblntMCSW=o*Q0 {łv<V,;{1 Fv*Q%:'OhFYd(4F+dq*;a@-UUK(E\]]65sߟf>яn(R0cTa늮]@vUkٲ蚚zz,+1:ad6%M>՗g$mSm!u}@,WWp R6cg->$\ CaK8 .Rdt!TyΔ;Ca4E%Ұ ;*DPnOQ:{"%UHiʪdr ~ z'scP)Q ZAS7FhԵ髊g%OX.a%|7AUMpN98D7vK?M04uIY.=h-md1 {?CB`i)#(t]&-ڟ`-n2Xb4rߥ>aѶ~k[Pyp>!AR$V"uӰ*@v :$x9N틧vqp2L4[w|go/ι|&ˮeYt- Ès*@64H+uf%Msɢ#h*>VD>%j[ 8;/Bj\Qd^7{oJ [ߖ ~⬤xNq< #vh꒔c^Z㭔u4LlZ4-;Nroz{?gk~Dw $2~lnb;ѱ~bb\dZLvKH2iC"!ɵYˊ&S؀c"sskc&~̠:+cPZv)cfh}uw,pV2e?3¨$xoegBRE8͐ґz#GJ,!gމqJA8z!F]׸hxY~gOyʲ .$ҏ3M`3xq) 1*"s,g'' u"I$$<o-(2 Ytfk(r2űb&BRd=}'=N™Īk[C)a"0qyDǘH,)ہX, ӈAƄ"TW`v,)4ɘFNZ"9a*KC.C tVZRb)c00ϲlyRrIs(zmWdyeX,:4 W?BX (NJc(r8}8W˜4D^yp8Z::qSZpUuiJ 4fVqIZpXeB:3$Dr>Ҷb$-(a l"c'L뤒EYr@[, 4(.*4,(M%JAU쇞q麖jr=(?}#os_؀GoSLb!dO/SȘ+q =NWR lJU634]xGfy/[_ÿwٛ냺]`ożUpkZkm@A .fQ(%;[BQ0NE)nZ( e#}i-aS0yR,  zrRW++{wٌS>m?Ph)Jيﺏ$`& cjb yzYbL<+ b4ArEćH b^TW(-(`3eՆP 6-u] LxT;ȾΓ͂!eG*9 1fTiڶ!F] qPn3hQu4BtVA0!D|pY.e vX9N#(uHG]i*J-B˸JbgydXC@^䶫'DOJ=We c5u}B]ʺ`1[HdIba Rmĥ2DR1;MM<޽ꫯr{<<~~O/ß~Y/nS!}>d<{|:w=ιYfxZ{/&wnkKTcpECd2J_¥2d4{-Ng!r)91Ilo'}P҂,f~I%q(Y,G"]d[Xbn}/meN=̙c@WkSH [ o}g,:m >m[VK~;y5yĜ̇kPh-b4wrLq AUJ T:O*a#!+* PԼwhEhoEa ۡ5a%%eQPM!(žﳨQ+t-S@Ru+;ꐄ>z;1q 038ck,ڎiϑE<<5z2w{4_phM.)ib ġ(r 􌔴:4;bTh-sAC\9oZ]s?2F)R8;ӴM˘yLĔF+bA @pU vEi(K $V˕ ۶e\@<̧JbX|Swşy< '྄=nViwwQkh7)~Zb;V{u-"މ4@UZ3LS^,5eUwHz5k[B.x qUW.RHS׹\.yCi8OlS/~n80$iiZHQ4 Cf=jZL;1܊h-yǁy2g[x..7(%Ruq0"G,Hp<(-BGFďP]|:4O"BBX8 jr1F.//?xiGP 1_rQ bHY&ZrTV"ܒ(њy2⬨:92G|+'o~hF$cᦔ`(YyL)#)cȱp,U=~Ib^\n/w>x _kkwc O}?w:v"pZ  xen/%є<d> #0]W^*[>O2in'} >ϲljq1FTRJsU<[lfKDyfVDUQ`"`2Q8Q~0JvJ\*ѫ; @\b̥߄%Ns__vRF*٭e~Wu>S(/*W f=~#eY,4bRTU1O1ڮ=z/K iѐEe fЕu-rb"m=y++iBk1Xte\fY~2B3{34P#ucsFv~eXNŇȔ 6 uYKle4y%87Kiq^ L5ΊS4MGY@)Kja{,c8HBG%&i[8 W+fJQ*~bQד@ 42˥JpH{4(T_"_KnD`iu"4w"\T␫FE!t1'>c,n``-'_G7C`E#U/@H":ca*:n HLr4Đr,^ql )LQdg%J)}{Ѻ#K>ifXQ,-^vm1 8ϺFAkǖhH6/Ill#[# Z,e"M6 Rzzb}rBBcTlLI,iH)Ͽi >S%m[cr9|-a3rZ TY q( A ?!Q%cEr%!)L\QVd1b?I)u-.ǁhV噁̹WYJ%%|E*K4 ;YTJk$ %#M}:Zq:A0J,u]'ʄYoav"MRvGr0 = FցRRjێjXhjo|,O^ZY-aq+JhʂLL hQ0H̚d魧.x61HJfݴ)[w.FӟN|qt*h}/7@ޮ,^&4F+;nqɢLz[7\nՋGY̡ź+b`bѶ$6{a,KW?*;Y`U197wb>B=bT- xpmsQJVumfÖ;:',)˒hIhف^]^V$80Zb"s1(8V gh2бPҊhO.f&q/L)88"E+QT _}Uy'nsGKaa4BJcQ3@*p+EMSDk((R%eYPWUܦO㐩E!BC.SĜs pTz||q!=nwL+Im2PP5nāIZ-Ey(Z yqj%!ֆiq*ȫ8b7_{s~w~(.x>|vh'Tʶigw^γ;XjG!1BI,Bmn91)JYFV84&Se2u\߲lrTgȎt$,YV̾+uDan3:~Xsɦ+)?e5Lӌ%)2Dn߳{B) R|ZQ,+.Xh%eveFtaii;19Pv&c8AeĔQwina{\|)~bYJ.%}?*>b l[<,KEU =U]>C< [HRb33}Ϯ"[W$fkj>*.Y`vVdSzE垧)>IR$x( gNB{(ћ$HcO~{?^t|-UiXu.8YŶYlgR'2cqhDI)FbacD4HEvu <'྄=wn1 }V:x˪HhepJD{=ъEgITQV+0$j[,eDhcZ@Ee'1 ]鏢d'YV.qt䭷ޖeI`67MCQNOx1>F2F338cPu,޻huI(2@&FHQӢ ^L״a2eC#JE]8$8$FEY=>EEbWlgith!n`Y]M8B!>Yc<ɋBU)gq&N+zm|NjB61Z?w$~:Оrrr"ib&q9ȓ2A|8(%; 9&?mXu݈%6"L~rq}y7Am%}&>94pƮ,^by/b31 CQxmS<8;?E)P2Tmt>M `Wx)(| nᜓa`NV L0M^x g&1Z+##!i`eNrE x1W0Ϲm[hPU3ZSY( \B9KH Ez#̂@46q:r*0j2DoJL@^6;PPP03rQuCꟵWԂ`f~eC884⭠%-+om+DA gNpaG"qhZʬ \T'-Ą)4S*^68esf,T\P)(T~^xųТ9_(,I8.i7Z{&Za4E$=# &WYօ43|^5Wg{ öak~v/[)07u[C^)TH9"3qZY֢Acĺ|nOP8ga8 H2sw(E]((U ~8ͫž8-EU~yϤy AJ e,|hZ0M4XEIBQZuXD*Y(x~.D5w]qbDJM]abFX(vȸR#i@tX& 9lhu+K] 9k il~D) QOS8LS6d(,wbӬb@ف; m5iZ)/h@aa&b/%Z sGCǞcaRBJU]cr#iDQDRqD h ipRЉk0KGc'|d=8`,|}MP@#3oLxU2yd 4@˚A X~FZfǦ&t٢9|{Ǜ/b@go>箟W9xGUrATz YT.{S70RrZjh| GT1Ml< 4۹ZIq8dh3(C5̻6~UB[?7P R2Z)bӲZ MсQՍ]gDd apX~9K9#g ,I;s'&rZZuӐ63M\0/|MC7=HYdkG!;Z'gd50G*Yg6JZ K$FI [ xFKM]ɿǖn N P.r`NhYU]kTuqBxD8\?F{+"ŊSVjYgs_ ی>ק ߄SP*}jx pǗ45 0α5xW{Dn~g XEqsvwi~0ĵ*m7 ΑfXDw=| KfJE)J*H! `.ʨՆ6Āv%a54&3qޣvޠ56~:okJu0 o pwoQm RRUR8iyv;nlv@X@iróĸ!_ʋ!a#DND@3D6JQȁs71'̲V <#?z{8P׋/#=FlqR̖INN(;"$D4quv@J)QyJu-mZNOOaqQؔ"Y) kY hY -0bf88L35%Ed gقsOC)JMZ_bD8㇨+(AuUHEI1UUUg;a$ulPӄ$QPa]VwiVP L t6+CD`qZάq4ϫ"XD*akvxEP9 $`,* k1E(ʼ v+k#= F*mu<7]?E|'>]Rw+JOs߆smd,xb :'pj8󵒜-d]Pz2?oߢnZheD^njVu%kYS *j%|e Bb5#T,c46J#C`w z'P6?;\\^- 5i56R0L.V"gښB/>@ uv匘3i[ӈL#B 0j܏ x</adIC]8?!Zn*4톳 [GD%Tnԫ4xp~*mm[FЏ#PAre\"ii›~gߧA~o[۞oy| P(^ϫFp: ]*o8 U-,l8(mӺuRSIsqo-(vU;=Z954TCA~~~yTJE/y%  ;_\0sM"0ZBnx_:RH8 `~((qQm]9P NONm {μE* 8~=O30pq8M?@)'H, 1 ;d 059bNX#21QV!#z$PHn3982b[ _@l1Jh~{LӸJBO%_82Rm-kh)D|_ |{1kOk@0Zi CǤ@T\bQXW(3}}M(`j_)~;O^?~Ǐoz]i7anvq{3Xb@ h˲ܹ%fn䙕8b[BCdҞyªF(9<N<]g/^i*(Xmquu/_@i7-۶9c{|K?E~v]C)>EQaE]mrVɖ>JϠiedO~a|%F? 95Na sNzLܘכRe"TDd2-˘9GRk(v]_%~PpjaL8G@z2JB0`$IFL@,Jx䄜# u1a0)hc/|Ei1ShsM Un V}O>3hRVl4b)MN5IrKb iE ?iIcBǜgm PDoɨUUE|!g: Q|@y͟$8㳻TI'! wn{ǫVoAJ{ F-ꆆ5fSw4-60bT+pP Ju"vfS`9/EjPϠ:4k0}Nz)R"w.@nֹn4$(3Jl}+(4MU-|f0 =bJ4QX:[<|ps+OcS߁Rll~0ǀn1͇(@7u hݖ@+>x1}8NV9c00LFE)nUywúa/ C/n3NϠֵXm Ri?B]9CIyVK&0ZRƵ8*c,6 X9X4-c-~/B@]!Xl1Mg={O0ŇOL&ײZcX@I%"h 92U{QuNbAi۶R(Xs6IUt\{|_%܎5?S׏"]Zkͯu#M:h5A1Xgӌf|yKVzBƬAN8$oB.+@C #gvhp |ӓ1t !Eym7[aD=4oEӌnv7 a%("Oq󈁊Z`B1>w;=ř0D)/^Pq ¢U]#$X0vIN#&0bEMۮY@Lh?#ZSG?_K]>|0Za6m_`%r|U0b4<8\i8O.GyRLjlw ]mcM$[i9x}]mE[^wU Ġ&7!TSyƘh)Ҷ jqpVMmSBWWDV/Xi wPt=AzB@h+tlϧ$Tk7 ,\L г'D q498a}yд\] sl7bh2 ?a<>C%s!̤NJkC553]آ$Da g .20q\w''k؉_Qn5sP^ 9MM։2&IbVT5cӶtD|}/-|9PwbFhV5q+h;_cjQ0d?Y BUU͵8ˊ}48Z g1Irwm*F%cJ9m0x|},r?={v@np? %MJ7Sw#J, ^CUTw\&8nxdeU8N39j#ʩa)ƑݝB!ie1& Jӫ9ad_c/;GuF< % h8XY:݌ë(nT׸qz!5ˮ%Qq4EbUl ~ |{ӌѨp`'eXQU R$vg@~Sʀ77ycG~ٴR C#q4җ?x!7>7}N{|+_Epk3w>=ToK n&e{yo:#|aJicRJy%{h4mn(6-|}5JIaL_amM+Jl~,$( nȫQ7;P Έ%v [*U]怮)q~G1MAdG4uC Xiq,T)E”F+B;)'\8̈G$<@r}1CY,qs 3xۗqqy9 ӄQWNq1Q2F`KhR^gBɐ8XG6J5;b(UzzXS nؽ?;^~QWFP46톸q8q8vPš4bL:xdhM- /0Ohj(WR&6Ib <㝟}Oxsmj'(19jMP pp81,IRhe)b8v_5N3:rÇw ),:s7?^i) x#7߼x(<-RVrNv;΂BNOhm;5۷ҝs>r?u4}bi5F; e U塍mH ^)lk&JB8idƷZiaE/""nKXF>v x[K (;91C8; Yu M;8(z80E9U-;U 92Y )0ZzuaK1z=V(EPA1"{cסG&"L2Jyv'P`  c|7[8mȡ~s?^R7w޴J nGWL a<ܤ:lI5++ĈKV"OKk[a`nwNtˢඨP]jy ha/DX^s)O;X%Z< zݣGD?@[3{s`VA+^ƖsY\2q@\gk9،- yDCh0 =B1O#Vo<?_txo_=7̃$tB)E,"4 aȈJ~Z)8(e50ˋWq(D𾂯 f#zJn ټvy}/~!R eŔVj,DGv';&8h-DPZ[98ᄌ{~umw$|]w<۾U2dJ!r?8إqNpOqrzs&]ъg~q$YK{\;9gÈ+햎}Ρja)Lp oUQUgg)ȿ0iwA)شXj.q(#b)62|]A;+H_ŝRd' %qu8۴qF b2呷g7z^x#xP9&zץbL{4n8^m&,cS±;"R`RJC9/ )ƈ}}mG3|61~`q !\?_7*Xu࿍GrYc0vP bJ\x,*iB)jgK!|}߯{4-J)І0/it+H^ Ƈa}ӻHD`^_6m+ }ϖ#mhmaɰjjҾ"X+#pQϝpL iJ4S"m6H1#~fZ]!{ À0К:)?vimCFyu]'q6~@G`w> qzXA]w@Lf1΋eL3 MPTSFqw?E;jL#PI{#J*۟>W@d=cDGL z Qh 2hS mxNHAIH)/8|i rJF;X1]l0 |ZjMbUWPYKS (|W+A#H1aF }_UQ-k#)B\x(phEzN1D |4w2w7+^+K}AhZY)X_ ؏v{ơPrBJ+X\^]!i!H7ܶx #s ƑګAms8;;y|\M>sקpznvV*`÷i6m]q1xk^eFcf È!?q(#si%٠sJl{vg(EAh; lgEws?GpY^ޛHjVI!DVY H/84-r.ĤUVҚ0XmD<8;=BΘ#3EbWr(n}%s*ֵRaw8/yOMSꖳ }ιa*2~yq5MsDZJ %&`)(ǻ0f +?~~KjC:0BPdMcsN)㸮9,&|%Xsr; )eb ]NanG=~u@ׯ۰Gx]U7|9MppI@]e4NaJ E!d\*a|mj4GXqN^;pGιS09h@)T{% XUM-:T)}[GZd&2 l(7N3Z 8Ծ5]g$u88^ ԋ{rKyeɬmh}U# -;.MKe4#-Eqx&p~E-2u؋P"_589ck"N?|uURn@) C'r('Rh~Lb\8Q8&a/aġg̘ +E!Ą9f=Wwu&\|ij?(4)dBPcq Ρ2'*YmPJLi$!b0#DvJg;xO9Ld9X񈒉 hQ0>U ~y&4uCe|7(1αhb՚es*5{3r^}9|_~ ]g~:=y7~1pS 돯vH~?X~o>6HHWUZOdʕc9M(\2GrIDmXKҊHjlw'4j*zomۍ...G|Mpv/>94)1("n`(M9DÄ0̄v$n+yp<chVZh^Jˎ)'QڳlZ]ܔR(Q u;ǦfB΂R40ʉPK| ^QPֵ`NXfM&5#A#qx81BD4xl)w=I Lk-40GTP`r2kR?-|]8kفW 3b:mX5Dk%}w-D"rJD9T?6*<#- ^ 篯 ^qFdMhچV@ñ88?? VToV祔UWM77oi4B):h9`4Ewg'0J#.#\x6 nBk=ںA= ק@l6 M!¶m8ez]5\g dēBɁR@F BдTГ0 ۶zF1gmwk/?ɧ~w^Y|W>كyl[S,]ݼyP-(b5֓FRpbGe?z Ua IDAT *./ej--M(`AQTFzDJJ)"D8,T'\FC*ˋ0iЗW G$pcHBT)R會52KCH}r΍8=9! c) o4Vya?!2ƾՂez=PBJj%HUJp!rh{+.1ёpΘH}?}N@}GǏcr]%a۝8DCa)ypF!BYGNN`8)FXqx7oܤ8]ҚAy aRբѻEe_$`nŀOhBAH1kwpv8ؒ`mMBr,r(ե5K ȁdW%ʪjhB$cfU¸7vPp~d mӢd}DX< oHI?mo=2W 8wj}s\~pյoHUtxEṔUYhM)lEFq޵Rl5LkB7x!"shS9Xf?hNR(Y+NeÙł7cƯVZ"8888{ 02ٽk 4MڦvvK,Iwx >y ѣK QczQ (J)JF$8$Pb8]sAӎ&fUWaжSH08ƐBZoՊ䢕08d q0iCt݀ma,fA7:@|&!ʠ:0wk?W3 _W});&B#b&␩Ds<SAXHE[.x\Ӛk8<<@1x ~I!QR%8s)#GcJE"UPH-ʫv{p!eѸڟ(/x_dv_5o pn ˧O+םt']35G0s_shMH[hLdjE'1%0}BdNlIG+u,vvC(RJ1OA*(ԧJQH(cma{ }G}FV}ˈrI #9W^%$B 7-Z)f5H$&box"\fm7dȕR#zV+9m{b:MJ;!9*VłuC~%E "HR)DG@qPF#C"('ā %CM m-VeRA W% yYqX. T%^YnQ,c+T_W}9؞#^_ZSS  !D\r$ruIJ]_Jqn^~v5ZRy {_#2qx1LAn:*ز@Y^i3yOɎa 5F]װ!j8(9&Gç#j=CŢ&{>혢@4*'7c"౨P%n`-8XMѣGHB"贶|/@q ׾j)!U=s'TC? z@}סfa&0#~-6 <8wHlxqp@qbm}^?YV{Ĕ.V/ ĶpW{G~?Oq爝'8W[׈bu[I[ 9g,KO`R7XjC*Xk,KHH)CmP517oLx)D y@QXǞAhYއ{#[\%uWݷ+4ܽ2៫|F+6 BVzRXɧ[">F %#=yR8grR0h۶#.z/Ģ>FFK/ArR9aX*ɕ*KTU*ж- o΍(-Xb!Pg`b)ϨcF0%G !@= cqrf `f]&8h5N8V, l]AjjΌp m6h͗,%3ҐS^|Ft]p<9. TeʺBY[TuIҚ!fa?㠍15R{#lar83r>Dۓp@L&0X@384Gn7/'L#w^ţO n"J0 TEtd)¢3=KBńqޱEppA];V'e KW29O;?eFS__wپuxH7 N= >¢a {zc:-XcH}{uQ?ME:'?2*`~zIkcfs5R"<ڄ#~dl\/(0@*` oVU @)!LXH3ٿ !Q%arҟ.7)O1zTeA%f(͖zF[[ '"G"8D& `mcr"*Ȃ=Pʙ8zeP 30 aPb1W"&EkxO=׌8K*. Fcp> eQfuB^H`"@^Zq d!FAUYC+i@N1jZ q0ֲ5$&g]@L.D4iOOPm g t^W?3qup0:,!3 (œ>ǂ%b"3"= 6G``,`D;veftΣMpi1m߉?^\}§೿mtVg习%{䔹]$4OXKbHz!$vc@ӴND\S'U|&=е=K(UU8o,BY PPtq { -*87BpHx7ȈfEi_NaT?ab{?PO3@'>%N\=c(>9% ^a?{81dj؍C b1!g8p QT"L? KpΑ#cQJo:),ucƒG( EaA˹N3C?P8;" @sʁk1Ҡ@ CON-b0¡D@$.# $%|$~Sd]tug4.?}?L؃KNݾ;C{_ ;ǫSᇆOT6 9kǛ=- rՊ}7BICɊԶB;fgN2@Rҙ|G khN U JIآ eY3_)x?7}mm< UU^p>O8? pU+@k מi5L93y%:;G ,瀳 F n6 Y䃫偋$F$T>v$"2Ai %Mx'u)KUUڥX"h*!XP*9'O IHuUAIEb7$f\M}ҁB888D J+9czC4"vC@ز$LB2`, e>ĸJj%A~Zc88Łs1rFP)9ŁīHgQ/ !KchfoN˿k l>o`xO|cƢk))) |s}]9}2mxN]G> ƈr!4'AYV6q%-yme]?Ȥbn rLd O:^\6}xcDZ1nO ~ſ_2O) 6@)46y>&IL\Z賓v&mn`I7$,lb$g~~UW|"o )T#˻ A_5bGnzZkt}c  6ԣNs 9|\L KjI 8f}!#!%jSFEutUY"vKG]C+q2rCt-UGB}vCkh ޏPU !qDmfjE4ɀ%&V/xHHt=2iM- }!$S/j:zZQ ҆h8D>jrz>ff碮Z.QW2AhkEq f%?Ԓ),ޣ(vk08#!lK8Yo?/o~0#a\Nm5=q|W~ 99 }ڧWڇo|uiy >,(nȦX136睵bh%$..M!KM*eUAHG'kl׽aA}O/k<6ޮL/vpuwuK'K6}v^u:H%^9glۖNց6j@ L'cmc²,X,"ysOM)9ѣG$=rX.G]888$LTF1 =+R\vAmRѴ Q%Krɿ{7C?k{ZC[ c t-Yjg~:$񔻶C۶[mR} Uja$@ U^V( r  8 Уf, IrV=c/hTZQA Ez uhJhsX0=od*$#aiƁ̀LYb>gS+T6' IDATX~u=|#caMΔϾ@ RkMΘ>yC]פD8 T2JbZBjC5:qn[ 7~r˙p6kh_(oK04BCe4ɗdź~RWT-J>P]׳wX@Hy>'V+{ l_XzT6UJ51S0_8Y+ո\#x/@}g}eŊcɀsAUUOʇ3:~)bb]?Idbss,D(>zSԸy[nٞ"șԹV*,}' J)S{2Ot4$ךg&ڶ#nyΰ,%%$q@ !T8=ֱvB HFit]#'b^A~Aa9I)#H0 d)#c R8Rj$dq^={bޜ`m DUTq8=;V 7n̸/Sf=!2!q@ѭ8 -0:eYaPVB׏R`'JRKC+C !0:ơgy%_CqZR*'H^ RdDVSsB 8lu/5޸}R BI1$<|G&Y?Hѣ?,G簸n˛/## ,Hy6W}"|,JRzdج9'qxN]m)CkPea^HfCt܃CW?s[QP֭[_[cګ ToZ58v7eI/8HQ6Lm:H>hJrњ]1J2o9"2Nk);6q( hH~n<5s5 爔]E"T(XVTFdIt*%& (,Q-rjr{CxI_6I9+4] ? 9+X,jgk56p@'nVb9Z~I0mR%(LL ж-̓IټB eLL ! gFGhmA=]?;+L:!.(H2p겆VJ %?M$Mǒ"'B):adFrI-q@Yhnt8K__*+i @;(n>Oocq^_"la\wO\'(36͈EXV݈e]cq; R#%Gkf]ym@(nH[(0xa ~̟n=::zߵo3=`n|*}T ]@/`omv~݄" %6J E 1&u7~ ]ϲ1Qi7R5(Z!Fq^09QYK˲D)mQ t]Ig}X`ˉG;ֻNR8tI5MD%GEvrBg d~=WUE)^@&e:$[ qb!+F{<¦ cQ()ɜ'eWFqh5dKb(>appu]XC:Cg`-Ѧʲ8䌶k5 BX)lmZFLX؋|$H}QHJ 22QqNc-`,U|* ΏjK !) !͛Gn70>YFBDe$UῌO_?{ ޹;FǟŸ=f`s`_ezW/j U|JCJ )Ьy@ 1c0qb (z MΑ4'RA 1û %>ZS,[|;<weu{${ˀW/ ^5%@ 4\&{_hSLH1:N5/)1җ0G7nF*(ـ', B 1c4@y^Lס]\ t:^m,@HGQZ ^+5Mf3 lAU7aN$d,6MM(7g'!f}Yq6ə(;m;@*\'b ڬD|Q%,$d'g8996sݍ#$o,֒i);I:7-Rʰ@tmbHH0#rI,Q5PZ`Tw~8̽'1mۡ:`&iaѡ{eYFRUcʤmC\tOqRBiK qA' /n O$2B`aL>xl7DF7@nf;at(%&bAi8 nfg z;`;@Ưc84E@0|J TedeZ@s¹aƵTYgwmRB<6%`)ЏԳXz˴퓅%}=u))? {>龱 {fEQint|"]锊hTe f>`{޼ VNNa-y%QjP% BT办롤Ļ^z96``Gl6[>:$UJ4}xx g5d[k5R sovFd$ 66S;D fяZ INwXѡbRk CaJY@(eIR$,99NNw b̏ǁei>8cYlG_D1&kÈvCX9()T_CIE.J eY_VkD ֆba8Oq ;Y:AB+IfșdzXTq }atH,$t>dlzun4}@?&?·C:y>0%^zuT'Uv^~'.MǽkS@Ҝ0|vH)Ѽ0 ?'v<-wu'!EQ0?=a.>v7yO1 ze@'*LS~H'JUU!Y,I?c E'7qt)EA-\p#gMۢZ: 1W!0)6{[H)a[%^Xo6,pG*8OIyЍS03O* 2ʲ,xHM@S/3=Ґ`muSz](YAВ%jU>)9%؂yDJ+jKc jg=E]a$ 4BICCUx cDVU5ǁ P)=Sn()HqXsB8 JB 'wcvJ$z]ٍ(ʂ6\ZH!0xGj[ ElMbt-n¢*.ן~~ 3f{)1g22ʢ@jPfXCs 2]M)}ןME8%^5bRt{熑Dn?8yk|_W[RW|s}Հ)sNWm{n{iՀ#NKwh9S9 7}B#g0@yx|n4]8 HTpޓS\ |(j%ʏ1UY`]:F(AY4N$;*7"bSdF2dbK0ZFDGVlaK,a{ AΘ y@=VK' 'kPXcRV1X@qX c6r[R3JE%v>p%b[ejSUhwVT9)8Y^^)C( k b$ZԫWZ2#Ak*hM-=X4Wq'gۆ0.1|o2Dޣ҉(Z-SBȒ0';{58mF6#6U-etn of5OfNOOL#?#7ւ@oup˰**`6cT`vͲ]v{'R C{E`m[ G貜ߤtyeZ"Ѫfj1KK:H 7-/ۖe-) J *:Q1 8 ?Tze2"2'DNB>dJ#$99qx!8]>F(F )g()A "RLXT$5' !XMLk 0c  yQ=  B!DYRRBӶEIqE(^@FqPR,ʔ %8D]INǶm"( L1"c PJ?x^ !"lǠQ5yj\Zs …8䔱+qDT-$YAգ$ ƃcpc$r8KRj -|~֏g?w_\GbrמS,R[! Ǟ)GQ>BYXZ[Fk{׾l/} 7~ɍ"(m `osUO4g1Fw^Q>6M=0 5X9M)V#ZUF8l6dt}O -kSBUॗnɊ+"gggd#l\.)Q9O!bdA!Uk3w+.y`ALM%mZ:ENw0sho$[]֒ KI'Xdʉ[8$0:r'eYBk)c g<8Ea˷CqB!@,52˰Nzԇ 1Dd61$y,28Y*S9, EG{l{7?vĝ5֝C3m!ctR3P?{5 -%&3͉X-\9_H^{{<|wܙ7R?Ї> #Tx¿],_ *{eMO-)Ug_u*@<:c+ꇀb@1U#TsDhNe ێn~1h'08@Ҭ`!%%9% 〦Km0 i=y:&I=E1yu38 8G g. Xk #j<IMXkX{ޣ+,x",@? ,PBZ0SІ {Ig@IMG%wB&JeB!=!ƈ^71a;qHt]URB Ȃ lTU!"YjS61z!7rbPuE A+@@2I Sc# ?k;!krRN %h] 'g6͈Ee!l۠0OJ;? |trTq#4UEלEvD՞9Ɓ:Z5f^ X;>1)'~'ɟ-\6J.`u=vNsXߗ\vߟu\19t0J;rf(,NfBlaY.vhB gtmDz[11K) 'e,vmE]N<qpBבAfFYxx}7`\@ D X.F* IDATt:g)qH8~CH8t=y)R"=ŢF) c;B]-DƑ1$4AI4۝$d&)YHtRW@X7X8>`": lo/_Y|l89#_D;:L'Ή)sB)mJ z0/8:e;~7Wخ6؏{/{Pmx+*O:ye^q.'$26trwӴdr: .`u8X,4 KkjSpttNNqf)&&:ȼmK&9RD(%$G@iE)!@tX5 -a$a`AY:w@7 TDTp`?,E*NB?h?ײ,;DUYJ)h@ ajɁ и4 ["ha"EbUbeeѿ{:ƍxUxx9v^[߷Ze&)kIAkUе-咲,N"g\v!!ソ|c {{<^sR!:CV9==e~Noxd|k}^]n7npzzڶAEژk[aʇUv ̤#IT;H;ءmvE.vh-;-;Gv!B9RVxdZ6,K/9ONq&ggS"Ũs6] ubO`:cNfCs"χRŶجM> dVZX?[:4Lcf~ݻwȮhxXgv⟋?|N@*yey<u]oE{\E$j9:}K6i4M-d}/@b7Lr 7}^TU%:Ey<z_[ZI*vdV=N^'(ڍ@׵u!&hmaIr$1=]} {)K8KS:סԕP0/R$A#>[l9]NijRkxяp ݵ@k6ar6YQ>atkn ;\j݁Lp.OYsv6eMqM1?;L]}ݏxWޢ( Jp}|x &4çOFßZ}w;ȣ + gqMomΟww{HgP#4q dTc *wuEeL|C$qyNQdxS4Cq&/oO=I>i;'8muɫ^/"cĨ,K|ak7ǒzn:ڦpxTsR+gu썴& oZJ^Ӵ(ȳ[?/w>~yoW9!?|~'̏P p{'Cd kS:ӹӣ{ts㳀?=m^0#M۾p[lPdAыiF%Zkyoa2結\ xxZiـhNowA \6u6`;/acT]D J+MƗR #LMFTv~aT .ƽ$dk=(C#"y&\Q)aoY{,'a˭&1v#$LC$V䇍1EA=ttm5knrzJeBV#]rU] Lxh0Xf%ݴuے%)*6YDІ,Q!(\[fw zFg9m->&8{p|4` _r;y;Ha<S5 iw Eem5dp}T:Q|A^$X0hsјz9yt{wO9]@n(Tip.Y;󄡻_*W vw4b,o}6Gsځ[mNk_iXkY.tµ 5ծ6*@)in}6d4 $^>\,ilH뜰!-z6IhDQ.FI+CӁiZTHam+x-u zp 9)BJ%&Is"v[q IJ HO#auB=}?i0>< xS}R0>I:ލ3:iO0|3VU+͉㓳MT֚ij=N>H6)_-["q51<^v$a>;%8֍~tKۥ2.pշ_J-_c sGƘU2=,mۤ?wy@DFi|6SdyziSfZ[-y2}#|gE u97֬%%cc턛^ iJm#bT$9ojιAixeFmې)1 5899C1$#fe9p0Y*EiLtpli錃.Egggm&J]UQ-}.nza"3|==mS5T')w16a[7 ;\`<χDgA|f\nC OkzNz<ݼGlpzZ$g<떰j0/M"d] 4z_~xG2vڿ[_g5E9g=y"F ymxұ_vMV{0Jd%:?DҢV-W赢A6AIr 9y\G4hcA+˥կ{ʢ;ф_K'5(J^%RD8^iNHYEoC\=Ԏ/99|=؋Slڔgbk[bP-d ]no ዑ_egv O!}hhoo \PZ`pY7cvOV՘$kȊ1脪QLώ&ϡ dEQR $&<}Z:sa`W37 -o0ʄtYGt6_/=]Q ڮe2SU#e1I$X,K!Mt]w9͉vuBhy8Ӈ!d7V/9FdfPi;\?y􏟥R%;v/zޮ߭Eޅδ}+nwMʲ+L%~`rKH# '9m!h+(% ndY RV2 7ؽ|',p1C:0R91FNNNI|Ab"Fq6GC5$B{kP(<ȿMvd`(Bz] M2ouEXEL3EZ3n}&)1g)۬NGO3,໙. (cB:!r%Q2:tr_i;di*4KR?6]̉nQPOUWx;s_9)tmrEd>plq$ƒS%mddK~'wN ke7%|/c]?{2@۶GI\SՂ 4||T%Y'rJM4SD rLgҔdJICJJ:w{bVAM`37mKYI|.,Q,@G,K6Qb>0HFrD,cd1Bĺ -]]GUU$o‘YJ׶T k':{/pgWhekS~~ў(L6Il8G5{@Gk%TGeM$3۰}O5y9! w蟑U\zw.kzahmvIg6C6IN}׹Xc̹u D$|s6'^c{׊WǞM綃'F5(mIc5IV2j390(M8^%> (m6,w="-QI6]Vd&l6-I GfL&#IJ\-QJϴ1]z{ +Nc[] |Z㽤Vkk֬!x@n9wV'MR"y)%!0>>nyQ_, 76C-b,9(e6 Kmt^@bE@f><'$;VW^sN]4zr!lk̉NiQ 8I7yG6œ8ݡx h;.૒ x2;v@[6䥭Wi}no{.~Z6༖Bc }D壡 5l7jLvRqs&IBZ 9Lч( k-e%*rZWJҷY4͛Lg9@ *ʮ.˩za2ȷjm7ȼJJ64MHӌDw`sSy.3,J@ "@Ckg7d2f:1r/D%ӟО|ur_ՉG|]1!{?>xow댯CZC$kVVjmײG,WBij}{T'0ý6/bfEhV0[죋}LOS-o~B$׸Ʒ)T;is={X,X,VE>h4<M/2' s%PQ9Mr]KMMX-*ƈwuBXgQ >9~W7.Nbٿ~{'ggg%u`=1{6?_ e\u8r n+bpss*8ƶ6`}ָfC]۰7S+rOZevsNCEM,"[kmq^Z>R*;8B6 }G&_}xߌ~WJIk?_^[^2^G}1Fۭbz .im^ݮJe0Wr*Go}64ݨԭV+>7@b_d*:'?&=_ryIx$ZDBQ.v]77 ]qj"\LCVGctUJeFLp=꺦ij1) aP IDATއa>CM2FT卯} Xk9cكsg\2G*;,هF}bu}G [|~|Ο,ϤUs1tƸN]\ ݞgg+ωs=_l~a}rO]eTJ6EIm"J W |ߣLROSi Kvj)|V:kicJ{,oo ?K/x3kk^py9}y,t]wx p]_ 1F1.%uMi=i*B0(EP%#*qS7F'RE&t]KG>D#Ƈ>v$J`]+`n֐9U#$E9x4b:@)Pz.b?aiIkTuEeԍҤIB=x,&1 U9Zc͒7{\"֤)_e%<@fvL=;{A{79|mK·fz Z۶"% =tYRJsb2;Эξ9{ k߆nd3k4AEzֶLB}ĞG5X",J{Ơ51ia YRտWo  e~𪎗)=._teo?] 9w{?o\\uq+`=+qsSU1y SJam~- qp ;'bF7԰kI^k;ȲDejA \F[(5?ΦZV4\$FES(iy>!NϦtΉf}j)QE!c7;M2{'ki٩wmEwv,n9Ҟ݃Cfz[?k>RM&gx)1BQ&8OQL&c1Yี1 YЊ,-0ϩ u PL3$@:$-EmB+o26=јhD{f#|cڳ;/etSړin%O#fFbn5;O~ އtMLv}lzdB{':D@H!+ωbF3|g62ӎ?[x4M[D=LSM&=-\GZ(kSUWI7v}Xs=EQ2*GXnocnO{:Rn9_F cwn+昦i6?gi\߷Ү$zi^Fjӡ0I<<>3[%Bk9NIB4U*r4gW(%1F]?쌲hiyטf$As"Rr16BX,(bjwI(jE9/hmB( 'Ij9O]Xk(G%siwY,Opdd"=ipv6%ReCCbpOy>_]s'[=VO?EF7(^:7޸Ji0ʹNJHP=H g:JZxUu#+̉'_yW==RP&آiFsl"$Us!IRxB夤Ln[yo?~[7 x5;> /p ЯVpAO.L2c;3p`Eb8:בS#׮J{l"i=bO#Ūi k,r1,r|ľuBrB#yA4%FhfHKk_Ӵ1ƐX;&,ˡ(bBE,#ᐒ̃ԃGeA AY7DNJB/"&ѐZAsm)B³{?vzR[^?y1Nn[`=T>,N9:{77`>RV{d*!xMP:@2-Y\iNwIq{szcԘdl(|#q[Ewvmț64];7e$*ѧYlXko~OkwnoR=^fy.HiiJspxcOK?-pQ@Z=&(U/Wͳi)˜~`8֒yis(i-mT!Av ^R1B!2D% ;VR̉iF׵4MK$(dyA׊КQpoo釺_!@+MIR y7PZ jx@s,( rxlN&ꗦ] h8'yQkvXC׵88=œu$I!Mt>& MӐ$x$D. Ǝz(TuQf-\M 6tm'HJqÿbuv9W-@xf'#)-tbOhSՌAk`t:_:$N)ij)aM`sbuxg~/52~7&6&' a%PIB2d MSk=$hRs vPn(z E R.{|?GZPh  W *w;@?''Um {@.F:ˠҊ"jrvkF4Ūq4 ДҊ,QJZU'뺧ω.|/F34BJ1*K[-` =t0{N;(EU58hFL(V@ s $G~vÿoN` s:^ecȻ}Mx<ܹ_~"n`{\v_+kA~r,Ʀg9u]l~o}Beb4~]7" zcxL8%$֍&3boo"@"$EmOkͲ]ĵk8=;V,+"VcPQ۶eZ #фГe9!6勲(hnM$ڑp>@eІ#Fj )'O@kHDRM99-YB -_pE߿M$ҹN?MBU7΃ZU,+4MJxfHzX RRuɬE1iꊦi)FVõ5?gc}{#owl6U.}Qݟs bFPCO6Q1.HY9X~`ucku(2\$UEZ];a'<=~׀?Fl^cv[wK蟷pw׿/l\=B8\e\D~W(#OI蚆4 go-n9/(k?0kYpOTD%Bzֆb>t w@=dXG  9q]G`|䄾'D0ZauuF#Z锽4ibZ\pg?>7㳍ͧ#)| O]Vk4ąUԵCS5hdco4=!4>;1JzBIBL9gu(>x009>|{뭷nJ:x92g=vئp\>! Omϫ > /Z)UU+q2æ©ꚦi؛Qjs>UݑfԼ A@Y\t)7ӶgdyJf̍4M]GTM""dZؾ+NimHd @Sy,0Zu^ĂM(rж"O<1F2B$Lg3bT$][3ɭ my nn@v[MȽPU7ױ5ʬ{?s+z~tr^oP3#Xf3gVUB)HlΪhu%kkMG6Ykpb̲\?>Kq/#B/xVjTWI/ g4* "mbcdWv5XTϼ&^tyG6dYFkH&Α&+"GyA"IS+ǵ Qh<+V++wh(M^ӵ-EYH"8;P!d6 Q"t4b]6ĕ%9 <0J1FB 4 ڳOQ&!l 8.Q)nI {^/~>9εiϢAu5nbjf hΑd(]6ta2MqkmVy+D!JWj4tʢ( Q٠a iݵҐŒiqh^ZT}{g^j9Hd9^~w4,HuO%Huv_l~| 9_9uxD% EA P0M;QpQ6)MQ:oצ0AEBuPB2?3e2vm$ k<x77xJW/ l+v]wd=w92O# Z?R k mE-,Oae\P"&yb& 2MϹQYP }(DmZK,WEdkk,2!XkiDT( ǧs6@iNHGVKjE<x%jpIb }&M =v $r_)Ȳ`  i ׮Xʎ9 ,Ĩ ?G5/y^%UO1^)$$Cl1-/V{Qϫ v52K7>)Ѥib;IS;[M,Ktb1 }9uBX4MMS:W Ȫ'\} ox|ZJN1;vS>>p]|I},v\JKs 2!, bEs,Z"GHY4uEXƣ%=F&dmJX,PZy ah TD?3& &dY~6׿[oy_( u iWE_v1|.\AϙσXﶷK/j{7~a؊OMi;|tf4%\maG,M>3ЕyNa, bK^ Rfhϱ(bxnsud2FkJKq !}`Z!hHvD"?Gh<&HuMpqjU >|)Yݦ{Fƿ ^>_i:Qcl>"gZ  X v6΁0ϋoDIY4 k }O^isNeMp/KyWybU/ .rl?~wQ6@k}1(E 0ԱFV c,YV)^&e׵! IҔ1j_,8'9e4Prb7jeYL`z(imVA,i 3hnCm[ 0ׯ)(&F Fe?3mb|~>/*9y_ʝ IDAT;'$5y5XeɪPfOnM臵AQАg{m,mPeB>Uwebʧ ⋝/wKiqʮ]ӂLhu=}HK=m[0mjuE&F%vshK NNE3ɲlb$}L#@2u]aъk{X1FcmRۛ繐CQ>b٤Qڳ̗$CzNOO   UU+S1;ɏd[~9b^l)&[hK! - --$ °v . aA۔%Qlush~zUq3{;/++k|S=O!Q7nsMvù Y Rx?`;#s7P7^Y2/z߯|/_6 0lkycR H6*#{F)bAgrI,hs䘙gٛ%w\H> ?Z n0 شȊM/;|x9W.oJx;Y)xVwΧM]ꥷmzTBhRf0@Bs3ͬ+Y0H۵S&xgwIj{s솁8B]%-^TJ)lN*E2lkLyo,''ǒwaO<}yMws:jAF{BĕLU$86i4!١4%眴 amZgBv{-ޤӶ-F"傶>><2ݻ锻) p _Ao2Ee^ \Szyg @fr[.yU1QKmX~?\(RXpݑdRl4E'*um蛦e1#c8;Y{p(ȷZhێR2hk '(53NOOZ3MirxԊp=J)Lm/1K& J+#5(OHL>1_i2~ޤygyO{O4;_o~ !RǾ{X! >8]cYf aPiipA䘇IPhnO.b^VCo:v8===~'#ge+U87_}W_=֍Ys79tg)>_IGN kyGʙ'@Ήm9;;;Fh+=ysXkd/+hD0|}'`@c-v(-n yg, 0tilâU7Uj,rtex3M6v?|F3?M\=_S"HjxJĜk'wBٯ{)P**΅j9ermWOu]۶~c^pӁ_ঈY?nn|88lEybx}/z ]vmisRgST8Cc)f1 Dc -łܗ8)9ӷc,͆مӢn )e60WB } R1G'Rߏ#00UCNY81\)=#bx#?㋺R/$|`fTmR؋R)V+Zٛ|'g(J )Eư\݂I m:h#BCh__U|lSf,~xeo=0@Li!K#G}价\\\׍UG02赼{ |p5=CSүhF3c Zi)4h#9g{k-JiN6YZ/`{1U^8F9Z4tm"%X cF Mh olS" +{_\[-sJGZsU ˼N}iOSZk?g E*9$>3Q:PQ>h[/EZ[{\6i k/(N)bR*iZ|O s7omx5&LW(幪/_=dp 'O)MŵsŽdYG׳V+n:Z1b:EJal6\nwtm8rPH.1wu*UAuB*T`ĹPWVUǠs>:%'ВGE vi-J+u=~2i!(zE4D(mEsc g4ck; T</_x'5k&9>g>ƫiZ~*?{ܾsO>FCf ݈m-Zm;.Y)J OH)1&Ydo鉽Iz=z 2(PQTOׯm[?sYڤ7&Ksj'߹{ܾsoqv~_opc 1|ʤh~d~H{G-}˹`KJk 셡XvP]B]ٛBH,W+&׽i&8Dr< {hva%ن9~?/ʟzuw/yM=*ox\z+`ڣ*`u|^~}>gkKk}L㿨5p.ȷ'Hg Sn99EWA:ZkEmwyR(-`K躶Ffo3RD\hU'*A#R.C&`a@3v0~ąHʅ,{>|$d_9eMPm;_%/sk7ul"׽ɘzw-mײ,)%n:GJu/coz^kMrWTke9ްl{%N9T uT E׵麮idӵ] Uu>4_[Z0!TP0`Ad8YouP3-R?Z0 -1&VkC/W/*8!/?eX}q}w[:6<*̧T(jy",RĘQxH:v n0 q;Aaqږ"GY(nd#%iX =b~5_ߛJ)(-De-7EwS*ڨr yB, K(ca^w-mTG:"nR$#tq\m[v \k}5S"@!(D)t͚nGcN6iZMI0 wỸY0&쑯zJkN\w!w78u{AX!O 4VHU,9J\k ElWF|pzkY6hBHTGb@٣&U'TkrB3xƢtTm[T,"J*[gj0O׶h ![t]8~7iu%68PJDԎ:_zynۖo}[' /f~/~?,ct1˦i^6"'2Z-'Ιa? t솁~b5Ǘ9ZfIJ_&_b'!gA߆PT9Rl6,8\ze?hvj"4Yj . 1fѶ!qVZ1MhvJQ2´w~5"(("qA._0NC)⽧n5-y6'ۀ1b'Fx3'Lɚ&ALÎSs]q_xެMx"uge* 4Ms/N?u7DW^?khXk%m(.dq-$/S c٦\łqhEkrmSI@D:8{OSojJq >/zBY.XkqI6ӓSybcte5jRJI5XŢg۱^x{Gw:U6/\4q=vr6+]nw9b(}GNR֒ X w6W1fzm,9bL6U#ァLӌQ:nB&QTs\ j).&$t)elHu /,KR")iggrJ(s߿˙>­3q 9k9'C) q+TލzIR98.zv7jMqcŽqz;/T!Y,ϑ2FK]P~:ZRlC&2\m8L"f"v7`B57N.Pgm!GIq ֢P<ފ#Th+\fblږ|D+E(6(T}qrr~?%JU"L߶ΡǏ/qαX. Em t4!/d*b7$l*bGky{Қ-ZnN }1YdZw?;O_ xp!_p+o]'zY*u' }dzLf-ɱXH)raX\|| VhF H؆Bibm`O%h,1FiX8"ݾ_ж!(e^ڮ,!8 Q69C4(}}6w~ܻ567XO>E zڶiHUi;Rm`vN+ӹ@cu .wPkqWw3}FZW (ʝ1a9֫`Zci8(0ZY1zL(>hPbJp^!Cr*&Ndy*9άW+q懁z0ki(wb!E/] Ү|)͢H'o8?ʞ5(6W~p|;΅ pㇼ@2ssOD\Q ( @@w1nzY'-H>gsyv\,k Ϙʋ/ѴrˢbLLx4`ci,9'ISIXpW+!=C6 UJ0/imiXvҌ5 9r:~|mnR[5=n{߹Kۉ>8ڈRU fi ȹ`l0(HY@)v_ |6rf܍hs9V~bW oC8I1cB-1B뮣:(B3Js IDATNÑGQʣg_[ae0H*\j% $ .8ڦ%<]I~!r?$#UU%TuPJ0H ڈ.~X,z$s:p^jQ]GJa )ct , >!^Oaޜr~>sz[q8}[w89%NRlRA1!$r):Ѧڎa( קUjVs4!zaij yNLJ$e5.%ݔd7'OXNxcJyKFF!IzvqOt]GӴL'kbuMd ]wz|NqvOxBLYo6\n(ږ(4AS(J!DNOǁb0XII~JjD,m.@bM!X[}=ity/If/jfՊ?Y>_vmAlepoxS"?]}0<"Z^x/0^#8=ѯhmKX\XbF4i*D9X䇏7ܓŦx 94MPmR|e)Y9Bϙb6IjotB+"AU4kӓS-Պ);B6b!}DV( *Glcq̰}rc`0ݹ]ny߹{_GW\9SɤFJF(ɚQ: RЪ-,3!%N"a=s-)'.%<v/"o!cmU3!q9|LʓmS&cPV1M3Zrg mq.Mnm׈vfѱwf 51 }-9'2;ъw.4E8:@J쇑5s4?;,.FO.t]K4=.Hj{CpTZr;R(u4JZڦPRychCsuoBx{ֆ\#c4BHu=!v|m[[oƷ~_םx/[_}ϊo* s !|ܶ+ xƳ/*Xkrr#~O1;ݜT\ImyiZ)YS\x1/R?S+wm(zVxc`rlHW@RǏ6-^wrR&9Vy&O3|rpOEZ+r29ǝN/899T΅7 (cɩLKͶ(/(>V)EepLm1H gv4 ]R D)i0DY-SkW W嵷EcwI$PҦ4:MXDl{wP24Rr%MӲ6b%tXsyQHisv vXh9 aViJXQajbEpiI1; RN&z"hrNpFEZ S '%O)vRb$iE 9؍3eZkI0G}{ϋSpCޔ "|[ ψ_{EQpן70OےSPe/d"Jx!(fCd?i.s=J!Tmw3m!܈1.k4URF7 e }uc իo'qђ-k| aV87kqX5ըIIaVßxݮɋ=^wx7{/^ZneT9R?UzSF'6ҁ&ֹ?;!;WJc;OdAj}B݈і) R3;A9dcŶ~v,:$鄉/ڮA5'J-GM"XUׄjH~/IVkд9D1U#hwsURb\֤5&b: 1EҌDH7)ӭ3Hf\3 <999F?,$:LrNurn?urCdGl|`ѷR` yPJS$$)ֶ?1/kc׿}WWg7d𬡵9.uGrkߤ_,)SմyR P0֕x|m;IWcD^` `98[ɱS{zC!3NA/%v]+) ,xfi?Ѵ-֊ȡɳZ k3ϞP {̕(%RZk PƲ;i79NN6lr5 ?\,H9ӵ"%,5)(rCd?7kJZ^)@ttMimON>#NNN#6 R51Zp!TYODqܾ}^f٣B%J+ޢ:t4AC%yi|Y_[ܺ}!<>}mI ,oG1A(bCmv-J/[T*d§Y@hhM$L5O0>=Qa5K.&d%Fe~@.lw8ٰYl9 }Ov;o1,%.84JLL,kkFK{*#AFP&61 mShׄ'ڮܾc'a\4ffUk,bAX˾?MMNĹHWք֒ ^鍱޲{S({G*lZ%ך3EI| j8(hTz:;EauJvR۴R6rQ5I7BeiO \?*'}`FQ@!zs GxMۦ9vZhidiMAIlJTXlړܵ9 |KJ+<֌Lu5u[6bL# <;.#a|֜s~=nݾ}m"p9uR9cLG2_V 13O<(m9c2yBV$$-xiCJA\ Y6B܀0{NUZ֢*;V0*U &^(X[[{EY{(IZ-iF@}9Sb\ѕ%8֌!Sht#׹>5kjm (Y{f)xՒEb ҶW,{_%yV1 \)YKsT-UkI.k"UNR'')u QzH'XBZOXK >Ψ‘k!:uia.j/?Z.i[[B63iFu\m-cjI&a 5sH*tF12x^PZډag9Y/o[_4F__q3\oMrUQox2x]y6O7] uڥ~ږղ>H gn a5''(Lgv{{ymS޽ÃbmURkEj_)"u !$mHI3m,Rpwm# F;:pg1Х߫Պct"F#Yv ^2lp.RBhX.{IPrLi+߼ܬ7+BRR(ysZ-H*pzv·}sc4'Ę)9@I@+ii3\\GXk$#u$HDN,1D&D۽pzrRS:z䒙R-?TVҘHP8;F^E1"mX\"XVr$lDbtmC*33jU&-hQE5S$ж ..,X6C`mEG?_>>Ms .W>7g\1~@Ԇtj;_4ڶ%_GoxS3ǫfn* T <#pE՟^Oe\@)I!m\VzxW(9)}0NTQ"ixbҝMMp׫58)QE J޿ߏ52w5MZH䱰 '-OG#* *XfkEkr6uv$4johSzfލP(CAY:Bh:ix<,`{qm _U9B %He)YbkѰ/6(KgVKQZ^0NCQPB r S6DfX0;9cTE/%Di 1 Ejr-{\cF6V&@S)VB_躎aw<;Oڠ`7&UqnϪp5?<+`n<39Wա_%S92=YHMEk6~ (YVGv1Dǩ"2-λ#1m\J9҄5;nDm4SBLza +5~;\+m؜]pz.ws>w ]{J#QT#)BjUKTP12LݻHak?#"2i0D 4x M8  єq%}23"k?=X9U]ݤj YYX"S#C@h#Qi|8bs?5x7ơ8Oo?-3UpOQ/ ?hg/;}m %U4Њ-a&kFh-fG8T$AmH c1 u=5ڶA=Ɖ3(mۻ{C4=\-9Ծ#m8g^3<^\a5ýnM"$_59X4?BA2xR#_ZߴT:d"@cF Qh /P ["0-(h98k Qv<% ^Z&)g qD] u7oѴ @$8kF0~ }Lǟ߷%/l] < 4蜃J35;q:ً8'<{ ]TVUfN([4CCW#|V)R !Fi÷h3FCĺE,D+WWT9c?=AZP;~8Gw=&R¥^i'Oh #C5o5ƣqhjBNӕa=j*iglR"ۆqu^FYFk̤Ԋ 1iqBgv=I" 佱Ў x_|Ti8F54҆o9OF /Q+a,{$@A~nw*(q2kP$r!F! 5 y4h=etCpkL dFf%bokr ;PK4ćX#*k/, 4pZcUwc؁ 4J&@Ұ`&` ,ۨE`aB7!18Oq؛t:ACG;E<@m{x .Rg7~WMJ-ov~ק|LE7x}^*`Ji9WX੯_~}w_^ZL[9n=N87NZt.[s1DL6c ,j)x 5U'hfxc, t*R P }gʪ6 C[:wam'q[ ٳ$EХ"VQu˒ _ϐ+yƪh6N AN2OM=OGLӄT Z)#.MTQJc 2Yo$)ɰ۷oŁ|mc5J8;L ayOzXR߉C~:&=+py5J=BQ 5-^t<8/_L: -04{(D[5vn,dOOƂJaYpu#(%0 o5NƐ#1/"[k`}h ըqFI3N(Ɵ.6o֯S?H")eSsskPcoiׯϹ.﻾KZk0Vk-aD<([ )TP洖c4@@tP+UbJhF|Yr4[JtۉE0%AWt-7ea6+z\.!SĮkm.󀯿[PEw)UKF! Òq<iI0AʴÂ8"g Ą`jŢv҅ȅ0ZX'TAg(rN \F۶xھgz9x[4;i7KCⰎK_a8(},)ĜęQa8O)cGIO~3bH7p{ J!H}}Č8&};J;wl#qE1zT8\_ߠDdYPE00Ϟ=GqM}'ww"SaayXVP2T~AJrc̯DXDhLÚ{qKVRpW )%TE~ C,qF?I,cA.I wzGJNO|)|mxkXX\])38\ ڦ Et=[g-i=P*&:Kc (i[wAmgˎ@įt/&mI]?}N_(*<{>& >b@eTUaغ.|J9EnyӄyDB!?{[}O4Y)&:qp Q²Ju}{8Ki NfMKoͦ.CӴ^0nyZPkA*s< !WޟqaH)x>ӁNA]*X@kBTb,3z mwꫯP2֙qۻ[t:k2OB)]YF:] ݮ1c"Izh%DIGJH-l{XP؊k{$)Y}סjPZcQjE Lc (82JF6y^&5y=A-8l ]KZlsX6܋u{cj՗>oe<W|Ƒ`j]Oqmc;dˏO}z|썺>Z(ME=Zfsq{M6q\,Vn˲`a߳蜴!݁9EGsl(yMzEiWVZq2ˉ1/A0|Rܲp.q٭4 mXb,#H٩0MZA[K…IEvՀrɘ癊{~':qp_l-QP)fSb:vږuNgT7Ɓ7zqOk:7@RrjdP-N8[VqZuk1N(eL! Ȕl84mKQOԚ5y{t]8z^ФȮ<^"Eh*xBA DcB?ޣwu\cq>^<&Ú\> 3"~i0{M?-yk}_X[h{tIf,ڦmCL e g)IZ`$G}"Ƅ]C9kſ;11׮ׯW_}5_O1,cO=$`RJN)=(XV*K>#𱉀1qEO+:8PH؈R8@ 4G ҲWbe4 v=慝5%  W8͍0',ФݎY80bYL]/t&Lk_~-T$-[Co*2/?"3i&Y'4kH7˙qUau;O>3Dm7Q@0#N@0nF@W<ޒyiE?n-8XK *J+΃JfZk~{<^BuQb0;kEXH5Z($aYp?m,e^0 h*ΓHv}U뚨i0@Cbx%V5/Ÿ*I|Î<*?f9GVY n6[;a2jDkh *" `[ on0 k"s]X& JUCBԊl#?TPN'zjw?."SP>/x*axy.򽀀6 X?XFv򌜙}o3qp:#qqD^ k ([zΧ*?{֟/yy8]-^~2mPT(4^x==SNg{7Kt8xv ?/ٶ ]pl~ e:e K Fۜ351{IA>ge(Fֶ۶7UPd4 g6ǵi%bR!IKHJRϞ={C<wBX9F(b8! ]qs}SJ뇀A:./^r?`4  |۾իۿvO>W|뻾 c \$Ƿ?>t=uCUUJ"Z߫nn< $U3yVhL3ѱn<[;pY*i`7۷hFe^pw"K H9-+h|'X"HiY%+Vխ/SteC[ v.i;,)"\9f`t '-MFL%cfXƈ"fEi ([4{NJƛ7oZ'OGL/` q_7{Agpмt'q9=AHEI8n%Ә'lX] ,J΢!"R?Ȋ{SIJ%^ 4]=b`A8G%%J=~^m{5#~㫯(˲H)%>:? |2ק&q]_JCT 4M;7SSb@_uu./_*πڡ،sQ94&(+b4xK{lC줣8F(y lRs 8C7U3**ȵB8ᬆŖoUANZm^qJQ< "B&AO8F#)'.=ΊTv{Ga,U8XQɶVڌ615NJIZ8f:BPwU33RH pCAoqzG-Tȅ,nuC%$(]`E U1E8Mg>m Z *k)HF\/uMR3j"ܳ9V~A%mZreDuqd&em'5b{u}L@#XٚJ2"jt㌎z!xl%5A-9y@iH,81J"&d舂W !xgPjrSk\GZZfT(1#RYC 0x&J" XZXL3n:$@tBDtp>oGȃk"BCbv@HaBƿ݀~s/o[@~Xu_76*7~|%>p_ki iGF= _ ObHX>3IlIV#9Kf Elfy%yb)(Phy\a+@ Dt9lGZ|'vYA抮a#6#pZ#]SQ hUww-y5vm'L2qBtHH< kmp{w^61Bg$(@=7?] |Ӡ~.R7֊ ]ٴlMB[tBA$"R WODQa|UF'T{dY[")ǴW8lzFbOAw@oqf9<~*EKn5eơև8-PQ?)xZ;ӄZ)$ҽ xO9g$ q4M߸ }-k9 ƢİQt1ĢiZj%r?tt֊HFE,fA5NGdk{hg_ӟa>.o'w}#oɈ7O%[R,˓@]>}~s t*%JN4M h5!Py܍$m㝸Q-J["ƑRTCnU+[gYXin Y(hP `8l^Y ^H%gK?vTɠ뼰ͯ@MHD[p}ufD.˼NfCBM5y Vps )d^Wo 23IyKq5GrOUip[$iYZ[t\faGbIyb80i P BA(#_]!*CB?S6ƚM2q%qP+05Dye/,#ޕ-X?4Bbk[ Qsш[_.YrH+T5hQRƂ8R)DDaICXm p$㊦UgkE,99"xTk8 +D)&eYu^j+Bf{S5"5@DFuV B[_?3| <5x\0O{$x}CTiƟz\ߧ L΍˗/PR__6 on5+BvfÞbKblh (,!7ap]>T1&vGiMiu[f8 HCXg)5z֊sPO@kV9 )aFh[ŵ* 4j,;8d*>k4]_9mOBv_)DZ;Opsk8Ȋ,AZxgRp T-U,aQ lekT x?cokQRuNO ZS0g7/!WIx8iKϧ3j| k[ J.A&CiiY10*+[<9$iKW'1(URw~ơpys8:U0yk9eۦ|XV bDH43$Q&QyҌcYIX0Y1ƠW&Țbw:Ѷ ^<k53@x{R1鋠6Mg]sYٸ`uCIJiӹ5R5Ra,cġTe39#,jEJNħw}ġB[7!f7} U3nœs>[k~Ϸ}Ok5,AY_5f FZ"$ 5t\,iƮo%ק`B8bh 2z @ldsGN(i]Q)gFH0^yhR]u.Pt Uw4PTJb͉\m0O3 l]kew=JbMk-ˁRKG]>3vg*`q{@)]Uv J&RJNMKZJ'VYp䡈hfIҌ]㠉qX} T*+kY*++@+ U3JIXB xm`gҼJa”3j0#H%%5YEkQ~dKN,c1v]łUq0q5m㑶m%Q.H9C{G$J+*y2LNNb(jȅ#!aFU!**g\Dzb :Wj1d]H=/Ό2B a"K.k-eV:o,muEcrlbkKި L+k+bX0".#&xg|}g\)>&>oЇ@~ݗ݀-)onj C*^L(#|ckLV, ji9 -A +NyQH@NZ~/&")1&{hT9ɠPY̦ Z| hf X{*iv~ZQTJfE#c]Ӓ @ R0{jcۖ@P- D6xм,4Z$sVO9A -ˡn5ԵFSL+;i$HtBՊy4mXU8GԾ5V9PVC&J$7-Xx, װ1ZMPbd %N؊rk(ZZ75ȵMEr/rpY0w \/u]{ejLjLx!|>@J2.11%:oDNypls18;ƾy8UJ8$H{ A#/\v~Pz} S2=c~S3;SL.m_wbΒGBqsuMr.?!q6n exJ )ݹZ=#RtF~7k-=eSs(묳" VR N ~Rb<,N;nsPpc8gh6ka@TNH1R`'%1ql5tْ(JP+a9G0(v1V\āKm(% ̊$6όCD-U 3JcE+BmZV/2?6ޭWLzHxG~TDO&K~oseY^W SS e`Q5MR #.֟?wmwrJxvsEG656I*Y8M΅Ne/ҳDmV@YӰ-T\__oHh-ڦA׵(#a&`ԍ}Cj y[SD6Q]עm;CN뛭0"pNbzcFߵ0 x9uC!g\3ݮGJ9<9ԗqX&/B>C~dEQVCȦ&E,»b-9OMcHu2L'm\-|1#j]UEO x@ ?F%.ĄO5_QF/5k]ZNGvQ6Wf }θ\{N\# Djwû mdwK8LQ~ꢵ5B +{Bb!؄`,pT db[W*a <_ n{,MEˇ".c>-w@:xx8@9N 1|fx:_p^֧5/H30{<Xy\H*{Pc:NX DzPq{%Ԃ!(4ābINX)n] )1,`1>o'o}ky%/Ab'<I`˕m3g%'T,4)Y.i9|w<9 \Q1#Ʈ(8 xLT<6  NG(ӬGTES;uYQV?|ć}c&٦1wc?3>|WYq<w=@c!=>=:e](y*Dбz4qqp>R 0̺-7w߽@AU&l Aa=a`4Ƒx||ӓ̷#y=Y- Av?W^Ec:8EC?=a-)Pנbw +c˅3P R pRg)dc8zxx\2ҳ51[=n]1>x5<(Pc4&>BVvӖXzHK,4DagL(5˺CaY)iht]OX2tmM)k(a\W5bs ۮ pz`y3RP#kZ çKj8JT?um/L\Xk.Q9vCI 뺠 P< e(3 }M6pn*.%`M^!>1'jxYy#jFג_Z17(9>?=&o[@ i3M=t%U|cqYU@i(i1HBvȄi as~7cDZTF۶rG2]yQsC1%΂)[3SŠ'jҋ@iC{h~`g5=H'dā2j-~0N-QT߼p秔nav8_o3^`d qh#3}/yq L{Q/S(p"R&TeF yۺ=1&_+p^v߶OXQ+ZQ k î5)CUwH}!q)!%qKn&$qYb Lxx'F ECV;Jy{A@tkN]u˺@r>8kh$(&y${VN ߲}kڿ@_U>מyͶ%xl,˫n'*P-lLOЉR9%,3篗:G:p9׫È2Ef*gJS RkqSmZ"[BAKlPc\+XQ''޼P, 0MNV ۆ"(xnkfjM6&|V"Zlq7HjR]# \oW@.y{:o1wZ^>a6ʪ. RziVR{^KleMXL(Au[e%:FacK+hDY}8iAL Ba L"mƁsQ*یm8n1FxI˲5Z W QX7*jH{g?p1֕ ZvaYWƢri[ٚǢr98gQhXX+#GqO\۽C YYt^QaV p8L dX8~_{,x}H!(µ[9bkPX;UAia]6Đ`,Ɛ%SFen딿[N^^ej|jTk _{XE [o1+-ZP2XٌIDz4C] ^YIGjac^/˪7lhL>OxUv/ZM.hΥ;jFi_z+Q,x:7cZ1 DYa)_+B6dOOg,sxz|a0w]0YPZcn?TP) @i~nC7zZud"xϘB:@iM | 2{EE؜}?teЪ=9~+pz5+I> V-sT ה ~`̟IH;J χ^Rfh(T/IF=/ZA3-Wc!8*f}+1FF=u8b,x6U?vL "BTkkNjߵ8p5[Q=CXT@{K"bFeo'eA.mMi:tmMOFcy:'qhQRဪ{(mӿo[֌<ܗ} &aWo_R?AOЮ/%;X0J Vnj^Y_v2ߏ1vE`S%`E c?5ʪz,@0[$FJ5gdór1&ˆ<r*Ej ?q"jau^hsaTmE agI):Zn YeϷ] ~glm[ŀ PXe]є"Rv89ۺb^P>W Bə;84 U-NG4F[=qZq.cZe0(+.o7|||iH4FZ#@te㶡#|'|29:K$M{lmf5 QYu]7qF챘I«oIζmHh G mc؄ 1p:~22Fb^BsG5fH J5!] ?>}8fhc@zG<%I1"XTv#mTCeEXWܖ!%YFYF1Rx qhmM,$uaV1;m/:$/f7xwpH񳮀_ASi(QXTzpˌؖrƗeco( KVVlO1P OrQ raQiVi! VMv4AkZ,ll9c]V^%:)8_J&Pޝ^rFsbpTcX, &ѷ~' TVN! $7a:`YJNXÊ|$1 0b"JIeY')R(l+uJT&|qXS4,z*Z+r"% oj[%>볿_k*y[5 H{^ ! Kҿ"s.k-rAU/ H1;E;Zxش6j'LYخcq:0ҙ̾9p̯z|,4ucr݈󰎉釞a&>)Ez fHP8 8}͍FAE=R!9kbS P賮|~o}~_|9\KɊ=_.H?z~zz$^PYHֽVE@Ǐra`Cd"2dv5{yiUҚ#^QQPyZN@@%ݪz8\`DzԌO.J[ᄧYFd(%eLSUUWLz<>~,Aa2;:崋4SZx`a:gH 0n)QGyJD&>H1JFk<{CD/͛X#&-JƱ'81]k:p^a1 I>.0|FVqF1J`8XA+eRNz&.^yYݯ6B6GL&rELtb]% ZR +tRoĂkIr @0J y^S{,+(c)"FOipFbqZ8?]u1qzwvO[9*`;Pkv(:B] #M 5JQˣ-F\EpBv PP=ֲHacm*ׯޚ)Xʟb?gz}X&rfr>x@mYd6TvMnz<]iYq:m@s"cuK5!n'CBNy^ր\FLVE"rZqp[L19Rz0".W8GdhEC ˅&8dDzŝQHrELAvy GP+-ξUC?Z!%qh&TSb/Uc`cG0ǣP!k0%IF'183eE"V{!q0ދKdõ*+BH8_n՟}Yu?|3Ri'ܮWX3y!wVJzmss%@Z'>!T 7c4Y֙PWg5q8BЍ8K"q8p6{q=k-y[MF*YPQجC0R$ B*9 B*PB ZSfXʊyLJ21 :'"}`rEEI/c9CnWLe]SF,yG_;k%〒(da1q9V1f4i;l%ps.R6)N@E8Γ1 u@"+ʃp< i#,yǡ ] "H %{_-9èf9J1dHoQóX]Oj%d(QB9^G'IBXHqW(Ţ qM(BTd@?Hǝj * Ɲs8 $I@pZ k!c{,ښR"|>Ii{/ (hd aPr^`hT2Q"dE$Xoܿ[@^k?K>g{2Bj pڷoF% ueOF=͋`s !lS+N˦L%2Vg[Wl|p@*^+]j:kbciK#k'Lc>]r";gds";Q]sN-I.p9wq7m|QepmCb8YrRM16NW _j~+ N?c/2xL>GHs?wzM$@$]`=yt]/,@zDFyO#!UҜ_Q(jp<)"{N@b@N tBĻR a[p<]o,j,|]f8cQ2c4d}RgVc`"HI#*EQa8 UԼQI^um?Sc7ȰnF^sV4kdkqX@bKps@l xvpz/7)SBH-T6]䱯 BlL4CUV Ag8{wC8P4YqqК3^1軞bavw<=c!c{,4r4J ˺8M?šbSl QjL A| }EWİ2!%"B t_,oﷰVk\agK j5!ݤazc4P9Zi8{DX8v%s0؅fuZ[Bh+/ d\IdeaO?RҸP9ٛC N??m6n߰7$//u]!5\/%  [WϬ9%xgey?Ǐ UFU,lu4gGTwˡ`GI%FDs&xzN!ȼ-TkG;+F_|_iC?${j՗ F6*r4We5E aYW΅AޔekbZ&+c=Iה8p)op8t][w]'nG㧘=@ʝRP2BE1/󮝐AZV ^)23I]ޥT0Fx<h^jA޽CG MC~V_ġ Fü,wfu_^x]DZe,&ag]kĤy;v6;;g-El(M=;9 ò!?8( 뗷G F,DFO|&UaR ppz8U4 I,hǢXlO3z3FI)LF0Ciq}4MG\כ-7Щs?|=V80Vt+hG+"0-Qm JZJ;\.XQF\4*3w[ %k)g ~mM8O:՝Pr/uıQZFZd. PXtŽH:#xuRt0¶.zϪ:nDwHDkBvUن{okテTlFA % (MyY);t-bNmM}U* YF0 DvuZW,6VJ~+`T%ڟU_z[ר[){~FUf+`5D-Z}?W]{[2!, wA48ݒ8Ӊ] [lknn3xT(#֟TĔvc4yZޝ4 Y RTl7cާiBMfN9um8;,TeoZ( CY21q f;߱5tx%bF@}!88&V1(EZk9PJH)a\.A X)@iG)r$AZa :'ۂ{lfa0# wN KơΑLb`48`YQ+D ˶xhTǢbWI@LRe/3*-"T mE;2>vRP Uqc- À1i=E"cb]ɠB붡N쐙`@آٝ 2 #Rjkm\[- 5C ` nǀeݤ 6}`\Lr718jcRؕa.'<m 5'd(:ɨkOM| 2MKca^ ZJ1?H#U%V3Uʖu!k˂Z 7fF+hmp(BCJ]V,QZٺ$bԷP2/;Z19: } ^$H bBۍС_k})B e2GLk8@ti)ūh<˞%̲UO'4[*qQ"%!ejxMJmɃuq].RT`UZy\@0J9']G;$Y Pp8"$~HqO㘔bRF"逜q(qM-X [tͭPȹ籐b2]|>`Pj=DZj @kUifXVQ@L)Q< J;m2n tiȣo :^x+F2 Qd4FeyL>105iE@"c qs m B'-C?춿9]nmf{}HDoN! kzgN2fR1)mzu;}7s-&oyMk6x_c|r~5XϹHD_TR,}q)1"eAP~43@(-2m0N#Sm>9% ưy:v#a8v .2~||N"(u1bN(딒dJw=ƾ3IfOe ` %[Ήq53-uk IDATk-ucw4ؒ&A,鋡va|Vt ,7ѡfM(M$V`Xk\7\$8J,8`HTFu iGg'q.I; }Ga,+U<6eEw(?r맧r{7[KT?k[}$+g?/=>"JVİ"n- r I^1Hv-m  (hI2zxU(ܮ7d!Ƅ TγpIQ:єtO+9cG4sNTT-7&@1\鶰"刧3|u>|NyY$H]$N6ՆMh: ?>|^@4x1m?#º `@&n2Rqm vid”-`]VXpUE=8)y~=. g̽8Hrpm"UDy[ăuCؐr|Y K1RN䔓;={\,mvP V)}2 º"GΫtyZ&bK;Lm]a 3Ut=R (c,޿a +X U;XCZI{̉=k{'G"qO7\ Z+>>E=@cvEn9R{S?NHV ( 7ۡ;%!l3 O3k@o*% f_;y_;c۶}S>MEz9g+PiHB]vJJ`k;k,|`;?Q iDNUٶec m@zLIڶ9k)"N YC5ŬX58pv[0= ق%ZڀZ\P(0 Ʋ̻1rUU1浵P"YBV(U!W<<Čq,c5x]4 9y?ơ@D@O5˺Ak`oú >Smh u(%/"}zk%,?;VL~{>>W^^C?~9Rh٢3*0Aagm馥5jK[nkT]ܔSɰFzvjQA LbHn{x]X)QU}#焇#PRI۠l[sbAAIU\ tP4(*r-rCp8[J ;k&n a һ"eDN8K^O¼tu(D)F;` {iks鰣in%3}Y ੤b&hw$|0PhE5b`E m,R̸3Z!:MH﹬4s9Z- ,3TB5QĆXKW*#-Y Z,:J[]9#;@VCj~L>&Tq? v+  9@:C?=;kf=jJHیrܐS@L?(~ 0~ _ V}P?9_zͷ^;_KJ\p` q;Z!C}\N}l='ޝxBڔmDnk!l#N#uA*_iZ.t|gH;H6JE h&콃eJ#CQTXŠk3uQ97mrL]aI'}\#Y SBjPx8<'6$P+*qΡȃ6VKw&z<ό8VC9G'oIS3㾧6/r<62IDAU"$)mm]ۚ[vXa&*."2OO|3^`5_ev<[QRsiι{,ba(#&(kWq\` Fӝ#z$9kX cd7F*[5aVbakBA sP󼐱vrYVMI,B@FD㙀߮C ޒ:bJ \ OmFMԌunXn\OیެGlKpFcuUu7$T_ /@< @jꂆEWu5Tݡ2# {[縅y3Bnv̖^k f C~  )cT2 U)%w~& p~N)R,E= ]aĻoY+sչs,Pcd B 6}IZqD0!`E)YI8PԮo9YS\@!0ɻ ZZy1G-֣ˮ 6̠H*E1ejaAvr.yUr84_q\m]!Fz+V}7Wt+jDёA 61u cpׁ6]f  \h9 qhښqVG^!8)HT 68 (^Ȯ"{Dr"8tMNM]TD~`IgvIR0O3>|B](ŭԬ6779 * 1](C6.[D/ 4cfК,lp POa8! s {E߷im,r)9\m=4,*{ 2="Ԅ9wG_;_0\Nȹ蓅LA7p ny9XyJ){ҝpaZG>ehmӬ2l=44:eѵ˲?'hdӘ+m@2e>|.<|mO  |n>'CYr;|$w9OGT% U{ߌ`0#j[\]n +Ɉ;҆ LepdeW .b A09L&j É(P' 7Ok۾+@ʦnviMt} c,qdZ8bc>.l t̶PΣz:e?Mݬz(#Αe:U[p 8@`oWqWcTC@UQ|EjlP@e*iS/;TU8)< ym7UR:HJh DIJ m۲nV*U.Ҡ%BfNw(Je-*cQd\D<%Eԇ3-ytzsbd.rB׶,:!qH! R *8Qt\}0 T3pĦdWiG,FQz9 @66-,qW/hqs%RĘ$EY;Ʋ$QM!Ezs](UҥqŸ(wDFSQ)a5g,ߏaVdN nS:BӸgq[TZ!A!eLΣ69d 7<9~FZ\ApOT,4܄yW nGdࡀg?Oi{] n2&?nrs@)}I%x8XO/-1ȞF9%&Ķ2T p+c3y~ \_n# D\ꗗLdֹ(9@*l朅6V-Z43ҸBHH3ڤh/Z WyF) t"*Fd6-Bȅ tD) ]Ku򗖭Hk1aGA[4m m/.w \[tKyغuS;ypAT x*$k1i) wPy1eRr(Z"XhE0\"MTe qߴ5_gs4CBF,NJQh[+o;s^|k7*) 'v/iżGDaˋ-fPvbQF֪%߶`U ꦂ_}%qp@UWdeQBc (X'RI '2)!k#i6c}NYYzZtϨG18N7-a3 (eH  5N'(4p<`8P)'~8:TF{Ldb BxP9F +h]R#H)ۿo?q|:?C7{8EWphMS"-SqۓZpw5͝IOB 1./1#JxQI IDATq(FYls.*yZt{yCN"6wqտWW\Ĉm5IDhHSZCq@%8&,qa ;Gx,`R ";m*3=+=Y)a[&Ǥ*.m3E)V h*^VbHCbTAwBhؗhn# ֤(cE\bQKJa⦔2pLG1#9ðBVrx8r9pMҙly8Aiyȫ`zj 51MB ,DO{z3eTF۾no/7b7Se:JsZu}ϖ1}]b㡤9K. @ iv)cSEMD{"bG[7hxZkE_-_ȏu(r Ή@`N6PmZFID䄢u֭H+`FhWP.//115RHւUж=v#;h.]q_L2_8g]JFNkwQEޯmᄦݦRhێ>IRM@)"KE>D:C#Y?)16;X<}8@E mC.K:{\] 制00ħRz8APS״*BzvQdL?eWY AF!FIR ja5iR6N]%(AAK`%)Ah- SSB8& fM#1!c+  "x}# &}f}d\Jaӷ<ջLh-H/tM't0zP`_(!G@ bM$^ J);6xs}_xbۚ{׼$?AրP/_cyp_G'q\ @B྄~~w9~> >}_r78(#^V^HuξD^vfXN>t]#ݓEk$XK[9sNow1w1u=M3AO)H[X+-8ASX(EEDT28NTa3>rwB_vC~i`p<hiYbv(5%e:hfO缊Ј"dm8fF.@4 AE"WfW U" .'@}m,qN i$ bw<v;㙀鰲'йPQ."`a 1"a׮TR!W]՘g$$"IY7 u@%]KBj\lh8c6uc'Вd#"4)4p! %`p<4KUk RyQP@ėP]5iD~8O֏ӌ=wk 7@E4)`ټŻ#aQWd)EuV=޾o.x7=I"%9_1>M;vOx8ˇ  9;(O1l90EY}nZ-ㄒ3qtnvqnn'@ 9]|VD]Mۏ#bd:ɳ6_}%xM8O1Ԥ%4vCDu+К.1%hw֪",ږi1et]/~pA7 9e}C`"W~e1qDSUpLw.h=#f7qi[ӈR"qb/L{f%4mקU;Jpj}TP xviŝķo[0#!.믿^1)AЀ؍w5P`OHn{ $1(cr'B12֎}s!`ӷ!g*%jq9TE[Y|kl/z7]E\!RI_7d):P~Oa|TpL' )wv;wmfD GD>6x^u]p:Ml mMqV`*2-q2D2Wg"m%kVtATDt[dN(%Sg=3P 6= _x8e GJ,kpuM}5 hc.C(% ʠm[B C)- mC k4M k[9?(cBQD6'Q6}afQRfc b ̔ժRu-Gˎ)&Srp@I `qsz)Ç+䢠5v VS.mF -o4 *(CJۭ! g@G4QBUY,hq[Uo[ 7770֮ (@RCs.*RZcG:*7"dp<R";k\ H8nlY2*pncD MH'nv¡w~?iڔRb?Tɂu`t3DC@5T ^۴ۋoV0^6M߽|qy ׋@!o5y.їYQ/~ *rEtzK$~}%FQ%zdȎv[)1p1^l`ЎÉn}0Q+8hu=@ɴuf"#S7I:G09rVYk1N" )6z{\]!S, eu!:|l7 .^:|ŗj!5jI/IO/؟T_[oo~4T Ǐq x~]1ҍtN1>n>x~P!m#ӑ% @t :륄|jHa5b$:MMmf+w{;G3B'S6 ^ =nb_US ^:dQ,KA[2:qcQCc2ZWL}LM!45IV½80(U4  MOAm78 Q&J#ۺ0V22Ho{{MݬEX5Tz (C*eF CsA "F4/)pn7e^?;)g@rHEXbQ\JXRqV5F(P7XZIkc֖u  >|Zhcq cZ].//q=y%`7<ڦ҈#ƈm_yTUWBPc ^|@]" 'UUOG9;r㷛8wS%"cۺEQ)>V;B&;> Bf+ZDc_9M՜);ٍ +AsA; )~ !GRdUO>L$L!q3BHPA6'\|ϝ.1 tXЭqH 4OZT.v!Pp;>0ڗ_eZ ~q8pb 晶) $YQp&(esd@׵!~C?ycPc?iq#01[Uq@"Ci c\Mu< P]Sar^T Rx XRϊ R($ݶoND7"E3bD73V>1 f)q!㕈5hE g~Q@2|=Mbovxqk=hT/I'ﲛ_nc4txqh:?q^wC/TtchxI=x p_!hb` 6E1Y\أg6),'oYAo2h* (E9g< #jKcZ: )RJ)a%xv _[Qj[Uƙ %hr&J) hmp< jUa"׈/yjEuqlNIh{R21H-ef s EU۹4zh#qXhj ,t6 iB]UR-xk,5;M kJ3Qz*k]"ƀ9P˼tI9^+Cz&$ odie7T:@𱗄$)ysI.|)8Q^g#tB!:IutYcʰu݈0KFkJGE Rl0OR2W֠$l{Lvk84 Jiz4$0֢x')b$[C;bA ľwPp5 D6I"lSWo_o#6`PI! GsH jf\S*3 X-6m=#@/Q,<v.BYwMn~K=l}۵xEZ 0Zu,?3ۖn?.: vmmfQ ͨ2J1P@]S/(f"rt4c@]7$%QV4M / N &s /P"'ȅ שUNRDM",*JZQtk(w5s&'t_w[aPE &a8ao,΁^e)%ئp), \Pۊ5 8+n6=UBJ5P b, !2uE7+A #2v6X*%JlANw$/gJ4o"QD*ҙ<!f<"j[ËJW7=EI= j|!F}o-R&rF"=qRDaelsMqRVڨwLq*$so\b۷5xoիw߉_mOŅ㇩/__;;?_w?Zw<;/? l-y݀ι{}KT @SAL")5YI䝼WEY,f" SzleHrS47!TT4zQ.tI`J$Vmٺg7A[9ZXfuU!(7u (|&'SyӺWYT2\TfӓWDrYȱVv@I9f|8FBDP`'sRG1bCuׅq HQ.1"SJa'@~a3d];&ytEVTmGcvFwwa)#OܞwxqZ TpC]T^vj2}]ޓmAh8CYy8 C,_ ~!I1Vk{>D@W:^C[\puuElHNuS XS(#]pH)9'xd sL-4SCA TI#@ele13*lC۶]|}.G/ۑoW\|_߽@ADڈ-VF%;ydo{έb5VsIjR䢐rYDvo5ͯi*3M`:`,\ZR@@@^NF9&}']f֠Ā8F _z4,}Α؅l556-^;euu?~?N).^?#6PyW|dJ}Z?c:OWB<b@/Qt*)'B}% Zе˔}Yq |p<ֽ.#쑫,jmTt"5L3QQwp,`"bSrFuUV/n0 #~îF-$G/~A5GPfξ`k)K͞Jv sy7u-âkX s21]K\ y~>'3KN'xq (t5U]CnYN3iF490yTWT87]Շl6Di8!Vf6J@&0 HТn0ʗw;s x|XԳ'SD+c+ &~[\mZ|]~,ߟ?G]nqX׿2,(eO9w*^Ee>?r=xNs98Aœk ΢*E~8 Ņ:UP`ULZ?kٹ J9-'ns%xM#z"ih=yEcM^]kY@ㄦm֤iaAOࠕƦ|ÊRko./p # tN{\ hn8`Gj֕į] W#2Fq;z )Eĸ*b1jv-ڦoٮūm_n7-MtNt/Yo|o@*RK?^=b oqp`g13zaK=nrH*5)E4J(唐cb <R 4Jc'l[8GS80ƈ]DUAgMqP=۵b;K܄#V~i˶5덆g.Er#Wyi{M$"#P}Oi v2ְ^\q:0` JYh5paJm\#ueW ?TCpBH|W@ #kb#BB+G@g)ESUr1y/3YP q:p ~Y("|?QulF( E.Ekݴo[E^..=|wKtW!?oqmzG,Rf}<,>9n N踻dr}?4xq~/@OӓKS/?x0&.Wfx6t +щR JӪvwk1l2`2&4 es32Ǯyk( gm%v*h0| Sm(S``B)UJ 䂢 m]4ha4J7[OT+P qѴcp<W _hӀMU;qXh| )+'ŀGkrRr}?DxlGS).?OɟC2%mn=?=*Ώ}S.ΏfOuMy>gu ~`r |j9'$+in#ǻo!Ō`^Uȃ&ZDV[P䫨Rca&j7 1)mXkLngbbk ӴZ x_Q "Zr5y}p82J",^ospt3P ({ӄ";1IW@o3x砭ES7ȥdE<)*躎2uyQ޽"iZ1Lj Sטyasv=D!}.)x=xl7k4Nn ͙r Њ^k&Q7j#8ѠX:1Rq|mqK\l,WxqZM̟1^V\<5?ƻ7HuSXr#w}Ǐ:/OxB }^uιuB3wу_fٵ<&JFITcH9i*l[T*TJ^Z +&51į*%:Tj)PJ&FBL6%Pm-GHWA4L%?- UUa'M26㑮{1`F$O*  jw DŽ|"6!P)8]8PR PPHX0x}h5C?m 5v }=^_t}sݏ-Y>P.ŷ/csh6Pĺr,_| g Lձ0w~xSch?cX| P9n>d^\*9RH~.%'IT;dd1*z'sbKBq(ZkhhDƔt=JIMS7hLiPDZ!; uhyRVkնpޛȲa_Ddf={yieӴ`XW /lޚs#-4<Ȗ!0酵Dm9w߽x!#]$IE)Zò(ea>!DQJ$.<ׅeQDIeߍ +L)4E^bpl isxsA:Bq.,i*TBCv}tv0wp7w˖t[~,Ä _}uau`N9E)Bϑ#gg7'v&tXǵ?y, H_lt:=EŘIEN& P^UzTr/B|F(a"tNHD]\<㈌(I`۶L-dY vBH:`!M{0` uGl&;a,2+9i" Ȓw( I#'qE1X<=:4aY6Ǜ0J $hW-fe@w6(F |ED(@sdYD-%@눧@,DQ1P,ܰtMؖ% e)r zxǻ.;T3Z+_ ЭTy=gq? ߲Y,OQP"'Ipz؟~.tWU29uQyU`6v{]#!(ȃ{Q,b[,ǂt%c[ `2Vo;6kr"UOt@p"K t;" EDxq \^a"LI¶@R=1+y&ӻ-b:,cֺiц6e/"!"X }iEe<!nongMQɀ-4YYB-I (; 228/hN S iEwe2`XlxA \LE/T.(eq Ѵ&C%`;.$EGm$Q ((mñ,tzbz7t$I$,pHŐD4FHa_y1EaM,A,8H4aEV𗦢+]FK3^r0EA;v{8{C۳۷ M y51(s#?''[X?]" T  '&y%ȟ\ G׸ʊ} V9@kXvQ@aVY_X)za(%f9dYxw!wvUd *Pٹ^`*]X_@UW:\OBf)=&Ɔ>$b1eYp:]d)za86P3$GD!D<]O($^R،"K"ǟ"Q<2` xp,DU:*{h (8B~Yʑ1(n;8eAH kmc0`o.w~"{q5́rOE|izp|G8:%ήp|~8`%-@s*ϙ-Ι-|fR casf~0]?FG6f *,LJgCMKTDVϋWC49&Ih -R"oܱmq^fƒn$A sy@r-J,[Y*a t<,JFb/XTr$Y$vsR"2QsGI(0BE DZ(!Hhcq]5iQҖsi:*D[8@Obj#Ib(wk;6v3Nox[it6е!<X> >4pz~Ósήpxr+`N%aг/Eca/v{tmDI<9 Y!?5/lEML=UǒAШ-C[[0`YB9/fE.yY˶`on6c 6e )SQ9)kp lmrxF2p7_ 8oG7z754]]hئPM1Н`8E]tz K0ȳ 1Q K` q"h HIȲ]I!́ s7"o?f9v=, C%H(@!G, T8Ң72YQ#GˆhH(]>xH^6Y~/ pg1>|ðk te>s3=>Eqs|w| \ GXxK=ֵ-&/^hzRrB ,u].v:y<N~^QpK?/yU*j'^`&`_3kcs%I2qiS7 IDATi:1Ȳ,Dy!Gg` ϐQh2t f18z!#0˂u:H IH7w.Ȓ#G;OSA;`3 &zA!>C䉴4&4g_ɍENf}LD( )l}v7{]|,-mk%0^ts;wGB?:ćK_z("]tV|K )^j`OVO1!bH?㌊ ~б :l0B).0>GG`{? _}.o|ҧ}ܛ\4 ''IĿWm 4MU@۲S)-@0C9H΅ ),l>C?@ z"SDQ 4v-_bh>kc(\أ|yMAyi+^AjН/W5yfi +|Yo0i@XQJ`QagBcaسp,q(pq;w?q"bTН|]`9-*zONؐyU@T$Iƍnڰ (y3WG'` ㉨>7/"3cVH"8,OhQ$"k-FEQ#$t0MlZeBreIae(BEY |tl s8'sf=~=qB z޾;ޠ/{r6hQB=[zkǧ%\l'PǦ&t:w"0N3PV^^̓Hm^ @ƒ!&o1 F%SXSؖmb<1q}uۛK܍nYW͏?Way^iϊ^ЄLV}~ 0 G{{{7^P+;qJ WeE/ i,fʖ7h4ۯpvq~;Ā }aXv`>! D BY`y nS[swG8<%ήq|~$t_4y~ї`E'THJ.|&o1 ۢp i#t},3܍o0_#DprAS~H,UU ) ΤZQs/)6 1I1Yg,g8,Kç2eGKy.dYb $IDnO "O2F^!Pd<A\Hzi0´/@z ;+>( ߏ|υ.x.C-ˑq(4f$ʠ 1֩{K_^KRH\v#F@kn"B1e!<1ľ0dtlQ{lF5YC38~qa.Az ,sc|ύ89OoGۥɱ2?ty*1Q!Ӣ/ Kcd')/;Bx<Q# < Ş <{{]}#~U,SŎ5J^ɧ*94M'66%Iϗn)H`a E*b4A2dzY# Ő۽.#]ߌt \t׸QGO+\,IEe֥^[%ȫL <!<ׅ-A>]D| 9l QP'r|r__/dm_TnD' (}U],Ma" CEQߖAZc U@ YyFx"9@eHB (c v~(1bo7C{ ǧ%c}xH;]ήptzۖdvt<"J~iňr*lw (Jw]~yCxQO#8&{{ ̊R~⏏Ts &+|UUcjЯ !mUubEѨ?v|Uh:d#cDQTN ~$CP! @@)p8N;d×_ v)4c ՆUs%9/ yٴ7Tv:+@>n6|TI fl &_mVf;:bb>$q^ *mP.0iM"o2~8FW?,_ S@^7u׹ $  ˇvmz(VVr$fp]wuu%I!, }}w_ "W!@'6xv~ϙfj:݉(srq$!WZ)RۥӑUWͯy闗xigLɯEȑ <ׅ_߅_8Z41 juJ`_|$H#wiM$MhqcF囚}&']7j)'l`2rky0LVtk}D8y(x `ƖFAL˽WXG۟s$Mqz~oW8>K{w/ΔJt:aʗ? /o +s"NUgwkwị7/|!U-EMI0=FI09WNh Zse,Ӯq@o` Dױ@LjgKTjboNu-UJIc+۰(z#i$OWO[nr"]q@}K[/5x&ϳLB He)!~=*Q#<OYϟy^ӝkqu[NǴt:%ʞR tT<y"O^3T4ۖ`nx]{=|qy]Q eB{Ws.`>4N$Lw4ZAd7YL](P-kT.[&GOVxT@ZqmR `v Ӎ(*_)Kq.RǗc*pHAm^>ƽ]5,N$R-CX>p)L;<9>\Gg6~^]:[t:BҶEm  ya/RN,ޕ _hD9gHs&" d?_^|^yΓy̦;I4ӓ M{`jJ~6nS m:>kd E@T_Ǣ 2P-#}9| .Y ӱvaYvȲX7@[V ˃ Pou)4RQRϪk,jaŧDs]t;5n cAt:th˾\^͗w*KPysnQD]P#)@J{ 4|yixw1 W`t2qoiGWukUL;yTX>Wp}T}0`tk1#~uUR>oR˵uMdQ9f۶1`n ^䥖ϘEAURcȥPjRŇ+^VuGoNGhNGX e dτ^-,VU9GxB_w".@GSj)pxpD4$tNϧj'pӸ[>05|O@n^TYRmN7V mtlst _;UMU9L@8tN)cR W_b8qضhWU0_*`/[{U *T|-z;`nc"%iӳe+w~W.}-MԿr  !e]貌m>噚"Ha#<\+ ℡ >X{lsɲ$K4&pz:.'}p *z>j`5͙}JүM|n& @'tN(TGO8*~䏏ܲ,t:Oq">zV5_jrNA j0sRPjK6|m(2&S3|'8:qί'tC4-o\ϞhGOA% u*iNt6c˪w6SRӢʯkl7[y.|CHӬ0/ᗧcNE]Mw:FǓhv1nGp^hoiާUwu[5fumhyh _G/MPI:@3 sfYvG)}Tiܶmt_߲XK`t^XUО<ëV4\jM%i(Ƒڝ(sv׏֦Q$NġJqJMjʖE-VlE@ιjfYȫ^hIȻ4xt8. pU ʜ51W &@7~_WOU^% TDU³,ϛY v4 ;7M{aLNomn['T4|^KIXZWZ>}>9ՁQ?7]/'> Su@1zcՙ8$Xڭڦ8mawwv}2Oți享ֿ=63<%NqĜN٫JL[Ӊ{&>]JW@KDEY|FwIbPRZ6_:1 0+Bowğ^Lѷ`r@=:S? {i{뼀>u:Tuz>_} uG'-|N1e6SH CcO۶sBc,nYvimzezoc^1E:zW8!xt2` U}+_mGZe=U@>_qqj `β9 ȃit/hq=gcI49ocTp&@] Z~}=u@nOp`zo*ɺQչKLt^Ω<$_eFp5P6q뢨s9(m/ʎ|hfw7$J'~ٝg c4S}tDwf227VE}6/#8BD?ye48I|/qQb[ ȗ6^-7 ݛI<ӓ{8Ʋ& \ğԜsp`:o" MVw ;;֝W'L@%o^o_)U,7Z}$狐X1J|޽;ݎts_G;5vN'RhNBWӰ"W^T,nYGLcL1#'}YCĥ-|U:f繛iM87؝V&o757pj:>f\_k==6k鹀?L 䫬:l PKA Mӱ8_NIǓs:zC5m_"EQ,:t8<5 1;_Axh|G4]FܗB ^ja/Zvlk -$FKsꗏK| uW;)x/p>II8Dq09/nfv[]Շh:l㋯63t>Go٪uܬ> IDATu&Ucg;{ */hrNkc,$IFmw]xW>\45hU&&@6iUnl`o2Wuucgzq@vcY8oEUmY%I,%PfԿeKުR/\_O.5gteYy:]RWNGGYТl7K ?LRګ~yYim$ANy|繈xWkWt'4MnLO'jLG744:ۧOY Ux0g\}MչI{m"0_'/T0yԣV 2dr]6ؘ @Al6Ce BXls?~33K,8=ᱨwxz%"O1skGٛQԭWТ<~yNgwwdoY TO<}NQ4Es 3bu'wi0t쏎&jOՏ< 6m쫀 kӺ:WNoC7 1T7Uj ͵ u\PS7Q̦*?ApDszX,u(~vR_jtt"N49L롻SFWj+gRV aEi[S0E;ǶD]YFW[>2+E[o( |/O ,euKB{qtw1c OcU m`4u9סf^]WQuȪ5! ;7]W2&AyۀoSۆoϷkz]5L<t`si7Ї˲e M>`u>|89+ڿ4D f4Nwv tCttR"P%iQN[Sr^BXVYα<2Daw"w@H2oW;Е@o@m;pIMlN/h,a@ ׭xt*}:@MhH=_c)l2_wn^7dx| Lצ#OB@nA..vw6aT;No2+~{>"N R=)jS֯g6-cZREoe<UD +>+ (j:;͒pwğ8u%h5WcڳNS&Ȯ_Wλɹ>ozM׍/9/Dh(@޶ښ*j ;]P! @o}R縸Y(stvlM:*-]OҔ_)e (1YV4K(g+mp)R8B['@> yk~taN$g8^wc37Mx]C7u~ӜozīCV=jM&sm\g&suL/D؂t@:APb,],?:88X}>>oooS÷"ng78<=LJcѝq xNE:]o&*}>yQ*^jڝaEXjq#ˑ Y̊xNb>Nػv]FdVlgҪ}{Vtyߣn-*us}%i>O!(4_eD'd>1sE G / !DQv8y@xut)(٫~$FٟYo:Ǯ(q?_ғ*FRc<壯~?kz^y9/ggx" ,&*# k-LcLxZjZ6<q fOED <i ߃,Xc6xv3g#GV&nu@{4GRT@ ]`2𮼩H)88>>~@Q厕2hH$NEA |ׇ$i mmCB{OEȲ]$n]FwW#r2r/8JcOy(1`3oRMZ|SM}S-޴cu}|՞u|mvcus/a)^E@V a[o!s0VT(19֯cl' GӇ@7-4:$ ?/Ou/u=4|w`z6Fvq͘|nbkjEP7g $xnk6ݣjcqXs/^!@^Hꏑ*H_tW_}'-p8D[왈R ۶aYV Yf~y]BH!:8sq,|w e' ttȒi,Ʃ7'jGJs:P& nkWo֪瀶1u5@߳oMncm36l\]_" ~ߺ=T7 bupwzyehE{ :cp*s8.|w[8Sjґ0K@OR_,X,R,bqp;ʜ$KI,F?wػƽNm3$PnS-uc0!yUd- 뺈yb'}YM`>Nŭ?p΀^u iUciOXS% ֜$7~@@kZqM /K9"@z@yt,NJ@94Ee4:R,"$I$I\`@V/ϫ_փz1x8WU|zTF#fCxޖj ǜkgmZݿKs @j`X ]P?eY#I7/R so8>q]0 OL9rmLpPYԯUA{:uo:ǚu` YǷܦXcmkc)6KG]P7&W.Ka@圵c!cͲ]dBc Iega~f_q,[Ъ*؛4~u*7MBџīUU7cc͵ͳ 6m}=G+Oj0Yxta@uA@Xet:Ӳco({y[@ !$I.|?}%o1opPL|&u_~[t:M6]~16o[?~?Kg@za`Ӡ@UW_d| vQ}1%刺* \r.]p3]y9_ׁckm|5MX7uӱjmkc)6)^2=szi5ErOU%bXpLnv]˯{y{m:- 7ոU{m2m{mkc=tMkbh` RS=9ྰ`!Y@82e Mz"J.ՁU/#}a8 `d:n&sm\7&@ l L kϭ?-z@o3 MTAJVw$[ [_kX UP%Ưi\'6n} &sq-&cی?\{6>+,z@C7@ݸM Cvf8*bLZ=VA}: {T@ `u뇬it-C_7|Smxo{c5C/^؀TWA+E%rUR69_&?u@]넃uk6{my}̹y6{6>+B _c@ i `d\pW"P}:j4:ŷcmkc)6ۚ^Ag!!xMp%Sy _hiU~Ɓ?m5&<\ p]OTI~BFHj1PPTǵsuZhcuV*ަ̙Zб6͵1ߔgm^mM JM}O!$תp T _׺UBͺ"j WSYPHL5M_o 7otmژoʳ 6m}=WO^t/*ZcLu~jc~S@m:c5,icS5+TzlF& A}/I/ר:5*{LUA{SC_7|Smxo{c5+}YZYXuQu4jo[Lc͵ͳ C״)ܘ^^>Z̤kUUJս&7nKvn++=-VXSi)nC- lz&sMlû {_> z z"!|Yux?F^ImZ{nE JyӫQB>T(hrn m ;5m}=7WWz:z @!4{Sk]++mK@=t)hm}=7WWzǢW6=7ΩHm6ῂ++} z;IDATPKB@Simj_S+߮0 POEPHvm6$Hh\r_yn% b.Գ Ǖ:bA yIAEEnBM0X"~e!XmK%( &@DnU/ȡ$,1 3-]!PO(TF&ϻ4 /M!؃wyIENDB`mono-tools-2.11/docbrowser/theme-icons/GNOME/monodoc-48.png0000664000175000017500000000473112225357701025424 0ustar00directhexdirecthex00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleCalculatorJH^tEXtAuthorJakub Steiner/ IDAThՙ[\u?3^fwݥk H/.`^5˃4Ũ1c|YH nuK`)%-kw;;;s眙93̰@%gfw?Q"Ǚ+xX羙8ꇉx^-4>_}ufNRJfg-/_6o},,,%=XNn~\! HoQd[h@)K#V(s5::l~yNOf'J), [) @.S"`mxmiΥgf\" Dy )B"(lP*XYɑ[Ya;weƸǼǬR-Ũv<=B x>w]lˤv>_ 'O*;At:q H!(˲k'11AA1ǸN9\cuFܽ#8Z,KM_g4Q P]L´Iψi[%Ҏwd;ROڴ|T*a۶^YYY|ljMNۧp`"væQ`D5n:}t_*<BjEfu{`0bvJ"5Q+S-q0,m[vN,/\?>9ws&W|;Lt<_-n&'&'$Ct0ea+o1u{Ϡ>%ZI=@Њ@V7_&3]He;{< c\8`D89wT k>h:*Ne.zv?oRԣ[f`Z8|쵧} S{IhR 38c4 БK 5Kۉ.4nB^Mw~{JsNd,o]*!D[A;4X' gG ES[/_9Z41bTӉKUqf4Ο@?FCxI{TmY6OĴP;]߈ڻ;G|{l9qH!CaO[]'cXh>mцJq5'WNQ6(8vK$ֻګI>RBum#V\廏|٭m,+0R-{BBIxp5 h3ovne%ϯ_ n2Hp@ua]Y]wP/X/T_u$avx'p+5'k>SUJ 8\T>VbhTtDZ9 Б<bɌo󸚩ekjΌo[{La F.hxԪ0"2Zh2Q}T Dȇ|<IENDB`mono-tools-2.11/docbrowser/theme-icons/GNOME/monodoc-22.png0000664000175000017500000000207512225357701025413 0ustar00directhexdirecthex00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleCalculatorJH^tEXtAuthorJakub Steiner/~IDAT8OhU?of'f4h*MX0 =(RЃśx -xzQP7OlSJҤnnffvv罟ٝͦ$f{~<%" >DXR6==cCD^{ PC9zk)C&4<n9bU(TkO?_&ö-lKaY RJEF0&6,j7S+333^J6֚|> OYRռ<p{сhQzRD-Lki#\ [|gDV;yV q@h< 4%[Jϲ<Ϳߔ-ʁO%}+Vw[:1]Tgeۢx=4/5F({.P =\Zoc6FkJIg$pb[Bb|$~qS=PDKKKw1`ˊtTMh67`11u]X" pX[`mwzOuFnQxAp+Dmv]7#,_[ݘA4ʊm<d r4(6Z)~f#ڒZBQl\]Vttt b9ǷBGYFsV@3gV'&&._fʏw(Σ׷ Ð/^`dtl`g_'[],{GO>r e; n}׽oW?659t ݵh*O6!DmDEH~ahvIENDB`mono-tools-2.11/docbrowser/theme-icons/GNOME/monodoc-32.png0000664000175000017500000000323212225357701025410 0ustar00directhexdirecthex00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleCalculatorJH^tEXtAuthorJakub Steiner/IDATX[heW9INͅ$'miZ"xaT:PH" H;*PAo#c5I4$^k>1?l]>绻o@jG[G%y@D" Qʎ?sq ye}^Rc@\*}֯_!"4e#}ӟbum'f&tp@t )˨TQ"M`oowzD؈ Ad&[]՟ceOr7IW01Y~J]x2*@WYoou v_`0wثSl GHڎoNX=Tkn_ceG@kH:wܱƘ|@rV?MGy_S'NP+Wjι׫:[KB`tqzgk7Xa]Ea˅ c.^#X x7ھkM)ZƘDLLLR.WPI)34q1Dƚw=moU$$ʵ(W_aWxt7qƧT8h`X*qRzzzH]Y^}lv% 7Gggp$}POvv'D^j FF;G݃(/%4 Zj\Kg= void JumpToAnchor (string anchor_name); //Copy to the clipboard the selcted text void Copy (); //Select all the text void SelectAll (); //Render the HTML code given void Render (string html_code); //Event fired when the use is over an Url event EventHandler OnUrl; //Event fired when the user clicks on a Link event EventHandler UrlClicked; // Variable that handles the info encessary for the events // As every implementation of HtmlRender will have differents events // we try to homogenize them with the variabel string Url { get; } Widget HtmlPanel { get; } void Print (string Html); bool Initialize (); Capabilities Capabilities { get; } string Name { get; } } [Flags] public enum Capabilities { None = 0, Css = 1, Fonts = 2 } } mono-tools-2.11/docbrowser/AssemblyInfo.cs.in0000664000175000017500000000075012225357701023273 0ustar00directhexdirecthex00000000000000// // AssemblyInfo.cs for gnunit // // Authors: // Miguel de Icaza (miguel@novell.com) // // (C) 2005 Novell, Inc (http://www.novell.com) // using System.Reflection; using System.Runtime.CompilerServices; [assembly: AssemblyVersion("@TOOLS_VERSION@")] [assembly: AssemblyTitle ("Mono Documentation Browser")] [assembly: AssemblyDescription ("A documentation browser.")] [assembly: AssemblyCopyright ("Copyright (c) 2003-2005 Novell, Inc.")] [assembly: AssemblyCompany ("Novell, Inc.")] mono-tools-2.11/docbrowser/Makefile.am0000664000175000017500000001037212225357701022001 0ustar00directhexdirecthex00000000000000monodocdir=$(prefix)/lib/monodoc if DMCS_PRESENT COMPILER=$(DMCS) else COMPILER=$(GMCS) endif SUBDIRS=theme-icons if ENABLE_GTKHTML noinst_DATA = admin.exe endif if ENABLE_GECKO GECKO_TARGET=GeckoHtmlRender.dll endif if ENABLE_GTKHTML GECKO_PRINTING_DEF="-d:USE_GTKHTML_PRINT" GTKHTML_TARGET=GtkHtmlHtmlRender.dll endif if ENABLE_WEBKIT WEBKIT_TARGET=WebKitHtmlRender.dll endif if ENABLE_MONOWEBBROWSER MONOWEBBROWSER_TARGET=MonoWebBrowserHtmlRender.dll endif CLEANFILES = browser.exe browser.exe.mdb admin.exe admin.exe.mdb $(GECKO_TARGET) $(GECKO_TARGET).mdb $(GTKHTML_TARGET) $(GTKHTML_TARGET).mdb $(WEBKIT_TARGET) $(WEBKIT_TARGET).mdb $(MONOWEBBROWSER_TARGET) $(MONOWEBBROWSER_TARGET).mdb monodoc.desktop Options.cs monodoc_DATA = browser.exe $(GECKO_TARGET) $(GTKHTML_TARGET) $(WEBKIT_TARGET) $(MONOWEBBROWSER_TARGET) DISTCLEANFILES = AssemblyInfo.cs monodoc.desktop monodoc bin_SCRIPTS = monodoc browser_sources = \ $(srcdir)/browser.cs \ $(srcdir)/list.cs \ $(srcdir)/elabel.cs \ $(srcdir)/history.cs \ $(srcdir)/editing.cs \ $(srcdir)/Contributions.cs \ $(srcdir)/XmlNodeWriter.cs \ $(srcdir)/IHtmlRender.cs \ $(srcdir)/BookmarkManager.cs \ $(srcdir)/ProgressPanel.cs browser_built_sources = AssemblyInfo.cs Options.cs geckorender_sources = \ $(srcdir)/PrintManager.cs \ $(srcdir)/GeckoHtmlRender.cs gtkhtmlrender_sources = \ $(srcdir)/PrintManager.cs \ $(srcdir)/GtkHtmlHtmlRender.cs webkitrender_sources = \ $(srcdir)/WebKitHtmlRender.cs monowebbrowserrender_sources = \ $(srcdir)/BrowserWidget.cs \ $(srcdir)/MonoWebBrowserHtmlRender.cs admin_sources = \ $(srcdir)/admin.cs \ $(srcdir)/Contributions.cs browser_assemblies = $(GTK_SHARP_LIBS) $(MONODOC_LIBS) $(GNOME_SHARP_LIBS) -r:System.Web.Services -r:System.Web # we insert gtkhtml libs if we have them for printing geckorender_assemblies = $(GTK_SHARP_LIBS) $(GTKHTML_SHARP_LIBS) $(GECKO_SHARP_LIBS) $(GNOME_SHARP_LIBS) $(MONODOC_LIBS) -r:browser.exe gtkhtmlrender_assemblies = $(GTK_SHARP_LIBS) $(GTKHTML_SHARP_LIBS) $(GNOME_SHARP_LIBS) $(MONODOC_LIBS) -r:browser.exe webkitrender_assemblies = $(GTK_SHARP_LIBS) $(WEBKIT_SHARP_LIBS) $(MONODOC_LIBS) -r:browser.exe monowebbrowserrender_assemblies = $(GTK_SHARP_LIBS) $(GNOME_SHARP_LIBS) $(MONOWEBBROWSER_LIBS) $(MONODOC_LIBS) -r:browser.exe -r:Mono.WebBrowser.dll EXTRA_DIST = \ $(browser_sources) \ $(geckorender_sources) \ $(gtkhtmlrender_sources) \ $(monowebbrowserrender_sources) \ $(webkitrender_sources) \ monodoc.desktop.in \ admin.cs \ admin.glade \ browser.glade \ monodoc.png \ AssemblyInfo.cs.in \ README.ADMIN # admin hardcodes GTKHTML for now. if ENABLE_GTKHTML admin.exe: $(admin_sources) $(srcdir)/admin.glade $(COMPILER) -debug -out:admin.exe $(admin_sources) -resource:$(srcdir)/admin.glade,admin.glade $(browser_assemblies) $(GTKHTML_SHARP_LIBS) -r:System.Drawing endif browser.exe: $(browser_sources) $(browser_built_sources) $(srcdir)/browser.glade $(srcdir)/monodoc.png $(COMPILER) -debug -out:browser.exe $(browser_sources) $(browser_built_sources) -resource:$(srcdir)/monodoc.png,monodoc.png -resource:$(srcdir)/browser.glade,browser.glade $(browser_assemblies) $(CSHARP_FLAGS) GeckoHtmlRender.dll : $(geckorender_sources) browser.exe $(COMPILER) -debug -target:library -out:$@ $(geckorender_sources) $(geckorender_assemblies) $(GECKO_PRINTING_DEF) $(CSHARP_FLAGS) GtkHtmlHtmlRender.dll : $(gtkhtmlrender_sources) browser.exe $(COMPILER) -debug -target:library -out:$@ $(gtkhtmlrender_sources) $(gtkhtmlrender_assemblies) $(CSHARP_FLAGS) WebKitHtmlRender.dll : $(webkitrender_sources) browser.exe $(COMPILER) -debug -target:library -out:$@ $(webkitrender_sources) $(webkitrender_assemblies) $(CSHARP_FLAGS) MonoWebBrowserHtmlRender.dll : $(monowebbrowserrender_sources) browser.exe $(COMPILER) -debug -target:library -out:$@ $(monowebbrowserrender_sources) $(monowebbrowserrender_assemblies) $(CSHARP_FLAGS) Options.cs: cp `pkg-config --variable=Sources mono-options` . b: browser.exe MONO_PATH=. $(RUNTIME) --debug browser.exe c: admin.exe MONO_PATH=. $(RUNTIME) --debug admin.exe desktopdir = $(datadir)/applications desktop_DATA = monodoc.desktop monodoc.desktop: monodoc.desktop.in sed -e "s|\@bindir\@|$(bindir)|" $< > $@ pixmapdir = $(datadir)/pixmaps pixmap_DATA = monodoc.png mono-tools-2.11/docbrowser/ProgressPanel.cs0000664000175000017500000000300212225357701023050 0ustar00directhexdirecthex00000000000000// // ProgressPanel.cs: A panel with a progress bar and a button // // Author: Mario Sopena // using System; using Gtk; using System.Threading; namespace Monodoc { class ProgressPanel : VBox { // Delegates called when starting and finishing public delegate void StartWorkDelegate (); public StartWorkDelegate StartWork; public delegate void FinishWorkDelegate (); public FinishWorkDelegate FinishWork; ProgressBar pb; ThreadNotify notify; uint timer; public ProgressPanel (string message, string button, StartWorkDelegate StartWork, FinishWorkDelegate FinishWork) { Gtk.Label l = new Gtk.Label (message); l.UseMarkup = true; l.Show (); PackStart (l); pb = new ProgressBar (); pb.Show (); PackEnd (pb, false, false, 3); Button b = new Button (button); b.Show (); b.Clicked += new EventHandler (OnStartWorking); PackEnd (b, false, false, 3); this.StartWork = StartWork; this.FinishWork = FinishWork; } void OnStartWorking (object sender, EventArgs a) { Button b = (Button) sender; b.Sensitive = false; // start a timer to update the progress bar timer = Gtk.Timeout.Add ( (uint) 100, new Function (DoUpdateProgressbar)); Thread thr = new Thread (new ThreadStart (Work)); thr.Start (); notify = new ThreadNotify (new ReadyEvent (Finished)); } void Work () { StartWork (); notify.WakeupMain (); } void Finished () { Gtk.Timeout.Remove (timer); FinishWork (); } bool DoUpdateProgressbar () { pb.Pulse (); return true; } } } mono-tools-2.11/docbrowser/ChangeLog0000775000175000017500000013364512225357701021533 0ustar00directhexdirecthex000000000000002010-03-02 Marek Habersack * Makefile.am: if DMCS was found use it to compile everything, or otherwise the browser won't work (monodoc.dll is built with dmcs on trunk) 2010-02-23 Michael Hutchinson * Makefile.am: * theme-icons/*: Add Jakub's great new icons. 2010-02-11 Marek Habersack * Makefile.am (geckorender_assemblies): added $(GNOME_SHARP_LIBS) to fix the build 2009-10-13 Jo Shields * WebKitHtmlRender.cs: WebKit (1.1.15+) now raises NavigationRequested events for initial loads from html, with about:blank uri. We only want to deal with user-generated navigation events, so ignore these. 2009-09-29 Jonathan Pryor * browser.cs: The make-index, make-search-index, and merge-changes options shouldn't display the GUI. 2009-08-13 Jonathan Pryor * browser.cs: Rename --docdir to --docrootdir. Add --docdir option which will read .source files from the specified directory. 2009-08-13 Jonathan Pryor * browser.cs: Provide more accurate help for --engine. 2009-08-13 Jonathan Pryor * Makefile.am: Use Mono.Options for option parsing. * browser.cs: Use Mono.Options for option parsing (yay consistency; --engine=ENGINE will actually work). Add --docdir=DIR parameter to load documentation from the specified directory. 2009-04-25 Jonathan Pryor * browser.cs: Browser.GetHtml() needs to cope with RootTree.RenderUrl() returning a null match node, which can happen because an EcmaUncompiledHelpSource always sets the match node to null, but will return a non-null string. Fixes #505476. 2009-04-30 Marek Habersack * browser.cs: NodePageVisit.Go () - it seems n.tree is almost never a RootTree, so the cast to that type caused monodoc to throw invalid cast exception and bail out. The fix is to use browser.help_tree instead of n.tree. 2009-04-25 Jonathan Pryor * browser.cs: Enable use of the webdoc cache, if present. This requires writing the HTML header (style & script information) instead of letting monodoc.dll generate this, as the cache doesn't contain \n"); } if (help_source != null && help_source.InlineJavaScript != null) { html.Write (" \n"); } html.Write (" \n"); html.Write (" \n"); html.Write (html_content); html.Write (" \n"); html.Write (""); return html.ToString (); } void OnCommentsActivate (object o, EventArgs args) { SettingsHandler.Settings.ShowComments = comments1.Active; // postcomment.Sensitive = comments1.Active; // refresh, so we can see the comments if (CurrentTab != null && CurrentTab.history != null) // catch the case when we are currently loading CurrentTab.history.ActivateCurrent (); } void OnInheritedMembersActivate (object o, EventArgs args) { SettingsHandler.Settings.ShowInheritedMembers = showinheritedmembers.Active; if (CurrentTab != null && CurrentTab.history != null) // catch the case when we are currently loading CurrentTab.history.ActivateCurrent (); } void OnEditingActivate (object o, EventArgs args) { SettingsHandler.Settings.EnableEditing = editing1.Active; // refresh, so we can see the [edit] things if (CurrentTab != null && CurrentTab.history != null) // catch the case when we are currently loading CurrentTab.history.ActivateCurrent (); } void OnCollapseActivate (object o, EventArgs args) { reference_tree.CollapseAll (); reference_tree.ExpandRow (new TreePath ("0"), false); } // // Invoked when the index_entry Entry line content changes // public void OnIndexEntryChanged (object sender, EventArgs a) { if (index_browser != null) index_browser.SearchClosest (index_entry.Text); } // // Invoked when the user presses enter on the index_entry // public void OnIndexEntryActivated (object sender, EventArgs a) { if (index_browser != null) index_browser.LoadSelected (); } // // Invoked when the user presses a key on the index_entry // public void OnIndexEntryKeyPress (object o, KeyPressEventArgs args) { args.RetVal = true; switch (args.Event.Key) { case Gdk.Key.Up: if (matches.Visible == true && index_browser.match_list.Selected != 0) { index_browser.match_list.Selected--; } else { index_browser.index_list.Selected--; if (matches.Visible == true) index_browser.match_list.Selected = index_browser.match_model.Rows - 1; } break; case Gdk.Key.Down: if (matches.Visible == true && index_browser.match_list.Selected + 1 != index_browser.match_model.Rows) { index_browser.match_list.Selected++; } else { index_browser.index_list.Selected++; if (matches.Visible == true) index_browser.match_list.Selected = 0; } break; default: args.RetVal = false; break; } } // // For the accel keystroke // public void OnIndexEntryFocused (object sender, EventArgs a) { nb.Page = 1; } // // Invoked from File/Quit menu entry. // void OnQuitActivate (object sender, EventArgs a) { Application.Quit (); } // // Invoked by Edit/Cut menu entry. // void OnCutActivate (object sender, EventArgs a) { if (CurrentTab.Tab_mode == Mode.Editor) { Clipboard cb = Clipboard.Get (Gdk.Selection.Clipboard); CurrentTab.text_editor.Buffer.CutClipboard (cb, true); } } // // Invoked by Edit/Copy menu entry. // void OnCopyActivate (object sender, EventArgs a) { if (CurrentTab.Tab_mode == Mode.Viewer) CurrentTab.html.Copy (); else { Clipboard cb = Clipboard.Get (Gdk.Selection.Clipboard); CurrentTab.text_editor.Buffer.CopyClipboard (cb); } } // // Invoked by Edit/Paste menu entry. // void OnPasteActivate (object sender, EventArgs a) { Clipboard cb = Clipboard.Get (Gdk.Selection.Clipboard); if (!cb.WaitIsTextAvailable ()) return; //string text = cb.WaitForText (); //CurrentTab.text_editor.Buffer.InsertAtCursor (text); CurrentTab.text_editor.Buffer.PasteClipboard (cb); } class About { [Glade.Widget] Window about; [Glade.Widget] Image logo_image; [Glade.Widget] Label label_version; static About AboutBox; Browser parent; About (Browser parent) { Glade.XML ui = new Glade.XML (null, "browser.glade", "about", null); ui.Autoconnect (this); this.parent = parent; about.TransientFor = parent.window1; Gdk.Pixbuf icon = new Gdk.Pixbuf (null, "monodoc.png"); if (icon != null) { about.Icon = icon; logo_image.Pixbuf = icon; } Assembly assembly = Assembly.GetExecutingAssembly (); label_version.Markup = String.Format ("Version: {0}", assembly.GetName ().Version.ToString ()); } void OnOkClicked (object sender, EventArgs a) { about.Hide (); } // // Called on the Window delete icon clicked // void OnDelete (object sender, DeleteEventArgs a) { AboutBox = null; } static public void Show (Browser parent) { if (AboutBox == null) AboutBox = new About (parent); AboutBox.about.Show (); } } // // Hooked up from Glade // void OnAboutActivate (object sender, EventArgs a) { About.Show (this); } void OnUpload (object sender, EventArgs a) { string key = SettingsHandler.Settings.Key; if (key == null || key == "") ConfigWizard.Run (this); else DoUpload (); } void DoUpload () { Upload.Run (this); } class Upload { enum State { GetSerial, PrepareUpload, SerialError, VersionError, SubmitError, NetworkError, Done } [Glade.Widget] Dialog upload_dialog; [Glade.Widget] Label status; [Glade.Widget] Button cancel; State state; ThreadNotify tn; WebClientAsyncResult war; Contributions d; int serial; public static void Run (Browser browser) { new Upload (browser); } Upload (Browser browser) { tn = new ThreadNotify (new ReadyEvent (Update)); Glade.XML ui = new Glade.XML (null, "browser.glade", "upload_dialog", null); ui.Autoconnect (this); d = new Contributions (); if (Environment.GetEnvironmentVariable ("MONODOCTESTING") == null) d.Url = "http://www.go-mono.com/docs/server.asmx"; status.Text = "Checking Server version"; war = (WebClientAsyncResult) d.BeginCheckVersion (1, new AsyncCallback (VersionChecked), null); } void Update () { Console.WriteLine ("In Update: " + state); switch (state){ case State.NetworkError: status.Text = "A network error ocurred"; cancel.Label = "Close"; return; case State.VersionError: status.Text = "Server has a different version, upgrade your MonoDoc"; cancel.Label = "Close"; return; case State.GetSerial: war = (WebClientAsyncResult) d.BeginGetSerial ( SettingsHandler.Settings.Email, SettingsHandler.Settings.Key, new AsyncCallback (GetSerialDone), null); return; case State.SerialError: status.Text = "Error obtaining serial number from server for this account"; cancel.Label = "Close"; return; case State.SubmitError: status.Text = "There was a problem with the documentation uploaded"; cancel.Label = "Close"; return; case State.PrepareUpload: GlobalChangeset cs = EditingUtils.GetChangesFrom (serial); if (cs == null){ status.Text = "No new contributions"; cancel.Label = "Close"; return; } CopyXmlNodeWriter w = new CopyXmlNodeWriter (); GlobalChangeset.serializer.Serialize (w, cs); Console.WriteLine ("Uploading..."); status.Text = String.Format ("Uploading {0} contributions", cs.Count); XmlDocument dd = (XmlDocument) w.Document; war = (WebClientAsyncResult) d.BeginSubmit ( SettingsHandler.Settings.Email, SettingsHandler.Settings.Key, ((XmlDocument) w.Document).DocumentElement, new AsyncCallback (UploadDone), null); return; case State.Done: status.Text = "All contributions uploaded"; cancel.Label = "Close"; SettingsHandler.Settings.SerialNumber = serial; SettingsHandler.Save (); return; } } void UploadDone (IAsyncResult iar) { try { int result = d.EndSubmit (iar); war = null; if (result < 0) state = State.SubmitError; else { state = State.Done; serial = result; } } catch (Exception e) { state = State.NetworkError; Console.WriteLine ("Upload: " + e); } if (tn != null) tn.WakeupMain (); } void GetSerialDone (IAsyncResult iar) { try { serial = d.EndGetSerial (iar); war = null; if (serial < 0) state = State.SerialError; else state = State.PrepareUpload; } catch (Exception e) { Console.WriteLine ("Serial: " + e); state = State.NetworkError; } if (tn != null) tn.WakeupMain (); } void VersionChecked (IAsyncResult iar) { try { int ver = d.EndCheckVersion (iar); war = null; if (ver != 0) state = State.VersionError; else state = State.GetSerial; } catch (Exception e) { Console.WriteLine ("Version: " + e); state = State.NetworkError; } if (tn != null) tn.WakeupMain (); } void Cancel_Clicked (object sender, EventArgs a) { if (war != null) war.Abort (); war = null; state = State.Done; upload_dialog.Destroy (); upload_dialog = null; tn = null; } } class ConfigWizard { static ConfigWizard config_wizard; [Glade.Widget] Window window_config_wizard; [Glade.Widget] Notebook notebook; [Glade.Widget] Button button_email_ok; [Glade.Widget] Entry entry_email; [Glade.Widget] Entry entry_password; Browser parent; Contributions d; WebClientAsyncResult war; ThreadNotify tn; int new_page; public static void Run (Browser browser) { if (config_wizard == null) config_wizard = new ConfigWizard (browser); return; } ConfigWizard (Browser browser) { tn = new ThreadNotify (new ReadyEvent (UpdateNotebookPage)); Glade.XML ui = new Glade.XML (null, "browser.glade", "window_config_wizard", null); ui.Autoconnect (this); //notebook.ShowTabs = false; parent = browser; window_config_wizard.TransientFor = browser.window1; d = new Contributions (); if (Environment.GetEnvironmentVariable ("MONODOCTESTING") == null) d.Url = "http://www.go-mono.com/docs/server.asmx"; notebook.Page = 8; war = (WebClientAsyncResult) d.BeginCheckVersion (1, new AsyncCallback (VersionChecked), null); } void NetworkError () { new_page = 9; tn.WakeupMain (); } void VersionChecked (IAsyncResult iar) { int ver = -1; try { if (notebook.Page != 8) return; ver = d.EndCheckVersion (iar); if (ver != 0) new_page = 10; else new_page = 0; tn.WakeupMain (); } catch (Exception e){ Console.WriteLine ("Error" + e); NetworkError (); } } // // Called on the Window delete icon clicked // void OnDelete (object sender, DeleteEventArgs a) { config_wizard = null; } // // called when the license is approved // void OnPage1_Clicked (object sender, EventArgs a) { button_email_ok.Sensitive = false; notebook.Page = 1; } // // Request the user registration. // void OnPage2_Clicked (object sender, EventArgs a) { notebook.Page = 2; SettingsHandler.Settings.Email = entry_email.Text; war = (WebClientAsyncResult) d.BeginRegister (entry_email.Text, new AsyncCallback (RegisterDone), null); } void UpdateNotebookPage () { notebook.Page = new_page; } void RegisterDone (IAsyncResult iar) { int code; try { Console.WriteLine ("Registration done"); code = d.EndRegister (iar); if (code != 0 && code != -2){ NetworkError (); return; } new_page = 4; } catch { new_page = 3; } tn.WakeupMain (); } void PasswordContinue_Clicked (object sender, EventArgs a) { notebook.Page = 5; SettingsHandler.Settings.Key = entry_password.Text; war = (WebClientAsyncResult) d.BeginGetSerial (entry_email.Text, entry_password.Text, new AsyncCallback (GetSerialDone), null); } void GetSerialDone (IAsyncResult iar) { try { int last = d.EndGetSerial (iar); if (last == -1){ SettingsHandler.Settings.Key = ""; new_page = 11; tn.WakeupMain (); return; } SettingsHandler.Settings.SerialNumber = last; new_page = 6; tn.WakeupMain (); } catch { NetworkError (); } } void AccountRequestCancel_Clicked (object sender, EventArgs a) { war.Abort (); notebook.Page = 7; } void SerialRequestCancel_Clicked (object sender, EventArgs a) { war.Abort (); notebook.Page = 7; } void LoginRequestCancel_Clicked (object sender, EventArgs a) { war.Abort (); notebook.Page = 7; } // // Called when the user clicks `ok' on a terminate page // void Terminate_Clicked (object sender, EventArgs a) { window_config_wizard.Destroy (); config_wizard = null; } // Called when the registration process has been successful void Completed_Clicked (object sender, EventArgs a) { window_config_wizard.Destroy (); config_wizard = null; try { Console.WriteLine ("Saving"); SettingsHandler.Save (); parent.DoUpload (); } catch (Exception e) { MessageDialog md = new MessageDialog (null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Close, "Error Saving settings\n" + e.ToString ()); } } void OnEmail_Changed (object sender, EventArgs a) { string text = entry_email.Text; if (text.IndexOf ("@") != -1 && text.Length > 3) button_email_ok.Sensitive = true; } } void OnContributionStatistics (object sender, EventArgs a) { string email = SettingsHandler.Settings.Email; string key = SettingsHandler.Settings.Key; if (key == null || key == "") { MessageDialog md = new MessageDialog (null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Close, "You have not obtained or used a contribution key yet."); md.Title = "No contribution key"; md.Run(); md.Destroy(); } else ContributionStatus.GetStatus (email, key); } class ContributionStatus { enum State { GetStatusError, NetworkError, Done } State state; Status status; string contributoremail; ThreadNotify tn; WebClientAsyncResult war; Contributions d; public static void GetStatus (string email, string key) { new ContributionStatus(email, key); } ContributionStatus (string email, string key) { tn = new ThreadNotify (new ReadyEvent (Update)); d = new Contributions (); if (Environment.GetEnvironmentVariable ("MONODOCTESTING") == null) d.Url = "http://www.go-mono.com/docs/server.asmx"; war = (WebClientAsyncResult) d.BeginGetStatus (email, key, new AsyncCallback (GetStatusDone), null); contributoremail = email; } void Update () { MessageDialog md = null; switch (state) { case State.GetStatusError: md = new MessageDialog (null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Close, "Server returned error while requesting contributor statistics"); md.Title = "Contribution Statistics Error Occurred"; break; case State.NetworkError: md = new MessageDialog (null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Close, "Network error occurred while requesting contributor statistics"); md.Title = "Contribution Statistics Error Occurred"; break; case State.Done: md = new MessageDialog (null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Close, "Contribution statistics for " + contributoremail + "\n\nTotal contributions: " + status.Contributions + "\nContributions committed: " + status.Commited + "\nContributions pending: " + status.Pending); md.Title = "Contribution Statistics"; break; } md.Run(); md.Destroy(); } void GetStatusDone (IAsyncResult iar) { try { status = d.EndGetStatus (iar); war = null; if (status == null) state = State.GetStatusError; else state = State.Done; } catch (Exception e) { state = State.NetworkError; Console.WriteLine ("Error getting status: " + e); } if (tn != null) tn.WakeupMain (); } } class NewComment { [Glade.Widget] Window newcomment; [Glade.Widget] Entry entry; static NewComment NewCommentBox; Browser parent; NewComment (Browser browser) { Glade.XML ui = new Glade.XML (null, "browser.glade", "newcomment", null); ui.Autoconnect (this); parent = browser; newcomment.TransientFor = browser.window1; } void OnOkClicked (object sender, EventArgs a) { //CommentService service = new CommentService(); // todo newcomment.Hide (); } void OnCancelClicked (object sender, EventArgs a) { newcomment.Hide (); } // // Called on the Window delete icon clicked // void OnDelete (object sender, DeleteEventArgs a) { NewCommentBox = null; } static public void Show (Browser browser) { if (NewCommentBox == null) NewCommentBox = new NewComment (browser); NewCommentBox.newcomment.Show (); } } void OnNewComment (object sender, EventArgs a) { NewComment.Show (this); } class Lookup { [Glade.Widget] Window lookup; [Glade.Widget] Entry entry; static Lookup LookupBox; Browser parent; Lookup (Browser browser) { Glade.XML ui = new Glade.XML (null, "browser.glade", "lookup", null); ui.Autoconnect (this); parent = browser; lookup.TransientFor = browser.window1; } void OnOkClicked (object sender, EventArgs a) { string text = entry.Text; if (text != "") parent.LoadUrl (entry.Text); lookup.Hide (); } // // Called on the Window delete icon clicked // void OnDelete(object sender, DeleteEventArgs a) { LookupBox = null; } static public void Show (Browser browser) { if (LookupBox == null) LookupBox = new Lookup (browser); LookupBox.lookup.Show (); } } // // Invoked by File/LookupURL menu entry. // void OnLookupURL (object sender, EventArgs a) { Lookup.Show (this); } // // Invoked by Edit/Select All menu entry. // void OnSelectAllActivate (object sender, EventArgs a) { CurrentTab.html.SelectAll (); } // // Invoked by New Tab menu entry. // void OnNewTab (object sender, EventArgs a) { AddTab(); } // // Invoked by Close Tab menu entry. // public void OnCloseTab (object sender, EventArgs a) { CloseTab(); } } // // This class implements the tree browser // public class TreeBrowser { Browser browser; TreeView tree_view; TreeStore store; RootTree help_tree; TreeIter root_iter; // // This hashtable maps an iter to its node. // Hashtable iter_to_node; // // This hashtable maps the node to its iter // Hashtable node_to_iter; // // Maps a node to its TreeIter parent // Hashtable node_parent; public TreeBrowser (RootTree help_tree, TreeView reference_tree, Browser browser) { this.browser = browser; tree_view = reference_tree; iter_to_node = new Hashtable (); node_to_iter = new Hashtable (); node_parent = new Hashtable (); // Setup the TreeView tree_view.AppendColumn ("name_col", new CellRendererText (), "text", 0); // Bind events tree_view.RowExpanded += new Gtk.RowExpandedHandler (RowExpanded); tree_view.Selection.Changed += new EventHandler (RowActivated); tree_view.RowActivated += new Gtk.RowActivatedHandler (RowClicked); // Setup the model this.help_tree = help_tree; store = new TreeStore (typeof (string)); root_iter = store.AppendValues ("Mono Documentation"); iter_to_node [root_iter] = help_tree; node_to_iter [help_tree] = root_iter; PopulateNode (help_tree, root_iter); reference_tree.Model = store; } void PopulateNode (Node node, TreeIter parent) { if (node.Nodes == null) return; TreeIter iter; foreach (Node n in node.Nodes){ iter = store.AppendValues (parent, n.Caption); iter_to_node [iter] = n; node_to_iter [n] = iter; } } Hashtable populated = new Hashtable (); void RowExpanded (object o, Gtk.RowExpandedArgs args) { Node result = iter_to_node [args.Iter] as Node; Open (result); } void RowClicked (object o, Gtk.RowActivatedArgs args) { Gtk.TreeModel model; Gtk.TreeIter iter; Gtk.TreePath path = args.Path; tree_view.Selection.GetSelected (out model, out iter); Node result = iter_to_node [iter] as Node; if (!tree_view.GetRowExpanded (path)) { tree_view.ExpandRow (path, false); Open (result); } else { tree_view.CollapseRow (path); } } void Open (Node node) { if (node == null){ Console.Error.WriteLine ("Expanding something that I do not know about"); return; } if (populated.Contains (node)) return; // // We need to populate data on a second level // if (node.Nodes == null) return; foreach (Node n in node.Nodes){ PopulateNode (n, (TreeIter) node_to_iter [n]); } populated [node] = true; } void PopulateTreeFor (Node n) { if (populated [n] == null){ if (n.Parent != null) { OpenTree (n.Parent); } } Open (n); } public void OpenTree (Node n) { PopulateTreeFor (n); TreeIter iter = (TreeIter) node_to_iter [n]; TreePath path = store.GetPath (iter); } public Node SelectedNode { get { Gtk.TreeIter iter; Gtk.TreeModel model; if (tree_view.Selection.GetSelected (out model, out iter)) return (Node) iter_to_node [iter]; else return null; } } public void ShowNode (Node n) { if (node_to_iter [n] == null){ OpenTree (n); if (node_to_iter [n] == null){ Console.Error.WriteLine ("Internal error: no node to iter mapping"); return; } } TreeIter iter = (TreeIter) node_to_iter [n]; TreePath path = store.GetPath (iter); tree_view.ExpandToPath (path); IgnoreRowActivated = true; tree_view.Selection.SelectPath (path); IgnoreRowActivated = false; tree_view.ScrollToCell (path, null, false, 0.5f, 0.0f); } class NodePageVisit : PageVisit { Browser browser; Node n; string url; public NodePageVisit (Browser browser, Node n, string url) { if (n == null) throw new Exception ("N is null"); this.browser = browser; this.n = n; this.url = url; } public override void Go () { string res = Browser.GetHtml (url, n.tree.HelpSource, browser.help_tree); browser.Render (res, n, url); } } bool IgnoreRowActivated = false; // // This has to handle two kinds of urls: those encoded in the tree // file, which are used to quickly lookup information precisely // (things like "ecma:0"), and if that fails, it uses the more expensive // mechanism that walks trees to find matches // void RowActivated (object sender, EventArgs a) { //browser.CurrentTab.SetMode (Mode.Viewer); if (IgnoreRowActivated) return; Gtk.TreeIter iter; Gtk.TreeModel model; if (tree_view.Selection.GetSelected (out model, out iter)){ Node n = (Node) iter_to_node [iter]; string url = n.PublicUrl; Node match; string s; if (n.tree.HelpSource != null) { // // Try the tree-based urls first. // s = Browser.GetHtml (url, n.tree.HelpSource, help_tree); if (s != null){ ((Browser)browser).Render (s, n, url); browser.CurrentTab.history.AppendHistory (new NodePageVisit (browser, n, url)); return; } } // // Try the url resolver next // s = Browser.GetHtml (url, null, help_tree); if (s != null){ ((Browser)browser).Render (s, n, url); browser.CurrentTab.history.AppendHistory (new Browser.LinkPageVisit (browser, url)); return; } ((Browser)browser).Render ("

Unhandled URL

" + "

Functionality to view the resource " + n.PublicUrl + " is not available on your system or has not yet been implemented.

", null, url); } } } // // The index browser // class IndexBrowser { Browser browser; IndexReader index_reader; public BigList index_list; public MatchModel match_model; public BigList match_list; IndexEntry current_entry = null; public static IndexBrowser MakeIndexBrowser (Browser browser) { IndexReader ir = browser.help_tree.GetIndex (); if (ir == null) { return new IndexBrowser (browser); } return new IndexBrowser (browser, ir); } ProgressPanel ppanel; IndexBrowser (Browser parent) { browser = parent; ppanel = new ProgressPanel ("No index found", "Generate", RootTree.MakeIndex, NewIndexCreated); browser.index_vbox.Add (ppanel); browser.index_vbox.Show (); } void NewIndexCreated () { index_reader = browser.help_tree.GetIndex (); //restore widgets browser.index_vbox.Remove (ppanel); CreateWidget (); browser.index_vbox.ShowAll (); } IndexBrowser (Browser parent, IndexReader ir) { browser = parent; index_reader = ir; CreateWidget (); } void CreateWidget () { // // Create the widget // Frame frame1 = new Frame (); VBox vbox1 = new VBox (false, 0); frame1.Add (vbox1); // title HBox hbox1 = new HBox (false, 3); hbox1.BorderWidth = 3; Image icon = new Image (Stock.Index, IconSize.Menu); Label look_for_label = new Label ("Look for:"); look_for_label.Justify = Justification.Left; look_for_label.Xalign = 0; hbox1.PackEnd (look_for_label, true, true, 0); hbox1.PackEnd (icon, false, true, 0); hbox1.ShowAll (); vbox1.PackStart (hbox1, false, true, 0); // entry vbox1.PackStart (new HSeparator (), false, true, 0); browser.index_entry = new Entry (); browser.index_entry.Activated += browser.OnIndexEntryActivated; browser.index_entry.Changed += browser.OnIndexEntryChanged; browser.index_entry.FocusInEvent += browser.OnIndexEntryFocused; browser.index_entry.KeyPressEvent += browser.OnIndexEntryKeyPress; vbox1.PackStart (browser.index_entry, false, true, 0); vbox1.PackStart (new HSeparator (), false, true, 0); //search results browser.search_box = new VBox (); vbox1.PackStart (browser.search_box, true, true, 0); vbox1.ShowAll (); // // Setup the widget // index_list = new BigList (index_reader); //index_list.SetSizeRequest (100, 400); index_list.ItemSelected += new ItemSelected (OnIndexSelected); index_list.ItemActivated += new ItemActivated (OnIndexActivated); HBox box = new HBox (false, 0); box.PackStart (index_list, true, true, 0); Scrollbar scroll = new VScrollbar (index_list.Adjustment); box.PackEnd (scroll, false, false, 0); browser.search_box.PackStart (box, true, true, 0); box.ShowAll (); // // Setup the matches. // browser.matches = new Frame (); match_model = new MatchModel (this); browser.matches.Hide (); match_list = new BigList (match_model); match_list.ItemSelected += new ItemSelected (OnMatchSelected); match_list.ItemActivated += new ItemActivated (OnMatchActivated); HBox box2 = new HBox (false, 0); box2.PackStart (match_list, true, true, 0); Scrollbar scroll2 = new VScrollbar (match_list.Adjustment); box2.PackEnd (scroll2, false, false, 0); box2.ShowAll (); browser.matches.Add (box2); index_list.SetSizeRequest (100, 200); browser.index_vbox.PackStart (frame1); browser.index_vbox.PackEnd (browser.matches); } // // This class is used as an implementation of the IListModel // for the matches for a given entry. // public class MatchModel : IListModel { IndexBrowser index_browser; Browser browser; public MatchModel (IndexBrowser parent) { index_browser = parent; browser = parent.browser; } public int Rows { get { if (index_browser.current_entry != null) return index_browser.current_entry.Count; else return 0; } } public string GetValue (int row) { Topic t = index_browser.current_entry [row]; // Names from the ECMA provider are somewhat // ambigious (you have like a million ToString // methods), so lets give the user the full name // Filter out non-ecma if (t.Url [1] != ':') return t.Caption; switch (t.Url [0]) { case 'C': return t.Url.Substring (2) + " constructor"; case 'M': return t.Url.Substring (2) + " method"; case 'P': return t.Url.Substring (2) + " property"; case 'F': return t.Url.Substring (2) + " field"; case 'E': return t.Url.Substring (2) + " event"; default: return t.Caption; } } public string GetDescription (int row) { return GetValue (row); } } void ConfigureIndex (int index) { current_entry = index_reader.GetIndexEntry (index); if (current_entry.Count > 1){ browser.matches.Show (); match_list.Reload (); match_list.Refresh (); } else { browser.matches.Hide (); } } // // When an item is selected from the main index list // void OnIndexSelected (int index) { ConfigureIndex (index); if (browser.matches.Visible == true) match_list.Selected = 0; } void OnIndexActivated (int index) { if (browser.matches.Visible == false) browser.LoadUrl (current_entry [0].Url); } void OnMatchSelected (int index) { } void OnMatchActivated (int index) { browser.LoadUrl (current_entry [index].Url); } int FindClosest (string text) { int low = 0; int top = index_reader.Rows-1; int high = top; bool found = false; int best_rate_idx = Int32.MaxValue, best_rate = -1; while (low <= high){ int mid = (high + low) / 2; //Console.WriteLine ("[{0}, {1}] -> {2}", low, high, mid); string s; int p = mid; for (s = index_reader.GetValue (mid); s [0] == ' ';){ if (p == high){ if (p == low){ if (best_rate_idx != Int32.MaxValue){ //Console.WriteLine ("Bestrated: "+best_rate_idx); //Console.WriteLine ("Bestrated: "+index_reader.GetValue(best_rate_idx)); return best_rate_idx; } else { //Console.WriteLine ("Returning P="+p); return p; } } high = mid; break; } if (p < 0) return 0; s = index_reader.GetValue (++p); //Console.WriteLine (" Advancing to ->"+p); } if (s [0] == ' ') continue; int c, rate; c = Rate (text, s, out rate); //Console.WriteLine ("[{0}] Text: {1} at {2}", text, s, p); //Console.WriteLine (" Rate: {0} at {1}", rate, p); //Console.WriteLine (" Best: {0} at {1}", best_rate, best_rate_idx); //Console.WriteLine (" {0} - {1}", best_rate, best_rate_idx); if (rate >= best_rate){ best_rate = rate; best_rate_idx = p; } if (c == 0) return mid; if (low == high){ //Console.WriteLine ("THISPATH"); if (best_rate_idx != Int32.MaxValue) return best_rate_idx; else return low; } if (c < 0){ high = mid; } else { if (low == mid) low = high; else low = mid; } } // Console.WriteLine ("Another"); if (best_rate_idx != Int32.MaxValue) return best_rate_idx; else return high; } int Rate (string user_text, string db_text, out int rate) { int c = String.Compare (user_text, db_text, true); if (c == 0){ rate = 0; return 0; } int i; for (i = 0; i < user_text.Length; i++){ if (db_text [i] != user_text [i]){ rate = i; return c; } } rate = i; return c; } public void SearchClosest (string text) { index_list.Selected = FindClosest (text); } public void LoadSelected () { if (browser.matches.Visible == true) { if (match_list.Selected != -1) OnMatchActivated (match_list.Selected); } else { if (index_list.Selected != -1) OnIndexActivated (index_list.Selected); } } } public enum Mode { Viewer, Editor } // // A Tab is a Notebok with two pages, one for editing and one for visualizing // public class Tab : Notebook { // Our HTML preview during editing. public IHtmlRender html_preview; // Where we render the contents public IHtmlRender html; public TextView text_editor; public Mode Tab_mode; public History history; private Browser browser; private Label titleLabel; private Image EditImg; public HBox TabLabel; public string Title { get { return titleLabel.Text; } set { titleLabel.Text = value; } } public Node CurrentNode; public System.Xml.XmlNode edit_node; public string edit_url; void FocusOut (object sender, FocusOutEventArgs args) { if (TabMode == Mode.Editor) text_editor.GrabFocus (); } private static IHtmlRender LoadRenderer (string dll, Browser browser) { if (!System.IO.File.Exists (dll)) return null; try { Assembly ass = Assembly.LoadFile (dll); System.Type type = ass.GetType ("Monodoc." + ass.GetName ().Name, false, false); if (type == null) return null; return (IHtmlRender) Activator.CreateInstance (type, new object[1] { browser.help_tree }); } catch (Exception ex) { Console.Error.WriteLine (ex); } return null; } #if MACOS public static IHtmlRender GetRenderer (string engine, Browser browser) { var renderer = new GtkHtmlHtmlRender (browser.help_tree); renderer.Initialize (); return renderer; } #else public static IHtmlRender GetRenderer (string engine, Browser browser) { IHtmlRender renderer = LoadRenderer (System.IO.Path.Combine (AppDomain.CurrentDomain.BaseDirectory, engine + "HtmlRender.dll"), browser); if (renderer != null) { try { if (renderer.Initialize ()) { Console.WriteLine ("using " + renderer.Name); return renderer; } } catch (Exception ex) { Console.Error.WriteLine (ex); } } foreach (string backend in Driver.engines) { if (backend != engine) { renderer = LoadRenderer (System.IO.Path.Combine (AppDomain.CurrentDomain.BaseDirectory, backend + "HtmlRender.dll"), browser); if (renderer != null) { try { if (renderer.Initialize ()) { Console.WriteLine ("using " + renderer.Name); return renderer; } } catch (Exception ex) { Console.Error.WriteLine (ex); } } } } return null; } #endif public Tab(Browser br) { browser = br; CurrentNode = br.help_tree; ShowTabs = false; ShowBorder = false; TabBorder = 0; TabHborder = 0; history = new History (browser.back_button, browser.forward_button); // // First Page // ScrolledWindow html_container = new ScrolledWindow(); html_container.Show(); // // Setup the HTML rendering and preview area // html = GetRenderer (browser.engine, browser); html_preview = GetRenderer (browser.engine, browser); if (html == null || html_preview == null) throw new Exception ("Couldn't find html renderer!"); browser.capabilities = html.Capabilities; HelpSource.FullHtml = false; HelpSource.UseWebdocCache = true; if ((html.Capabilities & Capabilities.Css) != 0) HelpSource.use_css = true; //Prepare Font for css (TODO: use GConf?) if ((html.Capabilities & Capabilities.Fonts) != 0 && SettingsHandler.Settings.preferred_font_size == 0) { Pango.FontDescription font_desc = Pango.FontDescription.FromString ("Sans 12"); SettingsHandler.Settings.preferred_font_family = font_desc.Family; SettingsHandler.Settings.preferred_font_size = 100; //size: 100% } html_container.Add (html.HtmlPanel); html.UrlClicked += new EventHandler (browser.LinkClicked); html.OnUrl += new EventHandler (browser.OnUrlMouseOver); browser.context_id = browser.statusbar.GetContextId (""); AppendPage(html_container, new Label("Html")); // // Second Page: editing // VBox vbox1 = new VBox(false, 0); VBox MainPart = new VBox(false, 0); // // TextView for XML code // ScrolledWindow sw = new ScrolledWindow(); text_editor = new TextView(); text_editor.Buffer.Changed += new EventHandler (EditedTextChanged); text_editor.WrapMode = WrapMode.Word; sw.Add(text_editor); text_editor.FocusOutEvent += new FocusOutEventHandler (FocusOut); // // XML editing buttons // HBox EdBots = new HBox(false, 2); Button button1 = new Button(""); EdBots.PackStart(button1); Button button2 = new Button(""); EdBots.PackStart(button2); Button button3 = new Button("<_table>"); EdBots.PackStart(button3); Button button4 = new Button("<_see...>"); EdBots.PackStart(button4); Button button5 = new Button("<_para>"); EdBots.PackStart(button5); Button button6 = new Button("Add Note"); EdBots.PackStart(button6); button1.Clicked += new EventHandler (OnInsertExampleClicked); button2.Clicked += new EventHandler (OnInsertListClicked); button3.Clicked += new EventHandler (OnInsertTableClicked); button4.Clicked += new EventHandler (OnInsertType); button5.Clicked += new EventHandler (OnInsertParaClicked); button6.Clicked += new EventHandler (OnInsertNoteClicked); Frame html_preview_frame = new Frame("Preview"); ScrolledWindow html_preview_container = new ScrolledWindow(); // // code preview panel // html_preview_container.Add (html_preview.HtmlPanel); html_preview_frame.Add(html_preview_container); MainPart.PackStart(sw); MainPart.PackStart(EdBots, false, false, 0); MainPart.PackStart(html_preview_frame); // // Close and Save buttons // HBox MainBots = new HBox(false, 3); HBox Filling = new HBox(false, 0); Button close = new Button("C_lose"); Button save = new Button("S_ave"); Button restore = new Button("_Restore"); close.Clicked += new EventHandler (OnCancelEdits); save.Clicked += new EventHandler (OnSaveEdits); restore.Clicked += new EventHandler (OnRestoreEdits); MainBots.PackStart(Filling); MainBots.PackStart(close, false, false, 0); MainBots.PackStart(save, false, false, 0); MainBots.PackStart(restore, false, false, 0); vbox1.PackStart(MainPart); vbox1.PackStart(MainBots, false, false, 0); AppendPage(vbox1, new Label("Edit XML")); // //Create the Label for the Tab // TabLabel = new HBox(false, 2); titleLabel = new Label(""); //Close Tab button Button tabClose = new Button(); Image img = new Image(Stock.Close, IconSize.SmallToolbar); tabClose.Add(img); tabClose.Relief = Gtk.ReliefStyle.None; tabClose.SetSizeRequest (18, 18); tabClose.Clicked += new EventHandler (browser.OnCloseTab); //Icon showed when the Tab is in Edit Mode EditImg = new Image (Stock.Convert, IconSize.SmallToolbar); TabLabel.PackStart (EditImg, false, true, 2); TabLabel.PackStart (titleLabel, true, true, 0); TabLabel.PackStart (tabClose, false, false, 2); // needed, otherwise even calling show_all on the notebook won't // make the hbox contents appear. TabLabel.ShowAll(); EditImg.Visible = false; } public Mode TabMode { get { return Tab_mode; } set { Tab_mode = value; } } public void SetMode (Mode m) { if (Tab_mode == m) return; if (m == Mode.Viewer) { this.Page = 0; browser.cut1.Sensitive = false; browser.paste1.Sensitive = false; browser.print.Sensitive = true; EditImg.Visible = false; } else { this.Page = 1; browser.cut1.Sensitive = true; browser.paste1.Sensitive = true; browser.print.Sensitive = false; EditImg.Visible = true; } Tab_mode = m; } // Events for the Editor void OnInsertParaClicked (object sender, EventArgs a) { text_editor.Buffer.InsertAtCursor ("\n\n"); } void OnInsertNoteClicked (object sender, EventArgs a) { text_editor.Buffer.InsertAtCursor ("\n\n \n \n"); } void OnInsertExampleClicked (object sender, EventArgs a) { text_editor.Buffer.InsertAtCursor ("\n\n \n \n"); } void OnInsertListClicked (object sender, EventArgs a) { text_editor.Buffer.InsertAtCursor ("\n\n \n First Item\n \n"); } void OnInsertTableClicked (object sender, EventArgs a) { text_editor.Buffer.InsertAtCursor ("\n\n \n Column\n" + " Description\n" + " \n" + " \n" + " Term\n" + " Description\n" + " \n" + ""); } void OnInsertType (object sender, EventArgs a) { text_editor.Buffer.InsertAtCursor (""); } void OnSaveEdits (object sender, EventArgs a) { try { edit_node.InnerXml = text_editor.Buffer.Text; } catch (Exception e) { browser.statusbar.Pop (browser.context_id); browser.statusbar.Push (browser.context_id, e.Message); return; } string [] uSplit = EditingUtils.ParseEditUrl (edit_url); if (uSplit[0].StartsWith ("monodoc:")) EditingUtils.SaveChange (edit_url, browser.help_tree, edit_node, GetNiceUrl (browser.CurrentTab.CurrentNode)); else if (uSplit[0].StartsWith ("file:")) EditingUtils.SaveChange (edit_url, browser.help_tree, edit_node, String.Empty); else Console.WriteLine ("Edit url wrong: {0}", edit_url); SetMode (Mode.Viewer); history.ActivateCurrent (); } public static string GetNiceUrl (Node node) { if (node.Element.StartsWith("N:")) return node.Element; string name, full; int bk_pos = node.Caption.IndexOf (' '); // node from an overview if (bk_pos != -1) { name = node.Caption.Substring (0, bk_pos); full = node.Parent.Caption + "." + name.Replace ('.', '+'); return "T:" + full; } // node that lists constructors, methods, fields, ... if ((node.Caption == "Constructors") || (node.Caption == "Fields") || (node.Caption == "Events") || (node.Caption == "Members") || (node.Caption == "Properties") || (node.Caption == "Methods") || (node.Caption == "Operators")) { bk_pos = node.Parent.Caption.IndexOf (' '); name = node.Parent.Caption.Substring (0, bk_pos); full = node.Parent.Parent.Caption + "." + name.Replace ('.', '+'); return "T:" + full + "/" + node.Element; } int pr_pos = node.Caption.IndexOf ('('); // node from a constructor if (node.Parent.Element == "C") { name = node.Parent.Parent.Parent.Caption; int idx = node.PublicUrl.IndexOf ('/'); return node.PublicUrl[idx+1] + ":" + name + "." + node.Caption.Replace ('.', '+'); // node from a method with one signature, field, property, operator } else if (pr_pos == -1) { bk_pos = node.Parent.Parent.Caption.IndexOf (' '); name = node.Parent.Parent.Caption.Substring (0, bk_pos); full = node.Parent.Parent.Parent.Caption + "." + name.Replace ('.', '+'); int idx = node.PublicUrl.IndexOf ('/'); return node.PublicUrl[idx+1] + ":" + full + "." + node.Caption; // node from a method with several signatures } else { bk_pos = node.Parent.Parent.Parent.Caption.IndexOf (' '); name = node.Parent.Parent.Parent.Caption.Substring (0, bk_pos); full = node.Parent.Parent.Parent.Parent.Caption + "." + name.Replace ('.', '+'); int idx = node.PublicUrl.IndexOf ('/'); return node.PublicUrl[idx+1] + ":" + full + "." + node.Caption; } } void OnCancelEdits (object sender, EventArgs a) { SetMode (Mode.Viewer); history.ActivateCurrent (); } void OnRestoreEdits (object sender, EventArgs a) { EditingUtils.RemoveChange (edit_url, browser.help_tree); SetMode (Mode.Viewer); history.ActivateCurrent (); } bool queued = false; void EditedTextChanged (object sender, EventArgs args) { if (queued) return; queued = true; GLib.Timeout.Add (500, delegate { queued = false; StringWriter sw = new StringWriter (); XmlWriter w = new XmlTextWriter (sw); var converter = new Monodoc.Generators.Html.Ecma2Html (); try { edit_node.InnerXml = text_editor.Buffer.Text; EditingUtils.RenderEditPreview (edit_url, browser.help_tree, edit_node, w); w.Flush (); } catch (Exception e) { browser.statusbar.Pop (browser.context_id); browser.statusbar.Push (browser.context_id, e.Message); return false; } browser.statusbar.Pop (browser.context_id); browser.statusbar.Push (browser.context_id, "XML OK"); string s = converter.Export (sw.ToString (), new Dictionary ()); html_preview.Render(s); return false; }); } } } mono-tools-2.11/docbrowser/MonoWebBrowserHtmlRender.cs0000775000175000017500000001430212225357701025173 0ustar00directhexdirecthex00000000000000//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. // //Copyright (c) 2008 Novell, Inc. // //Authors: // Andreia Gaita (avidigal@novell.com) // using System; using Mono.WebBrowser; using Gtk; using System.IO; using System.Text; using System.Collections; namespace Monodoc { public class MonoWebBrowserHtmlRender : IHtmlRender { BrowserWidget html_panel; RootTree help_tree; public MonoWebBrowserHtmlRender (RootTree help_tree) { this.help_tree = help_tree; } public event EventHandler OnUrl; public event EventHandler UrlClicked; // Jump to an anchor of the form public void JumpToAnchor (string anchor_name) { } //Copy to the clipboard the selcted text public void Copy () { } //Select all the text public void SelectAll () { } // Variable that handles the info encessary for the events // As every implementation of HtmlRender will have differents events // we try to homogenize them with the variabel string url; public string Url { get {return url; } } public Widget HtmlPanel { get { return (Widget)html_panel; } } public void Print (string Html) { html_panel.browser.ExecuteScript ("print();"); return; } LoadFinishedEventHandler loadEvent; public bool Initialize () { html_panel = new BrowserWidget (); html_panel.Realized += delegate (object sender, EventArgs e) { html_panel.browser.NavigationRequested += delegate (object sender1, NavigationRequestedEventArgs e1) { url = CheckUrl (e1.Uri); // if the file is cached on disk, return if (url.StartsWith ("file:///") || url.StartsWith("javascript:", StringComparison.InvariantCultureIgnoreCase)) return; if (UrlClicked != null) UrlClicked (this, new EventArgs()); e1.Cancel = true; }; html_panel.browser.StatusChanged += delegate (object sender1, StatusChangedEventArgs e1) { url = e1.Message; if (OnUrl != null) OnUrl (this, new EventArgs ()); }; }; cache_imgs = new Hashtable(); tmpPath = Path.Combine (Path.GetTempPath (), "monodoc"); return html_panel.browser.Initialized; } // URL like T:System.Activator are lower cased by gecko to t.;System.Activator // so we revert that string CheckUrl (string u) { if (u.IndexOf (':') == 1) return Char.ToUpper (u[0]) + u.Substring (1); return u; } static int tmp_file = 0; string tmpPath; Hashtable cache_imgs; public void Render (string html_code) { string r = ProcessImages (html_code); // if the html code is too big, write it down to a tmp file if (((uint) r.Length) > 50000) { string filename = (tmp_file++) + ".html"; string filepath = Path.Combine (tmpPath, filename); using (FileStream file = new FileStream (filepath, FileMode.Create)) { StreamWriter sw = new StreamWriter (file); sw.Write (r); sw.Close (); } html_panel.browser.Navigation.Go (filepath); } else { html_panel.browser.Render (r); } } // Substitute the src of the images with the appropriate path string ProcessImages (string html_code) { //If there are no Images return fast int pos = html_code.IndexOf ("Communications Problem
There was a communications problem when communicating with the Mono Documentation Server.Congratulations! You can now contribute your changes to MonoDoc by using the File/Upload menu option.Error: Monodoc encountered a failure when requesting a password for your e-mail address. Try again later.Password Problem The passkey entered is incorrect. Please try again.Please wait MonoDoc is checking the server version.Plugins: ECMA Documentation. Mono XML Documentation. Mono Handbook. Manual Pages. Compiler Errors. ECMA C# Specification.Status: Terminated The request to the Monodoc server has been cancelled.Version missmatch This version of MonoDoc is not compatible with the current Monodoc server, please upgrade your MonoDoc installation.monodoc: The Mono Documentation Library viewerAbout monodocCancelCollapse AllCommentContinueE-Mail:Login configurationMono Documentation LibraryMonoDoc is logging into the server.Monodoc Documentation Updates Uploader. Monodoc is requesting an account for you.Name:New CommentOkOnce you receive your password on the mail, please enter it here: Password:QuitSelect AllShow CommentsShow Inherited MembersTODO: Some advise on posting here.Title:Uploading Documentation Updates - MonoDocYou can edit the contents of the API documentation in MonoDoc and contribute those back. To do this you must agree to relicense your updates under the terms of the MIT X11 Open Source License and register your email address with the documentation service. If you agree, click Continue_Bookmarks_Contents_Copy_Edit_Email:_File_Help_Index_Search_Viewlookup_entryn/axxProject-Id-Version: Mono Tools Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-22 17:13-0500 PO-Revision-Date: 2004-07-06 00:13-0300 Last-Translator: Maurício de Lemos Rodrigues Collares Neto Language-Team: Maurício de Lemos Rodrigues Collares Neto MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; *01101123456789Problema na comunicação Houve um problema de comunicação ao tentar se comunicar com o Servidor de Documentação do Mono.Parabéns! Agora você pode contribuir suas mudanças para o MonoDoc usando a opção de menu Arquivo/Enviar contribuição.Erro: O Monodoc encontrou um erro ao requisitar uma senha pro seu endereço de email. Tente de novo mais tarde.Problema com a senha A senha digitada está incorreta. Favor tentar novamente.Favor esperar O MonoDoc está verificando a versão do servidor.Plugins: ECMA Documentation. Mono XML Documentation. Mono Handbook. Manual Pages. Compiler Errors. ECMA C# Specification.Status: Terminado A requisição ao servidor do Monodoc foi cancelada.Incompatibilidade de versões Esta versão do MonoDoc não é compatível com o servidor atual do Monodoc, favor atualizar a sua instalação do MonoDoc.monodoc: O visualizador da Bibiloteca de Documentação do MonoSobre o monodocCancelarContrair todosComentárioContinuarE-Mail:Configuração de loginBiblioteca de documentação do MonoO MonoDoc está autenticando-se no servidor.Enviador de atualizações para a documentação do MonoDoc. O Monodoc está requisitando uma conta para você.Nome:Novo comentárioOkQuando você receber a sua senha no email, favor digitá-la aqui: Senha:SairSelecionar tudoExibir comentáriosExibir membros herdadosTODO: Alguns conselhos sobre envio aqui.Título:Enviando atualizações de documentação - MonoDocVocê pode editar o conteúdo da documentação da API no MonoDoc e contribuir este de volta. Para fazer isto, você tem que concordar em re-licenciar suas atualizações sob os termos da licença Open Source MIT X11 e registrar seu endereço de email com o serviço de documentação. Se você concorda, clique em Continuar_Marcadores_Conteúdo_Copiar_Editar_Email:_ArquivoA_juda_Índice_BuscaE_xibirlookup_entryn/dxxmono-tools-2.11/po/LINGUAS0000664000175000017500000000007712225357701017240 0ustar00directhexdirecthex00000000000000# please keep this list sorted alphabeticallyca da es fr pt_BR mono-tools-2.11/po/POTFILES.in0000664000175000017500000000003112225357701017756 0ustar00directhexdirecthex00000000000000docbrowser/browser.glade mono-tools-2.11/po/es.gmo0000664000175000017500000000731712225357742017337 0ustar00directhexdirecthex000000000000004G\xy6%8J P^r  ' ,:?Rgk  #( /=,]' !8  BPci|W  # !, /N ~         #2 V j  &    "  : C d x  #      * 2 9 M ,k )  & <#`q,1!#& '*/$ 4)  ,%30 (2.-"+File {0} exists.Already running some test(s).CancelCancelled on user request.Do you have correct permissions to write to that file?Do you want to overwrite it?Don't save resultsElapsed time: {0}ErrorError detailsError loading '{0}'Error loading assemblyErrors and failuresExit programFile exists. Overwrite?Hide details <<Loading test {0} of {1}Loading {0}...No assembly loaded.No test results availableOpenOpen assemblyQuitResults not saved.Results saved to {0}RunRun selected test fixture(s)Running tests...Save AsSave resultsSave results to a XML fileSave results to...Select an assembly to loadShow details >>Standard errorStandard outStopTest: Tests not runThe program will terminate now.There has been an error saving the results. There has been an unhandled exception. Unhandled ExceptionWarning: unexpected combination.You have to select a test to run.You must run some tests in order to get results to save._Clear recent_Recent assemblieslabeltranslator_credits{0} tests loaded.Project-Id-Version: GNUnit Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-22 17:13-0500 PO-Revision-Date: 2004-08-05 11:14+0200 Last-Translator: Gonzalo Paniagua Javier Language-Team: Gonzalo Paniagua Javier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El fichero {0} existe.Ya se están ejecutando tests.CancelarCancelado a petición del usuario¿Tiene permiso de escritura sobre ese fichero?¿Lo quiere sobreescribir?No guardar resultadosTiempo transcurrido: {0}ErrorDetalles del errorError cargando '{0}'Error cargando assemblyErrores y fallosSalir del programaEl fichero existe. ¿Sobreescribir?Ocultar detalles <<Cargando test {0} de {1}Cargando {0}...No hay ningún assembly cargado.No hay resultados de tests disponiblesAbrirCarga un ensambladoSalirNo se han guardado los resultados.Resultados guardados en {0}EjecutarEjecutar los tests seleccionadosEjecutando tests...Guardar comoGuardar resultadosGuardar resultados a un fichero XMLGuardar resultados como...Elija un assembly para cargarMostrar detalles >>Salida de errorSalida estándarDetenerTest: Tests no ejecutadosEl programa terminará ahora.Ocurrió un error guardando los resultados. Ha ocurrido una excepción no controlada Excepción no controladaAviso: combinación no esperada.Debe seleccionar un test para ejecutarDebe ejecutar algún test para tener resultados que guardar._Borra recientesFicheros _recientesetiquetaGonzalo Paniagua Javier {0} tests cargados.mono-tools-2.11/po/fr.po0000664000175000017500000003132212225357701017157 0ustar00directhexdirecthex00000000000000# GNUnit. # Copyright (C) 2003, 2004 Sebastien Pouliot # This file is distributed under the same license as the GNUnit package. # Sebastien Pouliot , 2003, 2004. # msgid "" msgstr "" "Project-Id-Version: GNUnit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-22 17:13-0500\n" "PO-Revision-Date: 2004-08-05 11:14+0200\n" "Last-Translator: Sebastien Pouliot \n" "Language-Team: Sebastien Pouliot \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: gnunit/src/AssemblyStore.cs:304 msgid "Already running some test(s)." msgstr "Test(s) en cours d'exécution." #: gnunit/src/AssemblyStore.cs:587 msgid "Warning: unexpected combination." msgstr "Avertissement: combinaison innattendue." #: gnunit/src/AssemblyStore.cs:596 #, csharp-format msgid "Don't know anything about {0}" msgstr "Aucune information n'est disponible sur {0}" #: gnunit/src/FileDialog.cs:26 msgid "Select an assembly to load" msgstr "Choisir un assembly à charger" #: gnunit/src/nunit-gtk.glade:10 msgid "Mono NUnit2 GUI" msgstr "" #: gnunit/src/nunit-gtk.glade:72 msgid "_Recent assemblies" msgstr "" #: gnunit/src/nunit-gtk.glade:92 msgid "_Clear recent" msgstr "" #: gnunit/src/nunit-gtk.glade:165 msgid "Enable/disable by category" msgstr "" #: gnunit/src/nunit-gtk.glade:166 msgid "_Categories" msgstr "" #: gnunit/src/nunit-gtk.glade:219 msgid "Open assembly" msgstr "" #: gnunit/src/nunit-gtk.glade:220 msgid "Open" msgstr "" #: gnunit/src/nunit-gtk.glade:234 msgid "Save results to a XML file" msgstr "" #: gnunit/src/nunit-gtk.glade:235 msgid "Save As" msgstr "" #: gnunit/src/nunit-gtk.glade:249 msgid "Run selected test fixture(s)" msgstr "" #: gnunit/src/nunit-gtk.glade:250 gnunit/src/nunit-gtk.glade:516 msgid "Run" msgstr "" #: gnunit/src/nunit-gtk.glade:265 docbrowser/browser.glade:1538 #: docbrowser/browser.glade:1917 docbrowser/browser.glade:2208 #: docbrowser/browser.glade:2557 msgid "Cancel" msgstr "" #: gnunit/src/nunit-gtk.glade:266 msgid "Stop" msgstr "" #: gnunit/src/nunit-gtk.glade:280 msgid "Exit program" msgstr "" #: gnunit/src/nunit-gtk.glade:281 docbrowser/browser.glade:138 msgid "Quit" msgstr "" #: gnunit/src/nunit-gtk.glade:390 msgid "Test: " msgstr "" #: gnunit/src/nunit-gtk.glade:588 msgid "Errors and failures" msgstr "" #: gnunit/src/nunit-gtk.glade:641 msgid "Tests not run" msgstr "" #: gnunit/src/nunit-gtk.glade:699 msgid "Standard error" msgstr "" #: gnunit/src/nunit-gtk.glade:757 msgid "Standard out" msgstr "" #: gnunit/src/nunit-gtk.glade:815 gnunit/src/main.cs:686 msgid "Error" msgstr "" #: gnunit/src/nunit-gtk.glade:904 msgid "label" msgstr "" #: gnunit/src/nunit-gtk.glade:936 gnunit/src/main.cs:104 msgid "Show details >>" msgstr "" #: gnunit/src/nunit-gtk.glade:1009 msgid "Error details" msgstr "" #: gnunit/src/nunit-gtk.glade:1056 msgid "File exists. Overwrite?" msgstr "" #: gnunit/src/nunit-gtk.glade:1084 msgid "Don't save results" msgstr "" #: gnunit/src/nunit-gtk.glade:1098 msgid "Save results" msgstr "" #: gnunit/src/main.cs:37 #, csharp-format msgid "File {0} exists." msgstr "Le fichier {0} existe." #: gnunit/src/main.cs:38 msgid "Do you want to overwrite it?" msgstr "Voulez-vous le ré-écrire?" #: gnunit/src/main.cs:107 msgid "Hide details <<" msgstr "Moins de détails <<" #: gnunit/src/main.cs:200 msgid "Uncategorized" msgstr "" #: gnunit/src/main.cs:408 msgid "No assembly loaded." msgstr "Aucun assembly n'est chargé." #: gnunit/src/main.cs:434 #, csharp-format msgid "Loading {0}..." msgstr "Chargement de {0}..." #: gnunit/src/main.cs:546 #, csharp-format msgid "Loading test {0} of {1}" msgstr "Chargement du test {0} de {1}" #: gnunit/src/main.cs:557 msgid "Error loading assembly" msgstr "Erreur lors du chargement de l'assembly" #: gnunit/src/main.cs:558 #, csharp-format msgid "Error loading '{0}'" msgstr "Erreur lors du chargement de '{0}'" #: gnunit/src/main.cs:608 msgid "translator_credits" msgstr "Sebastien Pouliot " #: gnunit/src/main.cs:630 msgid "You have to select a test to run." msgstr "Un test doit être choisi pour s'exécuter." #: gnunit/src/main.cs:660 msgid "No test results available" msgstr "Aucun résultat des tests n'est disponible" #: gnunit/src/main.cs:661 msgid "You must run some tests in order to get results to save." msgstr "Des tests doivent être exécutés avant de conserver les résultats." #: gnunit/src/main.cs:667 msgid "Save results to..." msgstr "Résultats conservés dans..." #: gnunit/src/main.cs:676 msgid "Results not saved." msgstr "Résultats non conservés." #: gnunit/src/main.cs:687 msgid "There has been an error saving the results.\n" msgstr "Une erreur est survenue lors de la conservation des résultats.\n" #: gnunit/src/main.cs:688 msgid "Do you have correct permissions to write to that file?" msgstr "Avez-vous les permissions requises pour écrire dans ce fichier?" #: gnunit/src/main.cs:696 #, csharp-format msgid "Results saved to {0}" msgstr "Résultats conservés dans {0}" #: gnunit/src/main.cs:774 #, fuzzy, csharp-format msgid "Tests (assertions): {0} ({3}) Ignored: {1} Failures: {2}" msgstr "Testés: {0} Ignorés: {1} Echecs: {2}" #: gnunit/src/main.cs:952 msgid "Running tests..." msgstr "Tests en cours d'exécution..." #: gnunit/src/main.cs:995 msgid "Cancelled on user request." msgstr "Opération interrompue sur demande de l'utilisateur." #: gnunit/src/main.cs:1033 #, csharp-format msgid "{0} tests loaded." msgstr "{0} tests chargés." #: gnunit/src/main.cs:1051 #, csharp-format msgid "Elapsed time: {0}" msgstr "Temps d'éxécution: {0}" #: gnunit/src/main.cs:1061 msgid "Unhandled Exception" msgstr "Exception non traitée" #: gnunit/src/main.cs:1061 msgid "There has been an unhandled exception.\n" msgstr "" #: gnunit/src/main.cs:1062 msgid "The program will terminate now." msgstr "Le logiciel va se terminer maintenant." #: docbrowser/browser.glade:8 msgid "Mono Documentation Library" msgstr "" #: docbrowser/browser.glade:35 msgid "_File" msgstr "" #: docbrowser/browser.glade:44 msgid "New _Tab" msgstr "" #: docbrowser/browser.glade:66 msgid "_Lookup URL..." msgstr "" #: docbrowser/browser.glade:88 msgid "_Print..." msgstr "" #: docbrowser/browser.glade:116 msgid "_Close Tab" msgstr "" #: docbrowser/browser.glade:164 msgid "_Edit" msgstr "" #: docbrowser/browser.glade:172 msgid "_Cut" msgstr "" #: docbrowser/browser.glade:194 msgid "_Copy" msgstr "" #: docbrowser/browser.glade:216 msgid "_Paste" msgstr "" #: docbrowser/browser.glade:244 msgid "Select All" msgstr "" #: docbrowser/browser.glade:258 msgid "_View" msgstr "" #: docbrowser/browser.glade:267 msgid "Collapse All" msgstr "" #: docbrowser/browser.glade:276 msgid "Show Inherited Members" msgstr "" #: docbrowser/browser.glade:286 msgid "Show Comments" msgstr "" #: docbrowser/browser.glade:300 msgid "_Bookmarks" msgstr "" #: docbrowser/browser.glade:315 msgid "_Contributing" msgstr "" #: docbrowser/browser.glade:323 msgid "_Upload Contributions..." msgstr "" #: docbrowser/browser.glade:345 msgid "_View Contribution Statistics..." msgstr "" #: docbrowser/browser.glade:372 msgid "Edit Mode" msgstr "" #: docbrowser/browser.glade:386 msgid "_Help" msgstr "" #: docbrowser/browser.glade:395 msgid "About..." msgstr "" #: docbrowser/browser.glade:548 msgid "n/a" msgstr "" #: docbrowser/browser.glade:657 msgid "_Contents" msgstr "" #: docbrowser/browser.glade:721 msgid "_Index" msgstr "" #: docbrowser/browser.glade:784 msgid "_Search" msgstr "" #: docbrowser/browser.glade:856 msgid "About monodoc" msgstr "" #: docbrowser/browser.glade:907 msgid "" "monodoc: The Mono Documentation Library viewer" msgstr "" #: docbrowser/browser.glade:928 msgid "Version " msgstr "" #: docbrowser/browser.glade:970 msgid "" "Authors:\n" " Miguel de Icaza (miguel@ximian.com)\n" " Duncan Mak (duncan@ximian.com)\n" " Joshua Tauberer (tauberer@for.net)\n" " Lee Malabone\n" " Philip Van Hoof\n" " Johannes Roith (johannes@jroith.de)\n" " Alp Toker (alp@atoker.com)\n" " Piers Haken\n" " John Luke (jluke@cfl.rr.com)\n" " Ben Maurer\n" " Mario Sopena Novales (mario.sopena@gmail.com)\n" " Rafael Ferreira (raf@ophion.org)\n" "\t " msgstr "" #: docbrowser/browser.glade:1005 msgid "" "Plugins:\n" " ECMA Documentation.\n" " Mono XML Documentation.\n" " Mono Handbook.\n" " Manual Pages.\n" " Compiler Errors.\n" " ECMA C# Specification." msgstr "" #: docbrowser/browser.glade:1080 msgid "Lookup URL" msgstr "" #: docbrowser/browser.glade:1103 msgid "_URL to lookup:" msgstr "" #: docbrowser/browser.glade:1132 docbrowser/browser.glade:1360 #: docbrowser/browser.glade:1746 docbrowser/browser.glade:2726 #: docbrowser/browser.glade:2749 docbrowser/browser.glade:2798 msgid "*" msgstr "" #: docbrowser/browser.glade:1135 msgid "lookup_entry" msgstr "" #: docbrowser/browser.glade:1183 msgid "Login configuration" msgstr "" #: docbrowser/browser.glade:1215 msgid "" "You can edit the contents of the API documentation in MonoDoc and " "contribute\n" "those back. To do this you must agree to relicense your updates under the " "terms\n" "of the MIT X11 Open Source License and register your email address with the\n" "documentation service.\n" "\n" "If you agree, click Continue" msgstr "" #: docbrowser/browser.glade:1271 docbrowser/browser.glade:1432 #: docbrowser/browser.glade:1807 msgid "Continue" msgstr "" #: docbrowser/browser.glade:1300 msgid "0" msgstr "" #: docbrowser/browser.glade:1331 msgid "_Email:" msgstr "" #: docbrowser/browser.glade:1374 msgid "xx" msgstr "" #: docbrowser/browser.glade:1461 msgid "1" msgstr "" #: docbrowser/browser.glade:1486 msgid "Monodoc is requesting an account for you." msgstr "" #: docbrowser/browser.glade:1567 msgid "2" msgstr "" #: docbrowser/browser.glade:1592 msgid "" "Error: Monodoc encountered a failure when requesting\n" "a password for your e-mail address. Try again later." msgstr "" #: docbrowser/browser.glade:1628 docbrowser/browser.glade:2013 #: docbrowser/browser.glade:2102 docbrowser/browser.glade:2297 #: docbrowser/browser.glade:2387 docbrowser/browser.glade:2477 msgid "Ok" msgstr "" #: docbrowser/browser.glade:1658 msgid "3" msgstr "" #: docbrowser/browser.glade:1689 msgid "" "Once you receive your password on the mail, please enter it\n" "here:\n" msgstr "" #: docbrowser/browser.glade:1718 msgid "Password:" msgstr "" #: docbrowser/browser.glade:1837 msgid "4" msgstr "" #: docbrowser/browser.glade:1862 msgid "MonoDoc is logging into the server." msgstr "" #: docbrowser/browser.glade:1953 msgid "5" msgstr "" #: docbrowser/browser.glade:1978 msgid "" "Congratulations! \n" "\n" "You can now contribute your changes to MonoDoc by using \n" "the File/Upload menu option." msgstr "" #: docbrowser/browser.glade:2043 msgid "6" msgstr "" #: docbrowser/browser.glade:2068 msgid "" "Terminated \n" "\n" "The request to the Monodoc server has been cancelled." msgstr "" #: docbrowser/browser.glade:2132 msgid "7" msgstr "" #: docbrowser/browser.glade:2157 msgid "" "Please wait\n" "\n" "MonoDoc is checking the server version." msgstr "" #: docbrowser/browser.glade:2237 msgid "8" msgstr "" #: docbrowser/browser.glade:2262 msgid "" "Communications Problem \n" "\n" "There was a communications problem when communicating\n" "with the Mono Documentation Server." msgstr "" #: docbrowser/browser.glade:2327 msgid "9" msgstr "" #: docbrowser/browser.glade:2352 msgid "" "Version missmatch \n" "\n" "This version of MonoDoc is not compatible with the current Monodoc\n" "server, please upgrade your MonoDoc installation." msgstr "" #: docbrowser/browser.glade:2417 msgid "10" msgstr "" #: docbrowser/browser.glade:2442 msgid "" "Password Problem \n" "\n" "The passkey entered is incorrect. \n" "Please try again." msgstr "" #: docbrowser/browser.glade:2507 msgid "11" msgstr "" #: docbrowser/browser.glade:2528 msgid "Uploading Documentation Updates - MonoDoc" msgstr "" #: docbrowser/browser.glade:2583 msgid "Monodoc Documentation Updates Uploader. " msgstr "" #: docbrowser/browser.glade:2610 msgid "Status: " msgstr "" #: docbrowser/browser.glade:2668 msgid "New Comment" msgstr "" #: docbrowser/browser.glade:2690 msgid "TODO: Some advise on posting here." msgstr "" #: docbrowser/browser.glade:2766 msgid "Title:" msgstr "" #: docbrowser/browser.glade:2815 msgid "Comment" msgstr "" #: docbrowser/browser.glade:2841 msgid "E-Mail:" msgstr "" #: docbrowser/browser.glade:2867 docbrowser/browser.glade:3169 msgid "Name:" msgstr "" #: docbrowser/browser.glade:2987 msgid "Manage Bookmarks" msgstr "" #: docbrowser/browser.glade:3071 msgid "New Folder" msgstr "" #: docbrowser/browser.glade:3136 msgid "Add Bookmark" msgstr "" #: docbrowser/browser.glade:3227 msgid "Create in:" msgstr "" mono-tools-2.11/po/ca.po0000664000175000017500000003325112225357701017136 0ustar00directhexdirecthex00000000000000# Mono Tools # Copyright (C) 2004 Jordi Mas i Hernàndez # This file is distributed under the same license as the GNUnit package. # Jordi Mas i Hernàndez , 2004. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Mono Tools\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-22 17:13-0500\n" "PO-Revision-Date: 2004-05-28 19:18+0200\n" "Last-Translator: Jordi Mas i Hernàndez \n" "Language-Team: Jordi Mas i Hernàndez \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: gnunit/src/AssemblyStore.cs:304 msgid "Already running some test(s)." msgstr "Ja s'estan executant alguns tests" #: gnunit/src/AssemblyStore.cs:587 msgid "Warning: unexpected combination." msgstr "Avís: combinació no esperada." #: gnunit/src/AssemblyStore.cs:596 #, csharp-format msgid "Don't know anything about {0}" msgstr "No sé res de {0}" #: gnunit/src/FileDialog.cs:26 msgid "Select an assembly to load" msgstr "Seleccioneu un assembly per carregar" #: gnunit/src/nunit-gtk.glade:10 msgid "Mono NUnit2 GUI" msgstr "Mono NUnit2 GUI" #: gnunit/src/nunit-gtk.glade:72 msgid "_Recent assemblies" msgstr "Fitxers _recents" #: gnunit/src/nunit-gtk.glade:92 msgid "_Clear recent" msgstr "_Buida recents" #: gnunit/src/nunit-gtk.glade:165 msgid "Enable/disable by category" msgstr "" #: gnunit/src/nunit-gtk.glade:166 msgid "_Categories" msgstr "" #: gnunit/src/nunit-gtk.glade:219 msgid "Open assembly" msgstr "Obre un assembly" #: gnunit/src/nunit-gtk.glade:220 msgid "Open" msgstr "Obre" #: gnunit/src/nunit-gtk.glade:234 msgid "Save results to a XML file" msgstr "Desa els resultats a un fitxer XML" #: gnunit/src/nunit-gtk.glade:235 msgid "Save As" msgstr "Anomena i desa" #: gnunit/src/nunit-gtk.glade:249 msgid "Run selected test fixture(s)" msgstr "Executa els tests seleccionats" #: gnunit/src/nunit-gtk.glade:250 gnunit/src/nunit-gtk.glade:516 msgid "Run" msgstr "Executa" #: gnunit/src/nunit-gtk.glade:265 docbrowser/browser.glade:1538 #: docbrowser/browser.glade:1917 docbrowser/browser.glade:2208 #: docbrowser/browser.glade:2557 msgid "Cancel" msgstr "Cancel·la" #: gnunit/src/nunit-gtk.glade:266 msgid "Stop" msgstr "Atura" #: gnunit/src/nunit-gtk.glade:280 msgid "Exit program" msgstr "Surt del programa" #: gnunit/src/nunit-gtk.glade:281 docbrowser/browser.glade:138 msgid "Quit" msgstr "Surt" #: gnunit/src/nunit-gtk.glade:390 msgid "Test: " msgstr "Test: " #: gnunit/src/nunit-gtk.glade:588 msgid "Errors and failures" msgstr "Errors i fallides" #: gnunit/src/nunit-gtk.glade:641 msgid "Tests not run" msgstr "Tests no executats" #: gnunit/src/nunit-gtk.glade:699 msgid "Standard error" msgstr "Sortida d'error" #: gnunit/src/nunit-gtk.glade:757 msgid "Standard out" msgstr "Sortida estàndard" #: gnunit/src/nunit-gtk.glade:815 gnunit/src/main.cs:686 msgid "Error" msgstr "Error" #: gnunit/src/nunit-gtk.glade:904 msgid "label" msgstr "etiqueta" #: gnunit/src/nunit-gtk.glade:936 gnunit/src/main.cs:104 msgid "Show details >>" msgstr "Mostra els detalls >>" #: gnunit/src/nunit-gtk.glade:1009 msgid "Error details" msgstr "Detalls de l'error" #: gnunit/src/nunit-gtk.glade:1056 msgid "File exists. Overwrite?" msgstr "El fitxer ja existeix. Voleu sobreescriure'l?" #: gnunit/src/nunit-gtk.glade:1084 msgid "Don't save results" msgstr "No desis els resultats" #: gnunit/src/nunit-gtk.glade:1098 msgid "Save results" msgstr "Desa els resultats" #: gnunit/src/main.cs:37 #, csharp-format msgid "File {0} exists." msgstr "" #: gnunit/src/main.cs:38 msgid "Do you want to overwrite it?" msgstr "Voleu sobreescriure'l?" #: gnunit/src/main.cs:107 msgid "Hide details <<" msgstr "Ocultar els detalls <<" #: gnunit/src/main.cs:200 msgid "Uncategorized" msgstr "" #: gnunit/src/main.cs:408 msgid "No assembly loaded." msgstr "No hi ha cap assembly carregat." #: gnunit/src/main.cs:434 #, csharp-format msgid "Loading {0}..." msgstr "S'està carregant {0}..." #: gnunit/src/main.cs:546 #, csharp-format msgid "Loading test {0} of {1}" msgstr "S'està carregant test {0} de {1}" #: gnunit/src/main.cs:557 msgid "Error loading assembly" msgstr "Error carregant l'assembly" #: gnunit/src/main.cs:558 #, csharp-format msgid "Error loading '{0}'" msgstr "Error carregant '{0}'" #: gnunit/src/main.cs:608 msgid "translator_credits" msgstr "" #: gnunit/src/main.cs:630 msgid "You have to select a test to run." msgstr "Heu d'escollir un test per executar" #: gnunit/src/main.cs:660 msgid "No test results available" msgstr "No hi ha resultats dels tests disponibles" #: gnunit/src/main.cs:661 msgid "You must run some tests in order to get results to save." msgstr "Heu d'exectuar alguns tests per obtenir resultats per desar" #: gnunit/src/main.cs:667 msgid "Save results to..." msgstr "Desa els resultats com a..." #: gnunit/src/main.cs:676 msgid "Results not saved." msgstr "No s'han desat els resultats" #: gnunit/src/main.cs:687 msgid "There has been an error saving the results.\n" msgstr "Hi ha hagut un error desant els resultats\n" #: gnunit/src/main.cs:688 msgid "Do you have correct permissions to write to that file?" msgstr "Teniu els permisos adequats per escriure en aquest fitxer?" #: gnunit/src/main.cs:696 #, csharp-format msgid "Results saved to {0}" msgstr "Els resultats s'han desat a {0}" #: gnunit/src/main.cs:774 #, fuzzy, csharp-format msgid "Tests (assertions): {0} ({3}) Ignored: {1} Failures: {2}" msgstr "Tests: {0} ignorats: {1} fallades: {2}" #: gnunit/src/main.cs:952 msgid "Running tests..." msgstr "S'està executant els test..." #: gnunit/src/main.cs:995 msgid "Cancelled on user request." msgstr "Cancel·lat per petició de l'usuari" #: gnunit/src/main.cs:1033 #, csharp-format msgid "{0} tests loaded." msgstr "{0} tests carregats." #: gnunit/src/main.cs:1051 #, csharp-format msgid "Elapsed time: {0}" msgstr "Temps transcorregut: {0}" #: gnunit/src/main.cs:1061 msgid "Unhandled Exception" msgstr "Excepció no gestionada" #: gnunit/src/main.cs:1061 msgid "There has been an unhandled exception.\n" msgstr "Ha succeït una excepció no gestionada.\n" #: gnunit/src/main.cs:1062 msgid "The program will terminate now." msgstr "El programa es finalitzarà ara." #: docbrowser/browser.glade:8 msgid "Mono Documentation Library" msgstr "Documentació de les biblioteques del Mono" #: docbrowser/browser.glade:35 msgid "_File" msgstr "_Fitxer" #: docbrowser/browser.glade:44 msgid "New _Tab" msgstr "" #: docbrowser/browser.glade:66 #, fuzzy msgid "_Lookup URL..." msgstr "_Cerca URL" #: docbrowser/browser.glade:88 msgid "_Print..." msgstr "" #: docbrowser/browser.glade:116 msgid "_Close Tab" msgstr "" #: docbrowser/browser.glade:164 msgid "_Edit" msgstr "_Edita" #: docbrowser/browser.glade:172 msgid "_Cut" msgstr "" #: docbrowser/browser.glade:194 msgid "_Copy" msgstr "_Còpia" #: docbrowser/browser.glade:216 msgid "_Paste" msgstr "" #: docbrowser/browser.glade:244 msgid "Select All" msgstr "Selecciona-ho tot" #: docbrowser/browser.glade:258 msgid "_View" msgstr "_Visualització" #: docbrowser/browser.glade:267 msgid "Collapse All" msgstr "Contrau tots" #: docbrowser/browser.glade:276 msgid "Show Inherited Members" msgstr "Mostra els membres heredats" #: docbrowser/browser.glade:286 msgid "Show Comments" msgstr "Mostra comentaris" #: docbrowser/browser.glade:300 msgid "_Bookmarks" msgstr "_Adreçes d'interès" #: docbrowser/browser.glade:315 #, fuzzy msgid "_Contributing" msgstr "_Puja les contribucions" #: docbrowser/browser.glade:323 #, fuzzy msgid "_Upload Contributions..." msgstr "_Puja les contribucions" #: docbrowser/browser.glade:345 msgid "_View Contribution Statistics..." msgstr "" #: docbrowser/browser.glade:372 msgid "Edit Mode" msgstr "" #: docbrowser/browser.glade:386 msgid "_Help" msgstr "Aj_uda" #: docbrowser/browser.glade:395 #, fuzzy msgid "About..." msgstr "Quant a " #: docbrowser/browser.glade:548 msgid "n/a" msgstr "n/d" #: docbrowser/browser.glade:657 msgid "_Contents" msgstr "_Continguts" #: docbrowser/browser.glade:721 msgid "_Index" msgstr "_Índex" #: docbrowser/browser.glade:784 msgid "_Search" msgstr "_Cerca" #: docbrowser/browser.glade:856 msgid "About monodoc" msgstr "" #: docbrowser/browser.glade:907 msgid "" "monodoc: The Mono Documentation Library viewer" msgstr "" "monodoc: Visualitzador de la documentació de " "les biblioteques del Mono" #: docbrowser/browser.glade:928 msgid "Version " msgstr "" #: docbrowser/browser.glade:970 msgid "" "Authors:\n" " Miguel de Icaza (miguel@ximian.com)\n" " Duncan Mak (duncan@ximian.com)\n" " Joshua Tauberer (tauberer@for.net)\n" " Lee Malabone\n" " Philip Van Hoof\n" " Johannes Roith (johannes@jroith.de)\n" " Alp Toker (alp@atoker.com)\n" " Piers Haken\n" " John Luke (jluke@cfl.rr.com)\n" " Ben Maurer\n" " Mario Sopena Novales (mario.sopena@gmail.com)\n" " Rafael Ferreira (raf@ophion.org)\n" "\t " msgstr "" #: docbrowser/browser.glade:1005 msgid "" "Plugins:\n" " ECMA Documentation.\n" " Mono XML Documentation.\n" " Mono Handbook.\n" " Manual Pages.\n" " Compiler Errors.\n" " ECMA C# Specification." msgstr "" #: docbrowser/browser.glade:1080 #, fuzzy msgid "Lookup URL" msgstr "_Cerca URL" #: docbrowser/browser.glade:1103 msgid "_URL to lookup:" msgstr "" #: docbrowser/browser.glade:1132 docbrowser/browser.glade:1360 #: docbrowser/browser.glade:1746 docbrowser/browser.glade:2726 #: docbrowser/browser.glade:2749 docbrowser/browser.glade:2798 msgid "*" msgstr "*" #: docbrowser/browser.glade:1135 msgid "lookup_entry" msgstr "" #: docbrowser/browser.glade:1183 msgid "Login configuration" msgstr "" #: docbrowser/browser.glade:1215 msgid "" "You can edit the contents of the API documentation in MonoDoc and " "contribute\n" "those back. To do this you must agree to relicense your updates under the " "terms\n" "of the MIT X11 Open Source License and register your email address with the\n" "documentation service.\n" "\n" "If you agree, click Continue" msgstr "" #: docbrowser/browser.glade:1271 docbrowser/browser.glade:1432 #: docbrowser/browser.glade:1807 msgid "Continue" msgstr "" #: docbrowser/browser.glade:1300 msgid "0" msgstr "" #: docbrowser/browser.glade:1331 msgid "_Email:" msgstr "" #: docbrowser/browser.glade:1374 msgid "xx" msgstr "" #: docbrowser/browser.glade:1461 msgid "1" msgstr "" #: docbrowser/browser.glade:1486 msgid "Monodoc is requesting an account for you." msgstr "" #: docbrowser/browser.glade:1567 msgid "2" msgstr "" #: docbrowser/browser.glade:1592 msgid "" "Error: Monodoc encountered a failure when requesting\n" "a password for your e-mail address. Try again later." msgstr "" #: docbrowser/browser.glade:1628 docbrowser/browser.glade:2013 #: docbrowser/browser.glade:2102 docbrowser/browser.glade:2297 #: docbrowser/browser.glade:2387 docbrowser/browser.glade:2477 msgid "Ok" msgstr "D'acord" #: docbrowser/browser.glade:1658 msgid "3" msgstr "" #: docbrowser/browser.glade:1689 msgid "" "Once you receive your password on the mail, please enter it\n" "here:\n" msgstr "" #: docbrowser/browser.glade:1718 msgid "Password:" msgstr "" #: docbrowser/browser.glade:1837 msgid "4" msgstr "" #: docbrowser/browser.glade:1862 msgid "MonoDoc is logging into the server." msgstr "" #: docbrowser/browser.glade:1953 msgid "5" msgstr "" #: docbrowser/browser.glade:1978 msgid "" "Congratulations! \n" "\n" "You can now contribute your changes to MonoDoc by using \n" "the File/Upload menu option." msgstr "" #: docbrowser/browser.glade:2043 msgid "6" msgstr "" #: docbrowser/browser.glade:2068 msgid "" "Terminated \n" "\n" "The request to the Monodoc server has been cancelled." msgstr "" #: docbrowser/browser.glade:2132 msgid "7" msgstr "" #: docbrowser/browser.glade:2157 msgid "" "Please wait\n" "\n" "MonoDoc is checking the server version." msgstr "" #: docbrowser/browser.glade:2237 msgid "8" msgstr "" #: docbrowser/browser.glade:2262 msgid "" "Communications Problem \n" "\n" "There was a communications problem when communicating\n" "with the Mono Documentation Server." msgstr "" #: docbrowser/browser.glade:2327 msgid "9" msgstr "" #: docbrowser/browser.glade:2352 msgid "" "Version missmatch \n" "\n" "This version of MonoDoc is not compatible with the current Monodoc\n" "server, please upgrade your MonoDoc installation." msgstr "" #: docbrowser/browser.glade:2417 msgid "10" msgstr "" #: docbrowser/browser.glade:2442 msgid "" "Password Problem \n" "\n" "The passkey entered is incorrect. \n" "Please try again." msgstr "" #: docbrowser/browser.glade:2507 msgid "11" msgstr "" #: docbrowser/browser.glade:2528 msgid "Uploading Documentation Updates - MonoDoc" msgstr "" #: docbrowser/browser.glade:2583 msgid "Monodoc Documentation Updates Uploader. " msgstr "" #: docbrowser/browser.glade:2610 msgid "Status: " msgstr "" #: docbrowser/browser.glade:2668 msgid "New Comment" msgstr "" #: docbrowser/browser.glade:2690 msgid "TODO: Some advise on posting here." msgstr "" #: docbrowser/browser.glade:2766 msgid "Title:" msgstr "" #: docbrowser/browser.glade:2815 msgid "Comment" msgstr "" #: docbrowser/browser.glade:2841 msgid "E-Mail:" msgstr "" #: docbrowser/browser.glade:2867 docbrowser/browser.glade:3169 msgid "Name:" msgstr "" #: docbrowser/browser.glade:2987 #, fuzzy msgid "Manage Bookmarks" msgstr "_Adreçes d'interès" #: docbrowser/browser.glade:3071 msgid "New Folder" msgstr "" #: docbrowser/browser.glade:3136 #, fuzzy msgid "Add Bookmark" msgstr "_Afegeix adreçes d'interès" #: docbrowser/browser.glade:3227 msgid "Create in:" msgstr "" #~ msgid "Editing" #~ msgstr "Editant" #~ msgid "_Edit bookmarks..." #~ msgstr "_Edita adreçes d'interès " #~ msgid "_Look for:" #~ msgstr "C_erca:" #, fuzzy #~ msgid "_Search for:" #~ msgstr "_Cerca" mono-tools-2.11/po/es.po0000664000175000017500000003172412225357701017165 0ustar00directhexdirecthex00000000000000# GNUnit # Copyright (C) 2003, 2004 Gonzalo Paniagua Javier # This file is distributed under the same license as the GNUnit package. # Gonzalo Paniagua Javier , 2003, 2004. # msgid "" msgstr "" "Project-Id-Version: GNUnit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-22 17:13-0500\n" "PO-Revision-Date: 2004-08-05 11:14+0200\n" "Last-Translator: Gonzalo Paniagua Javier \n" "Language-Team: Gonzalo Paniagua Javier \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: gnunit/src/AssemblyStore.cs:304 msgid "Already running some test(s)." msgstr "Ya se están ejecutando tests." #: gnunit/src/AssemblyStore.cs:587 msgid "Warning: unexpected combination." msgstr "Aviso: combinación no esperada." #: gnunit/src/AssemblyStore.cs:596 #, csharp-format msgid "Don't know anything about {0}" msgstr "" #: gnunit/src/FileDialog.cs:26 msgid "Select an assembly to load" msgstr "Elija un assembly para cargar" #: gnunit/src/nunit-gtk.glade:10 msgid "Mono NUnit2 GUI" msgstr "" #: gnunit/src/nunit-gtk.glade:72 msgid "_Recent assemblies" msgstr "Ficheros _recientes" #: gnunit/src/nunit-gtk.glade:92 msgid "_Clear recent" msgstr "_Borra recientes" #: gnunit/src/nunit-gtk.glade:165 msgid "Enable/disable by category" msgstr "" #: gnunit/src/nunit-gtk.glade:166 msgid "_Categories" msgstr "" #: gnunit/src/nunit-gtk.glade:219 msgid "Open assembly" msgstr "Carga un ensamblado" #: gnunit/src/nunit-gtk.glade:220 msgid "Open" msgstr "Abrir" #: gnunit/src/nunit-gtk.glade:234 msgid "Save results to a XML file" msgstr "Guardar resultados a un fichero XML" #: gnunit/src/nunit-gtk.glade:235 msgid "Save As" msgstr "Guardar como" #: gnunit/src/nunit-gtk.glade:249 msgid "Run selected test fixture(s)" msgstr "Ejecutar los tests seleccionados" #: gnunit/src/nunit-gtk.glade:250 gnunit/src/nunit-gtk.glade:516 msgid "Run" msgstr "Ejecutar" #: gnunit/src/nunit-gtk.glade:265 docbrowser/browser.glade:1538 #: docbrowser/browser.glade:1917 docbrowser/browser.glade:2208 #: docbrowser/browser.glade:2557 msgid "Cancel" msgstr "Cancelar" #: gnunit/src/nunit-gtk.glade:266 msgid "Stop" msgstr "Detener" #: gnunit/src/nunit-gtk.glade:280 msgid "Exit program" msgstr "Salir del programa" #: gnunit/src/nunit-gtk.glade:281 docbrowser/browser.glade:138 msgid "Quit" msgstr "Salir" #: gnunit/src/nunit-gtk.glade:390 msgid "Test: " msgstr "Test: " #: gnunit/src/nunit-gtk.glade:588 msgid "Errors and failures" msgstr "Errores y fallos" #: gnunit/src/nunit-gtk.glade:641 msgid "Tests not run" msgstr "Tests no ejecutados" #: gnunit/src/nunit-gtk.glade:699 msgid "Standard error" msgstr "Salida de error" #: gnunit/src/nunit-gtk.glade:757 msgid "Standard out" msgstr "Salida estándar" #: gnunit/src/nunit-gtk.glade:815 gnunit/src/main.cs:686 msgid "Error" msgstr "Error" #: gnunit/src/nunit-gtk.glade:904 msgid "label" msgstr "etiqueta" #: gnunit/src/nunit-gtk.glade:936 gnunit/src/main.cs:104 msgid "Show details >>" msgstr "Mostrar detalles >>" #: gnunit/src/nunit-gtk.glade:1009 msgid "Error details" msgstr "Detalles del error" #: gnunit/src/nunit-gtk.glade:1056 msgid "File exists. Overwrite?" msgstr "El fichero existe. ¿Sobreescribir?" #: gnunit/src/nunit-gtk.glade:1084 msgid "Don't save results" msgstr "No guardar resultados" #: gnunit/src/nunit-gtk.glade:1098 msgid "Save results" msgstr "Guardar resultados" #: gnunit/src/main.cs:37 #, csharp-format msgid "File {0} exists." msgstr "El fichero {0} existe." #: gnunit/src/main.cs:38 msgid "Do you want to overwrite it?" msgstr "¿Lo quiere sobreescribir?" #: gnunit/src/main.cs:107 msgid "Hide details <<" msgstr "Ocultar detalles <<" #: gnunit/src/main.cs:200 msgid "Uncategorized" msgstr "" #: gnunit/src/main.cs:408 msgid "No assembly loaded." msgstr "No hay ningún assembly cargado." #: gnunit/src/main.cs:434 #, csharp-format msgid "Loading {0}..." msgstr "Cargando {0}..." #: gnunit/src/main.cs:546 #, csharp-format msgid "Loading test {0} of {1}" msgstr "Cargando test {0} de {1}" #: gnunit/src/main.cs:557 msgid "Error loading assembly" msgstr "Error cargando assembly" #: gnunit/src/main.cs:558 #, csharp-format msgid "Error loading '{0}'" msgstr "Error cargando '{0}'" #: gnunit/src/main.cs:608 msgid "translator_credits" msgstr "Gonzalo Paniagua Javier " #: gnunit/src/main.cs:630 msgid "You have to select a test to run." msgstr "Debe seleccionar un test para ejecutar" #: gnunit/src/main.cs:660 msgid "No test results available" msgstr "No hay resultados de tests disponibles" #: gnunit/src/main.cs:661 msgid "You must run some tests in order to get results to save." msgstr "Debe ejecutar algún test para tener resultados que guardar." #: gnunit/src/main.cs:667 msgid "Save results to..." msgstr "Guardar resultados como..." #: gnunit/src/main.cs:676 msgid "Results not saved." msgstr "No se han guardado los resultados." #: gnunit/src/main.cs:687 msgid "There has been an error saving the results.\n" msgstr "Ocurrió un error guardando los resultados.\n" #: gnunit/src/main.cs:688 msgid "Do you have correct permissions to write to that file?" msgstr "¿Tiene permiso de escritura sobre ese fichero?" #: gnunit/src/main.cs:696 #, csharp-format msgid "Results saved to {0}" msgstr "Resultados guardados en {0}" #: gnunit/src/main.cs:774 #, fuzzy, csharp-format msgid "Tests (assertions): {0} ({3}) Ignored: {1} Failures: {2}" msgstr "Tests: {0} Ignorados: {1} Fallos: {2}" #: gnunit/src/main.cs:952 msgid "Running tests..." msgstr "Ejecutando tests..." #: gnunit/src/main.cs:995 msgid "Cancelled on user request." msgstr "Cancelado a petición del usuario" #: gnunit/src/main.cs:1033 #, csharp-format msgid "{0} tests loaded." msgstr "{0} tests cargados." #: gnunit/src/main.cs:1051 #, csharp-format msgid "Elapsed time: {0}" msgstr "Tiempo transcurrido: {0}" #: gnunit/src/main.cs:1061 msgid "Unhandled Exception" msgstr "Excepción no controlada" #: gnunit/src/main.cs:1061 msgid "There has been an unhandled exception.\n" msgstr "Ha ocurrido una excepción no controlada\n" #: gnunit/src/main.cs:1062 msgid "The program will terminate now." msgstr "El programa terminará ahora." #: docbrowser/browser.glade:8 msgid "Mono Documentation Library" msgstr "" #: docbrowser/browser.glade:35 msgid "_File" msgstr "" #: docbrowser/browser.glade:44 msgid "New _Tab" msgstr "" #: docbrowser/browser.glade:66 msgid "_Lookup URL..." msgstr "" #: docbrowser/browser.glade:88 msgid "_Print..." msgstr "" #: docbrowser/browser.glade:116 msgid "_Close Tab" msgstr "" #: docbrowser/browser.glade:164 msgid "_Edit" msgstr "" #: docbrowser/browser.glade:172 msgid "_Cut" msgstr "" #: docbrowser/browser.glade:194 msgid "_Copy" msgstr "" #: docbrowser/browser.glade:216 msgid "_Paste" msgstr "" #: docbrowser/browser.glade:244 msgid "Select All" msgstr "" #: docbrowser/browser.glade:258 msgid "_View" msgstr "" #: docbrowser/browser.glade:267 msgid "Collapse All" msgstr "" #: docbrowser/browser.glade:276 msgid "Show Inherited Members" msgstr "" #: docbrowser/browser.glade:286 msgid "Show Comments" msgstr "" #: docbrowser/browser.glade:300 msgid "_Bookmarks" msgstr "" #: docbrowser/browser.glade:315 msgid "_Contributing" msgstr "" #: docbrowser/browser.glade:323 msgid "_Upload Contributions..." msgstr "" #: docbrowser/browser.glade:345 msgid "_View Contribution Statistics..." msgstr "" #: docbrowser/browser.glade:372 msgid "Edit Mode" msgstr "" #: docbrowser/browser.glade:386 msgid "_Help" msgstr "" #: docbrowser/browser.glade:395 msgid "About..." msgstr "" #: docbrowser/browser.glade:548 msgid "n/a" msgstr "" #: docbrowser/browser.glade:657 msgid "_Contents" msgstr "" #: docbrowser/browser.glade:721 msgid "_Index" msgstr "" #: docbrowser/browser.glade:784 msgid "_Search" msgstr "" #: docbrowser/browser.glade:856 msgid "About monodoc" msgstr "" #: docbrowser/browser.glade:907 msgid "" "monodoc: The Mono Documentation Library viewer" msgstr "" #: docbrowser/browser.glade:928 msgid "Version " msgstr "" #: docbrowser/browser.glade:970 msgid "" "Authors:\n" " Miguel de Icaza (miguel@ximian.com)\n" " Duncan Mak (duncan@ximian.com)\n" " Joshua Tauberer (tauberer@for.net)\n" " Lee Malabone\n" " Philip Van Hoof\n" " Johannes Roith (johannes@jroith.de)\n" " Alp Toker (alp@atoker.com)\n" " Piers Haken\n" " John Luke (jluke@cfl.rr.com)\n" " Ben Maurer\n" " Mario Sopena Novales (mario.sopena@gmail.com)\n" " Rafael Ferreira (raf@ophion.org)\n" "\t " msgstr "" #: docbrowser/browser.glade:1005 msgid "" "Plugins:\n" " ECMA Documentation.\n" " Mono XML Documentation.\n" " Mono Handbook.\n" " Manual Pages.\n" " Compiler Errors.\n" " ECMA C# Specification." msgstr "" #: docbrowser/browser.glade:1080 msgid "Lookup URL" msgstr "" #: docbrowser/browser.glade:1103 msgid "_URL to lookup:" msgstr "" #: docbrowser/browser.glade:1132 docbrowser/browser.glade:1360 #: docbrowser/browser.glade:1746 docbrowser/browser.glade:2726 #: docbrowser/browser.glade:2749 docbrowser/browser.glade:2798 msgid "*" msgstr "" #: docbrowser/browser.glade:1135 msgid "lookup_entry" msgstr "" #: docbrowser/browser.glade:1183 msgid "Login configuration" msgstr "" #: docbrowser/browser.glade:1215 msgid "" "You can edit the contents of the API documentation in MonoDoc and " "contribute\n" "those back. To do this you must agree to relicense your updates under the " "terms\n" "of the MIT X11 Open Source License and register your email address with the\n" "documentation service.\n" "\n" "If you agree, click Continue" msgstr "" #: docbrowser/browser.glade:1271 docbrowser/browser.glade:1432 #: docbrowser/browser.glade:1807 msgid "Continue" msgstr "" #: docbrowser/browser.glade:1300 msgid "0" msgstr "" #: docbrowser/browser.glade:1331 msgid "_Email:" msgstr "" #: docbrowser/browser.glade:1374 msgid "xx" msgstr "" #: docbrowser/browser.glade:1461 msgid "1" msgstr "" #: docbrowser/browser.glade:1486 msgid "Monodoc is requesting an account for you." msgstr "" #: docbrowser/browser.glade:1567 msgid "2" msgstr "" #: docbrowser/browser.glade:1592 msgid "" "Error: Monodoc encountered a failure when requesting\n" "a password for your e-mail address. Try again later." msgstr "" #: docbrowser/browser.glade:1628 docbrowser/browser.glade:2013 #: docbrowser/browser.glade:2102 docbrowser/browser.glade:2297 #: docbrowser/browser.glade:2387 docbrowser/browser.glade:2477 msgid "Ok" msgstr "" #: docbrowser/browser.glade:1658 msgid "3" msgstr "" #: docbrowser/browser.glade:1689 msgid "" "Once you receive your password on the mail, please enter it\n" "here:\n" msgstr "" #: docbrowser/browser.glade:1718 msgid "Password:" msgstr "" #: docbrowser/browser.glade:1837 msgid "4" msgstr "" #: docbrowser/browser.glade:1862 msgid "MonoDoc is logging into the server." msgstr "" #: docbrowser/browser.glade:1953 msgid "5" msgstr "" #: docbrowser/browser.glade:1978 msgid "" "Congratulations! \n" "\n" "You can now contribute your changes to MonoDoc by using \n" "the File/Upload menu option." msgstr "" #: docbrowser/browser.glade:2043 msgid "6" msgstr "" #: docbrowser/browser.glade:2068 msgid "" "Terminated \n" "\n" "The request to the Monodoc server has been cancelled." msgstr "" #: docbrowser/browser.glade:2132 msgid "7" msgstr "" #: docbrowser/browser.glade:2157 msgid "" "Please wait\n" "\n" "MonoDoc is checking the server version." msgstr "" #: docbrowser/browser.glade:2237 msgid "8" msgstr "" #: docbrowser/browser.glade:2262 msgid "" "Communications Problem \n" "\n" "There was a communications problem when communicating\n" "with the Mono Documentation Server." msgstr "" #: docbrowser/browser.glade:2327 msgid "9" msgstr "" #: docbrowser/browser.glade:2352 msgid "" "Version missmatch \n" "\n" "This version of MonoDoc is not compatible with the current Monodoc\n" "server, please upgrade your MonoDoc installation." msgstr "" #: docbrowser/browser.glade:2417 msgid "10" msgstr "" #: docbrowser/browser.glade:2442 msgid "" "Password Problem \n" "\n" "The passkey entered is incorrect. \n" "Please try again." msgstr "" #: docbrowser/browser.glade:2507 msgid "11" msgstr "" #: docbrowser/browser.glade:2528 msgid "Uploading Documentation Updates - MonoDoc" msgstr "" #: docbrowser/browser.glade:2583 msgid "Monodoc Documentation Updates Uploader. " msgstr "" #: docbrowser/browser.glade:2610 msgid "Status: " msgstr "" #: docbrowser/browser.glade:2668 msgid "New Comment" msgstr "" #: docbrowser/browser.glade:2690 msgid "TODO: Some advise on posting here." msgstr "" #: docbrowser/browser.glade:2766 msgid "Title:" msgstr "" #: docbrowser/browser.glade:2815 msgid "Comment" msgstr "" #: docbrowser/browser.glade:2841 msgid "E-Mail:" msgstr "" #: docbrowser/browser.glade:2867 docbrowser/browser.glade:3169 msgid "Name:" msgstr "" #: docbrowser/browser.glade:2987 msgid "Manage Bookmarks" msgstr "" #: docbrowser/browser.glade:3071 msgid "New Folder" msgstr "" #: docbrowser/browser.glade:3136 msgid "Add Bookmark" msgstr "" #: docbrowser/browser.glade:3227 msgid "Create in:" msgstr "" mono-tools-2.11/po/da.po0000664000175000017500000003162312225357701017140 0ustar00directhexdirecthex00000000000000# Dansk oversættelse af GNUnit. # Copyright (C) 2003 2004 Martin Willemoes Hansen # This file is distributed under the same license as the GNUnit package. # Martin Willemoes Hansen , 2003, 2004. # msgid "" msgstr "" "Project-Id-Version: GNUnit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-22 17:13-0500\n" "PO-Revision-Date: 2004-08-05 11:11+0200\n" "Last-Translator: Martin Willemoes Hansen \n" "Language-Team: Martin Willemoes Hansen \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: gnunit/src/AssemblyStore.cs:304 msgid "Already running some test(s)." msgstr "Udfører allerede nogle test(s)." #: gnunit/src/AssemblyStore.cs:587 msgid "Warning: unexpected combination." msgstr "Advarsel: uventet kombination." #: gnunit/src/AssemblyStore.cs:596 #, csharp-format msgid "Don't know anything about {0}" msgstr "Ved intet om {0}" #: gnunit/src/FileDialog.cs:26 msgid "Select an assembly to load" msgstr "Vælg en assembly til indlæsning" #: gnunit/src/nunit-gtk.glade:10 msgid "Mono NUnit2 GUI" msgstr "Mono grafiskbrugerflade for NUnit2" #: gnunit/src/nunit-gtk.glade:72 msgid "_Recent assemblies" msgstr "_Seneste assemblies" #: gnunit/src/nunit-gtk.glade:92 msgid "_Clear recent" msgstr "_Ryd seneste" #: gnunit/src/nunit-gtk.glade:165 msgid "Enable/disable by category" msgstr "" #: gnunit/src/nunit-gtk.glade:166 msgid "_Categories" msgstr "" #: gnunit/src/nunit-gtk.glade:219 msgid "Open assembly" msgstr "Åbn assembly" #: gnunit/src/nunit-gtk.glade:220 msgid "Open" msgstr "Åbn" #: gnunit/src/nunit-gtk.glade:234 msgid "Save results to a XML file" msgstr "Gem resultater til en XML fil" #: gnunit/src/nunit-gtk.glade:235 msgid "Save As" msgstr "Gem som" #: gnunit/src/nunit-gtk.glade:249 msgid "Run selected test fixture(s)" msgstr "Kør udvalgte testfiksering(er)" #: gnunit/src/nunit-gtk.glade:250 gnunit/src/nunit-gtk.glade:516 msgid "Run" msgstr "Kør" #: gnunit/src/nunit-gtk.glade:265 docbrowser/browser.glade:1538 #: docbrowser/browser.glade:1917 docbrowser/browser.glade:2208 #: docbrowser/browser.glade:2557 msgid "Cancel" msgstr "Afbryd" #: gnunit/src/nunit-gtk.glade:266 msgid "Stop" msgstr "Stop" #: gnunit/src/nunit-gtk.glade:280 msgid "Exit program" msgstr "Afslut program" #: gnunit/src/nunit-gtk.glade:281 docbrowser/browser.glade:138 msgid "Quit" msgstr "Afslut" #: gnunit/src/nunit-gtk.glade:390 msgid "Test: " msgstr "Test: " #: gnunit/src/nunit-gtk.glade:588 msgid "Errors and failures" msgstr "Fejl og mislykninger" #: gnunit/src/nunit-gtk.glade:641 msgid "Tests not run" msgstr "Ikke kørte tests" #: gnunit/src/nunit-gtk.glade:699 msgid "Standard error" msgstr "Standard fejl" #: gnunit/src/nunit-gtk.glade:757 msgid "Standard out" msgstr "Standard ud" #: gnunit/src/nunit-gtk.glade:815 gnunit/src/main.cs:686 msgid "Error" msgstr "Fejl" #: gnunit/src/nunit-gtk.glade:904 msgid "label" msgstr "etiket" #: gnunit/src/nunit-gtk.glade:936 gnunit/src/main.cs:104 msgid "Show details >>" msgstr "Vis detaljer >>" #: gnunit/src/nunit-gtk.glade:1009 msgid "Error details" msgstr "Fejl deltaljer" #: gnunit/src/nunit-gtk.glade:1056 msgid "File exists. Overwrite?" msgstr "Fil eksistere. Overskriv?" #: gnunit/src/nunit-gtk.glade:1084 msgid "Don't save results" msgstr "Gem ikke resultater" #: gnunit/src/nunit-gtk.glade:1098 msgid "Save results" msgstr "Gem resultater" #: gnunit/src/main.cs:37 #, csharp-format msgid "File {0} exists." msgstr "Fil {0} eksistere." #: gnunit/src/main.cs:38 msgid "Do you want to overwrite it?" msgstr "Vil du overskrive den?" #: gnunit/src/main.cs:107 msgid "Hide details <<" msgstr "Skjul detaljer" #: gnunit/src/main.cs:200 msgid "Uncategorized" msgstr "" #: gnunit/src/main.cs:408 msgid "No assembly loaded." msgstr "Ingen assembly indlæst." #: gnunit/src/main.cs:434 #, csharp-format msgid "Loading {0}..." msgstr "Indlæser {0}..." #: gnunit/src/main.cs:546 #, csharp-format msgid "Loading test {0} of {1}" msgstr "Indlæser test {0} af {1}" #: gnunit/src/main.cs:557 msgid "Error loading assembly" msgstr "Fejl ved indlæsning af assembly" #: gnunit/src/main.cs:558 #, csharp-format msgid "Error loading '{0}'" msgstr "Fejl ved indlæsning af '{0}'" #: gnunit/src/main.cs:608 msgid "translator_credits" msgstr "Martin Willemoes Hansen " #: gnunit/src/main.cs:630 msgid "You have to select a test to run." msgstr "Du mangler at vælge en test til udførsel" #: gnunit/src/main.cs:660 msgid "No test results available" msgstr "Ingen test resultater tilgængelig" #: gnunit/src/main.cs:661 msgid "You must run some tests in order to get results to save." msgstr "Du mangler at udfører nogle tests, for at kunne gemme resultatet." #: gnunit/src/main.cs:667 msgid "Save results to..." msgstr "Gem resultatet i..." #: gnunit/src/main.cs:676 msgid "Results not saved." msgstr "Resultatet ikke gemt." #: gnunit/src/main.cs:687 msgid "There has been an error saving the results.\n" msgstr "Der opstod en fejl, med at gemme resultatet.\n" #: gnunit/src/main.cs:688 msgid "Do you have correct permissions to write to that file?" msgstr "Har du skrive rettigheder til filen?" #: gnunit/src/main.cs:696 #, csharp-format msgid "Results saved to {0}" msgstr "Resultat gemt til {0}" #: gnunit/src/main.cs:774 #, fuzzy, csharp-format msgid "Tests (assertions): {0} ({3}) Ignored: {1} Failures: {2}" msgstr "Tests: {0} Ignorerede: {1} Mislykket: {2}" #: gnunit/src/main.cs:952 msgid "Running tests..." msgstr "Udfører tests..." #: gnunit/src/main.cs:995 msgid "Cancelled on user request." msgstr "Brugeren valgte at afbryde." #: gnunit/src/main.cs:1033 #, csharp-format msgid "{0} tests loaded." msgstr "{0} tests indlæst." #: gnunit/src/main.cs:1051 #, csharp-format msgid "Elapsed time: {0}" msgstr "Tid gået: {0}" #: gnunit/src/main.cs:1061 msgid "Unhandled Exception" msgstr "Uhåndteret undtagelse" #: gnunit/src/main.cs:1061 msgid "There has been an unhandled exception.\n" msgstr "Der har været en uhåndteret undtagelse.\n" #: gnunit/src/main.cs:1062 msgid "The program will terminate now." msgstr "Programmet afslutter nu." #: docbrowser/browser.glade:8 msgid "Mono Documentation Library" msgstr "" #: docbrowser/browser.glade:35 msgid "_File" msgstr "" #: docbrowser/browser.glade:44 msgid "New _Tab" msgstr "" #: docbrowser/browser.glade:66 msgid "_Lookup URL..." msgstr "" #: docbrowser/browser.glade:88 msgid "_Print..." msgstr "" #: docbrowser/browser.glade:116 msgid "_Close Tab" msgstr "" #: docbrowser/browser.glade:164 msgid "_Edit" msgstr "" #: docbrowser/browser.glade:172 msgid "_Cut" msgstr "" #: docbrowser/browser.glade:194 msgid "_Copy" msgstr "" #: docbrowser/browser.glade:216 msgid "_Paste" msgstr "" #: docbrowser/browser.glade:244 msgid "Select All" msgstr "" #: docbrowser/browser.glade:258 msgid "_View" msgstr "" #: docbrowser/browser.glade:267 msgid "Collapse All" msgstr "" #: docbrowser/browser.glade:276 msgid "Show Inherited Members" msgstr "" #: docbrowser/browser.glade:286 msgid "Show Comments" msgstr "" #: docbrowser/browser.glade:300 msgid "_Bookmarks" msgstr "" #: docbrowser/browser.glade:315 msgid "_Contributing" msgstr "" #: docbrowser/browser.glade:323 msgid "_Upload Contributions..." msgstr "" #: docbrowser/browser.glade:345 msgid "_View Contribution Statistics..." msgstr "" #: docbrowser/browser.glade:372 msgid "Edit Mode" msgstr "" #: docbrowser/browser.glade:386 msgid "_Help" msgstr "" #: docbrowser/browser.glade:395 msgid "About..." msgstr "" #: docbrowser/browser.glade:548 msgid "n/a" msgstr "" #: docbrowser/browser.glade:657 msgid "_Contents" msgstr "" #: docbrowser/browser.glade:721 msgid "_Index" msgstr "" #: docbrowser/browser.glade:784 msgid "_Search" msgstr "" #: docbrowser/browser.glade:856 msgid "About monodoc" msgstr "" #: docbrowser/browser.glade:907 msgid "" "monodoc: The Mono Documentation Library viewer" msgstr "" #: docbrowser/browser.glade:928 msgid "Version " msgstr "" #: docbrowser/browser.glade:970 msgid "" "Authors:\n" " Miguel de Icaza (miguel@ximian.com)\n" " Duncan Mak (duncan@ximian.com)\n" " Joshua Tauberer (tauberer@for.net)\n" " Lee Malabone\n" " Philip Van Hoof\n" " Johannes Roith (johannes@jroith.de)\n" " Alp Toker (alp@atoker.com)\n" " Piers Haken\n" " John Luke (jluke@cfl.rr.com)\n" " Ben Maurer\n" " Mario Sopena Novales (mario.sopena@gmail.com)\n" " Rafael Ferreira (raf@ophion.org)\n" "\t " msgstr "" #: docbrowser/browser.glade:1005 msgid "" "Plugins:\n" " ECMA Documentation.\n" " Mono XML Documentation.\n" " Mono Handbook.\n" " Manual Pages.\n" " Compiler Errors.\n" " ECMA C# Specification." msgstr "" #: docbrowser/browser.glade:1080 msgid "Lookup URL" msgstr "" #: docbrowser/browser.glade:1103 msgid "_URL to lookup:" msgstr "" #: docbrowser/browser.glade:1132 docbrowser/browser.glade:1360 #: docbrowser/browser.glade:1746 docbrowser/browser.glade:2726 #: docbrowser/browser.glade:2749 docbrowser/browser.glade:2798 msgid "*" msgstr "" #: docbrowser/browser.glade:1135 msgid "lookup_entry" msgstr "" #: docbrowser/browser.glade:1183 msgid "Login configuration" msgstr "" #: docbrowser/browser.glade:1215 msgid "" "You can edit the contents of the API documentation in MonoDoc and " "contribute\n" "those back. To do this you must agree to relicense your updates under the " "terms\n" "of the MIT X11 Open Source License and register your email address with the\n" "documentation service.\n" "\n" "If you agree, click Continue" msgstr "" #: docbrowser/browser.glade:1271 docbrowser/browser.glade:1432 #: docbrowser/browser.glade:1807 msgid "Continue" msgstr "" #: docbrowser/browser.glade:1300 msgid "0" msgstr "" #: docbrowser/browser.glade:1331 msgid "_Email:" msgstr "" #: docbrowser/browser.glade:1374 msgid "xx" msgstr "" #: docbrowser/browser.glade:1461 msgid "1" msgstr "" #: docbrowser/browser.glade:1486 msgid "Monodoc is requesting an account for you." msgstr "" #: docbrowser/browser.glade:1567 msgid "2" msgstr "" #: docbrowser/browser.glade:1592 msgid "" "Error: Monodoc encountered a failure when requesting\n" "a password for your e-mail address. Try again later." msgstr "" #: docbrowser/browser.glade:1628 docbrowser/browser.glade:2013 #: docbrowser/browser.glade:2102 docbrowser/browser.glade:2297 #: docbrowser/browser.glade:2387 docbrowser/browser.glade:2477 msgid "Ok" msgstr "" #: docbrowser/browser.glade:1658 msgid "3" msgstr "" #: docbrowser/browser.glade:1689 msgid "" "Once you receive your password on the mail, please enter it\n" "here:\n" msgstr "" #: docbrowser/browser.glade:1718 msgid "Password:" msgstr "" #: docbrowser/browser.glade:1837 msgid "4" msgstr "" #: docbrowser/browser.glade:1862 msgid "MonoDoc is logging into the server." msgstr "" #: docbrowser/browser.glade:1953 msgid "5" msgstr "" #: docbrowser/browser.glade:1978 msgid "" "Congratulations! \n" "\n" "You can now contribute your changes to MonoDoc by using \n" "the File/Upload menu option." msgstr "" #: docbrowser/browser.glade:2043 msgid "6" msgstr "" #: docbrowser/browser.glade:2068 msgid "" "Terminated \n" "\n" "The request to the Monodoc server has been cancelled." msgstr "" #: docbrowser/browser.glade:2132 msgid "7" msgstr "" #: docbrowser/browser.glade:2157 msgid "" "Please wait\n" "\n" "MonoDoc is checking the server version." msgstr "" #: docbrowser/browser.glade:2237 msgid "8" msgstr "" #: docbrowser/browser.glade:2262 msgid "" "Communications Problem \n" "\n" "There was a communications problem when communicating\n" "with the Mono Documentation Server." msgstr "" #: docbrowser/browser.glade:2327 msgid "9" msgstr "" #: docbrowser/browser.glade:2352 msgid "" "Version missmatch \n" "\n" "This version of MonoDoc is not compatible with the current Monodoc\n" "server, please upgrade your MonoDoc installation." msgstr "" #: docbrowser/browser.glade:2417 msgid "10" msgstr "" #: docbrowser/browser.glade:2442 msgid "" "Password Problem \n" "\n" "The passkey entered is incorrect. \n" "Please try again." msgstr "" #: docbrowser/browser.glade:2507 msgid "11" msgstr "" #: docbrowser/browser.glade:2528 msgid "Uploading Documentation Updates - MonoDoc" msgstr "" #: docbrowser/browser.glade:2583 msgid "Monodoc Documentation Updates Uploader. " msgstr "" #: docbrowser/browser.glade:2610 msgid "Status: " msgstr "" #: docbrowser/browser.glade:2668 msgid "New Comment" msgstr "" #: docbrowser/browser.glade:2690 msgid "TODO: Some advise on posting here." msgstr "" #: docbrowser/browser.glade:2766 msgid "Title:" msgstr "" #: docbrowser/browser.glade:2815 msgid "Comment" msgstr "" #: docbrowser/browser.glade:2841 msgid "E-Mail:" msgstr "" #: docbrowser/browser.glade:2867 docbrowser/browser.glade:3169 msgid "Name:" msgstr "" #: docbrowser/browser.glade:2987 msgid "Manage Bookmarks" msgstr "" #: docbrowser/browser.glade:3071 msgid "New Folder" msgstr "" #: docbrowser/browser.glade:3136 msgid "Add Bookmark" msgstr "" #: docbrowser/browser.glade:3227 msgid "Create in:" msgstr "" mono-tools-2.11/po/ChangeLog0000664000175000017500000000204412225357701017761 0ustar00directhexdirecthex000000000000002010-05-11 Andrew Jorgensen * POTFILES.in: Remove gnunit files (since gnunit got removed) 2005-05-31 Raja R Harinath * POTFILES.in: Replace 'monodoc-browser/' with 'docbrowser/'. 2004-08-05 Martin Willemoes Hansen * ca.po: Updated to use msg_id: translator_credits * da.po: Ditto * es.po: Ditto * fr.po: Ditto 2004-05-30 Jordi Mas * po/ca.po. Catalan localisation 2004-05-29 Gonzalo Paniagua Javier * po/da.po: * po/es.po: * po/fr.po: updated. 2004-05-28 Martin Willemoes Hansen * da.po: Converted from strings.da.txt * es.po: Converted from strings.es.txt * fr.po: Converted from strings.fr.txt 2004-01-31 Sebastien Pouliot * strings.fr.txt: Updated with new strings. 2003-05-04 Gonzalo Paniagua Javier * ChangeLog: added. * README: some notes on translations. * strings.da.txt: Danish strings from Martin Willemoes Hansen. mono-tools-2.11/po/da.gmo0000664000175000017500000000732112225357742017307 0ustar00directhexdirecthex000000000000006I|60Mk~  0?Oc}  2M] ly~ ,' !=8_ K0 J k r $        0 Q f u    "  " ( - ; B X n s      !  . : ? F X -q *   *B+ n{&5 23 "  64,#./)1 '&- $!%*0(+File {0} exists.Already running some test(s).CancelCancelled on user request.Do you have correct permissions to write to that file?Do you want to overwrite it?Don't know anything about {0}Don't save resultsElapsed time: {0}ErrorError detailsError loading '{0}'Error loading assemblyErrors and failuresExit programFile exists. Overwrite?Hide details <<Loading test {0} of {1}Loading {0}...Mono NUnit2 GUINo assembly loaded.No test results availableOpenOpen assemblyQuitResults not saved.Results saved to {0}RunRun selected test fixture(s)Running tests...Save AsSave resultsSave results to a XML fileSave results to...Select an assembly to loadShow details >>Standard errorStandard outStopTest: Tests not runThe program will terminate now.There has been an error saving the results. There has been an unhandled exception. Unhandled ExceptionWarning: unexpected combination.You have to select a test to run.You must run some tests in order to get results to save._Clear recent_Recent assemblieslabeltranslator_credits{0} tests loaded.Project-Id-Version: GNUnit Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-22 17:13-0500 PO-Revision-Date: 2004-08-05 11:11+0200 Last-Translator: Martin Willemoes Hansen Language-Team: Martin Willemoes Hansen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fil {0} eksistere.Udfører allerede nogle test(s).AfbrydBrugeren valgte at afbryde.Har du skrive rettigheder til filen?Vil du overskrive den?Ved intet om {0}Gem ikke resultaterTid gået: {0}FejlFejl deltaljerFejl ved indlæsning af '{0}'Fejl ved indlæsning af assemblyFejl og mislykningerAfslut programFil eksistere. Overskriv?Skjul detaljerIndlæser test {0} af {1}Indlæser {0}...Mono grafiskbrugerflade for NUnit2Ingen assembly indlæst.Ingen test resultater tilgængeligÅbnÅbn assemblyAfslutResultatet ikke gemt.Resultat gemt til {0}KørKør udvalgte testfiksering(er)Udfører tests...Gem somGem resultaterGem resultater til en XML filGem resultatet i...Vælg en assembly til indlæsningVis detaljer >>Standard fejlStandard udStopTest: Ikke kørte testsProgrammet afslutter nu.Der opstod en fejl, med at gemme resultatet. Der har været en uhåndteret undtagelse. Uhåndteret undtagelseAdvarsel: uventet kombination.Du mangler at vælge en test til udførselDu mangler at udfører nogle tests, for at kunne gemme resultatet._Ryd seneste_Seneste assembliesetiketMartin Willemoes Hansen {0} tests indlæst.mono-tools-2.11/po/mono-tools.pot0000664000175000017500000001777112225357742021063 0ustar00directhexdirecthex00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2013-10-10 00:59+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../docbrowser/browser.glade:8 msgid "Mono Documentation Library" msgstr "" #: ../docbrowser/browser.glade:35 msgid "_File" msgstr "" #: ../docbrowser/browser.glade:44 msgid "New _Tab" msgstr "" #: ../docbrowser/browser.glade:66 msgid "_Lookup URL..." msgstr "" #: ../docbrowser/browser.glade:88 msgid "_Print..." msgstr "" #: ../docbrowser/browser.glade:116 msgid "_Close Tab" msgstr "" #: ../docbrowser/browser.glade:138 msgid "Quit" msgstr "" #: ../docbrowser/browser.glade:164 msgid "_Edit" msgstr "" #: ../docbrowser/browser.glade:172 msgid "_Cut" msgstr "" #: ../docbrowser/browser.glade:194 msgid "_Copy" msgstr "" #: ../docbrowser/browser.glade:216 msgid "_Paste" msgstr "" #: ../docbrowser/browser.glade:244 msgid "Select All" msgstr "" #: ../docbrowser/browser.glade:258 msgid "_View" msgstr "" #: ../docbrowser/browser.glade:267 msgid "Collapse All" msgstr "" #: ../docbrowser/browser.glade:276 msgid "Show Inherited Members" msgstr "" #: ../docbrowser/browser.glade:286 msgid "Show Comments" msgstr "" #: ../docbrowser/browser.glade:300 msgid "_Bookmarks" msgstr "" #: ../docbrowser/browser.glade:315 msgid "_Contributing" msgstr "" #: ../docbrowser/browser.glade:323 msgid "_Upload Contributions..." msgstr "" #: ../docbrowser/browser.glade:345 msgid "_View Contribution Statistics..." msgstr "" #: ../docbrowser/browser.glade:372 msgid "Edit Mode" msgstr "" #: ../docbrowser/browser.glade:386 msgid "_Help" msgstr "" #: ../docbrowser/browser.glade:395 msgid "About..." msgstr "" #: ../docbrowser/browser.glade:548 msgid "n/a" msgstr "" #: ../docbrowser/browser.glade:657 msgid "_Contents" msgstr "" #: ../docbrowser/browser.glade:721 msgid "_Index" msgstr "" #: ../docbrowser/browser.glade:784 msgid "_Search" msgstr "" #: ../docbrowser/browser.glade:856 msgid "About monodoc" msgstr "" #: ../docbrowser/browser.glade:907 msgid "" "monodoc: The Mono Documentation Library viewer" msgstr "" #: ../docbrowser/browser.glade:928 msgid "Version " msgstr "" #: ../docbrowser/browser.glade:970 msgid "" "Authors:\n" " Miguel de Icaza (miguel@ximian.com)\n" " Duncan Mak (duncan@ximian.com)\n" " Joshua Tauberer (tauberer@for.net)\n" " Lee Malabone\n" " Philip Van Hoof\n" " Johannes Roith (johannes@jroith.de)\n" " Alp Toker (alp@atoker.com)\n" " Piers Haken\n" " John Luke (jluke@cfl.rr.com)\n" " Ben Maurer\n" " Mario Sopena Novales (mario.sopena@gmail.com)\n" " Rafael Ferreira (raf@ophion.org)\n" "\t " msgstr "" #: ../docbrowser/browser.glade:1005 msgid "" "Plugins:\n" " ECMA Documentation.\n" " Mono XML Documentation.\n" " Mono Handbook.\n" " Manual Pages.\n" " Compiler Errors.\n" " ECMA C# Specification." msgstr "" #: ../docbrowser/browser.glade:1080 msgid "Lookup URL" msgstr "" #: ../docbrowser/browser.glade:1103 msgid "_URL to lookup:" msgstr "" #: ../docbrowser/browser.glade:1132 ../docbrowser/browser.glade:1360 #: ../docbrowser/browser.glade:1746 ../docbrowser/browser.glade:2726 #: ../docbrowser/browser.glade:2749 ../docbrowser/browser.glade:2798 msgid "*" msgstr "" #: ../docbrowser/browser.glade:1135 msgid "lookup_entry" msgstr "" #: ../docbrowser/browser.glade:1183 msgid "Login configuration" msgstr "" #: ../docbrowser/browser.glade:1215 msgid "" "You can edit the contents of the API documentation in MonoDoc and " "contribute\n" "those back. To do this you must agree to relicense your updates under the " "terms\n" "of the MIT X11 Open Source License and register your email address with the\n" "documentation service.\n" "\n" "If you agree, click Continue" msgstr "" #: ../docbrowser/browser.glade:1271 ../docbrowser/browser.glade:1432 #: ../docbrowser/browser.glade:1807 msgid "Continue" msgstr "" #: ../docbrowser/browser.glade:1300 msgid "0" msgstr "" #: ../docbrowser/browser.glade:1331 msgid "_Email:" msgstr "" #: ../docbrowser/browser.glade:1374 msgid "xx" msgstr "" #: ../docbrowser/browser.glade:1461 msgid "1" msgstr "" #: ../docbrowser/browser.glade:1486 msgid "Monodoc is requesting an account for you." msgstr "" #: ../docbrowser/browser.glade:1538 ../docbrowser/browser.glade:1917 #: ../docbrowser/browser.glade:2208 ../docbrowser/browser.glade:2557 msgid "Cancel" msgstr "" #: ../docbrowser/browser.glade:1567 msgid "2" msgstr "" #: ../docbrowser/browser.glade:1592 msgid "" "Error: Monodoc encountered a failure when requesting\n" "a password for your e-mail address. Try again later." msgstr "" #: ../docbrowser/browser.glade:1628 ../docbrowser/browser.glade:2013 #: ../docbrowser/browser.glade:2102 ../docbrowser/browser.glade:2297 #: ../docbrowser/browser.glade:2387 ../docbrowser/browser.glade:2477 msgid "Ok" msgstr "" #: ../docbrowser/browser.glade:1658 msgid "3" msgstr "" #: ../docbrowser/browser.glade:1689 msgid "" "Once you receive your password on the mail, please enter it\n" "here:\n" msgstr "" #: ../docbrowser/browser.glade:1718 msgid "Password:" msgstr "" #: ../docbrowser/browser.glade:1837 msgid "4" msgstr "" #: ../docbrowser/browser.glade:1862 msgid "MonoDoc is logging into the server." msgstr "" #: ../docbrowser/browser.glade:1953 msgid "5" msgstr "" #: ../docbrowser/browser.glade:1978 msgid "" "Congratulations! \n" "\n" "You can now contribute your changes to MonoDoc by using \n" "the File/Upload menu option." msgstr "" #: ../docbrowser/browser.glade:2043 msgid "6" msgstr "" #: ../docbrowser/browser.glade:2068 msgid "" "Terminated \n" "\n" "The request to the Monodoc server has been cancelled." msgstr "" #: ../docbrowser/browser.glade:2132 msgid "7" msgstr "" #: ../docbrowser/browser.glade:2157 msgid "" "Please wait\n" "\n" "MonoDoc is checking the server version." msgstr "" #: ../docbrowser/browser.glade:2237 msgid "8" msgstr "" #: ../docbrowser/browser.glade:2262 msgid "" "Communications Problem \n" "\n" "There was a communications problem when communicating\n" "with the Mono Documentation Server." msgstr "" #: ../docbrowser/browser.glade:2327 msgid "9" msgstr "" #: ../docbrowser/browser.glade:2352 msgid "" "Version missmatch \n" "\n" "This version of MonoDoc is not compatible with the current Monodoc\n" "server, please upgrade your MonoDoc installation." msgstr "" #: ../docbrowser/browser.glade:2417 msgid "10" msgstr "" #: ../docbrowser/browser.glade:2442 msgid "" "Password Problem \n" "\n" "The passkey entered is incorrect. \n" "Please try again." msgstr "" #: ../docbrowser/browser.glade:2507 msgid "11" msgstr "" #: ../docbrowser/browser.glade:2528 msgid "Uploading Documentation Updates - MonoDoc" msgstr "" #: ../docbrowser/browser.glade:2583 msgid "Monodoc Documentation Updates Uploader. " msgstr "" #: ../docbrowser/browser.glade:2610 msgid "Status: " msgstr "" #: ../docbrowser/browser.glade:2668 msgid "New Comment" msgstr "" #: ../docbrowser/browser.glade:2690 msgid "TODO: Some advise on posting here." msgstr "" #: ../docbrowser/browser.glade:2766 msgid "Title:" msgstr "" #: ../docbrowser/browser.glade:2815 msgid "Comment" msgstr "" #: ../docbrowser/browser.glade:2841 msgid "E-Mail:" msgstr "" #: ../docbrowser/browser.glade:2867 ../docbrowser/browser.glade:3169 msgid "Name:" msgstr "" #: ../docbrowser/browser.glade:2987 msgid "Manage Bookmarks" msgstr "" #: ../docbrowser/browser.glade:3071 msgid "New Folder" msgstr "" #: ../docbrowser/browser.glade:3136 msgid "Add Bookmark" msgstr "" #: ../docbrowser/browser.glade:3227 msgid "Create in:" msgstr "" mono-tools-2.11/po/fr.gmo0000664000175000017500000000515612225357742017336 0ustar00directhexdirecthex00000000000000%pq64FZq"=,] !8-Q?4@D+`"'#8*V& @>  ' + E )0 Z      File {0} exists.Already running some test(s).Cancelled on user request.Do you have correct permissions to write to that file?Do you want to overwrite it?Don't know anything about {0}Elapsed time: {0}Error loading '{0}'Error loading assemblyHide details <<Loading test {0} of {1}Loading {0}...No assembly loaded.No test results availableResults not saved.Results saved to {0}Running tests...Save results to...Select an assembly to loadThe program will terminate now.There has been an error saving the results. Unhandled ExceptionWarning: unexpected combination.You have to select a test to run.You must run some tests in order to get results to save.translator_credits{0} tests loaded.Project-Id-Version: GNUnit Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-22 17:13-0500 PO-Revision-Date: 2004-08-05 11:14+0200 Last-Translator: Sebastien Pouliot Language-Team: Sebastien Pouliot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le fichier {0} existe.Test(s) en cours d'exécution.Opération interrompue sur demande de l'utilisateur.Avez-vous les permissions requises pour écrire dans ce fichier?Voulez-vous le ré-écrire?Aucune information n'est disponible sur {0}Temps d'éxécution: {0}Erreur lors du chargement de '{0}'Erreur lors du chargement de l'assemblyMoins de détails <<Chargement du test {0} de {1}Chargement de {0}...Aucun assembly n'est chargé.Aucun résultat des tests n'est disponibleRésultats non conservés.Résultats conservés dans {0}Tests en cours d'exécution...Résultats conservés dans...Choisir un assembly à chargerLe logiciel va se terminer maintenant.Une erreur est survenue lors de la conservation des résultats. Exception non traitéeAvertissement: combinaison innattendue.Un test doit être choisi pour s'exécuter.Des tests doivent être exécutés avant de conserver les résultats.Sebastien Pouliot {0} tests chargés.mono-tools-2.11/po/pt_BR.po0000664000175000017500000003630112225357701017560 0ustar00directhexdirecthex00000000000000# Mono Tools Portuguese (Brazilian) translation # Copyright (C) 2004, Maurício de Lemos Rodrigues Collares Neto # # This file is distributed under the same license as the MonoDoc package. # msgid "" msgstr "" "Project-Id-Version: Mono Tools\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-22 17:13-0500\n" "PO-Revision-Date: 2004-07-06 00:13-0300\n" "Last-Translator: Maurício de Lemos Rodrigues Collares Neto \n" "Language-Team: Maurício de Lemos Rodrigues Collares Neto \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: gnunit/src/AssemblyStore.cs:304 msgid "Already running some test(s)." msgstr "" #: gnunit/src/AssemblyStore.cs:587 msgid "Warning: unexpected combination." msgstr "" #: gnunit/src/AssemblyStore.cs:596 #, csharp-format msgid "Don't know anything about {0}" msgstr "" #: gnunit/src/FileDialog.cs:26 msgid "Select an assembly to load" msgstr "" #: gnunit/src/nunit-gtk.glade:10 msgid "Mono NUnit2 GUI" msgstr "" #: gnunit/src/nunit-gtk.glade:72 msgid "_Recent assemblies" msgstr "" #: gnunit/src/nunit-gtk.glade:92 msgid "_Clear recent" msgstr "" #: gnunit/src/nunit-gtk.glade:165 msgid "Enable/disable by category" msgstr "" #: gnunit/src/nunit-gtk.glade:166 msgid "_Categories" msgstr "" #: gnunit/src/nunit-gtk.glade:219 msgid "Open assembly" msgstr "" #: gnunit/src/nunit-gtk.glade:220 msgid "Open" msgstr "" #: gnunit/src/nunit-gtk.glade:234 msgid "Save results to a XML file" msgstr "" #: gnunit/src/nunit-gtk.glade:235 #, fuzzy msgid "Save As" msgstr "_Salvar" #: gnunit/src/nunit-gtk.glade:249 msgid "Run selected test fixture(s)" msgstr "" #: gnunit/src/nunit-gtk.glade:250 gnunit/src/nunit-gtk.glade:516 msgid "Run" msgstr "" #: gnunit/src/nunit-gtk.glade:265 docbrowser/browser.glade:1538 #: docbrowser/browser.glade:1917 docbrowser/browser.glade:2208 #: docbrowser/browser.glade:2557 msgid "Cancel" msgstr "Cancelar" #: gnunit/src/nunit-gtk.glade:266 msgid "Stop" msgstr "" #: gnunit/src/nunit-gtk.glade:280 msgid "Exit program" msgstr "" #: gnunit/src/nunit-gtk.glade:281 docbrowser/browser.glade:138 msgid "Quit" msgstr "Sair" #: gnunit/src/nunit-gtk.glade:390 msgid "Test: " msgstr "" #: gnunit/src/nunit-gtk.glade:588 msgid "Errors and failures" msgstr "" #: gnunit/src/nunit-gtk.glade:641 msgid "Tests not run" msgstr "" #: gnunit/src/nunit-gtk.glade:699 msgid "Standard error" msgstr "" #: gnunit/src/nunit-gtk.glade:757 msgid "Standard out" msgstr "" #: gnunit/src/nunit-gtk.glade:815 gnunit/src/main.cs:686 msgid "Error" msgstr "" #: gnunit/src/nunit-gtk.glade:904 #, fuzzy msgid "label" msgstr "label16" #: gnunit/src/nunit-gtk.glade:936 gnunit/src/main.cs:104 msgid "Show details >>" msgstr "" #: gnunit/src/nunit-gtk.glade:1009 msgid "Error details" msgstr "" #: gnunit/src/nunit-gtk.glade:1056 msgid "File exists. Overwrite?" msgstr "" #: gnunit/src/nunit-gtk.glade:1084 msgid "Don't save results" msgstr "" #: gnunit/src/nunit-gtk.glade:1098 msgid "Save results" msgstr "" #: gnunit/src/main.cs:37 #, csharp-format msgid "File {0} exists." msgstr "" #: gnunit/src/main.cs:38 msgid "Do you want to overwrite it?" msgstr "" #: gnunit/src/main.cs:107 msgid "Hide details <<" msgstr "" #: gnunit/src/main.cs:200 msgid "Uncategorized" msgstr "" #: gnunit/src/main.cs:408 msgid "No assembly loaded." msgstr "" #: gnunit/src/main.cs:434 #, csharp-format msgid "Loading {0}..." msgstr "" #: gnunit/src/main.cs:546 #, csharp-format msgid "Loading test {0} of {1}" msgstr "" #: gnunit/src/main.cs:557 msgid "Error loading assembly" msgstr "" #: gnunit/src/main.cs:558 #, csharp-format msgid "Error loading '{0}'" msgstr "" #: gnunit/src/main.cs:608 msgid "translator_credits" msgstr "" #: gnunit/src/main.cs:630 msgid "You have to select a test to run." msgstr "" #: gnunit/src/main.cs:660 msgid "No test results available" msgstr "" #: gnunit/src/main.cs:661 msgid "You must run some tests in order to get results to save." msgstr "" #: gnunit/src/main.cs:667 msgid "Save results to..." msgstr "" #: gnunit/src/main.cs:676 msgid "Results not saved." msgstr "" #: gnunit/src/main.cs:687 msgid "There has been an error saving the results.\n" msgstr "" #: gnunit/src/main.cs:688 msgid "Do you have correct permissions to write to that file?" msgstr "" #: gnunit/src/main.cs:696 #, csharp-format msgid "Results saved to {0}" msgstr "" #: gnunit/src/main.cs:774 #, csharp-format msgid "Tests (assertions): {0} ({3}) Ignored: {1} Failures: {2}" msgstr "" #: gnunit/src/main.cs:952 msgid "Running tests..." msgstr "" #: gnunit/src/main.cs:995 msgid "Cancelled on user request." msgstr "" #: gnunit/src/main.cs:1033 #, csharp-format msgid "{0} tests loaded." msgstr "" #: gnunit/src/main.cs:1051 #, csharp-format msgid "Elapsed time: {0}" msgstr "" #: gnunit/src/main.cs:1061 msgid "Unhandled Exception" msgstr "" #: gnunit/src/main.cs:1061 msgid "There has been an unhandled exception.\n" msgstr "" #: gnunit/src/main.cs:1062 msgid "The program will terminate now." msgstr "" #: docbrowser/browser.glade:8 msgid "Mono Documentation Library" msgstr "Biblioteca de documentação do Mono" #: docbrowser/browser.glade:35 msgid "_File" msgstr "_Arquivo" #: docbrowser/browser.glade:44 msgid "New _Tab" msgstr "" #: docbrowser/browser.glade:66 #, fuzzy msgid "_Lookup URL..." msgstr "_Procurar URL" #: docbrowser/browser.glade:88 msgid "_Print..." msgstr "" #: docbrowser/browser.glade:116 #, fuzzy msgid "_Close Tab" msgstr "_Fechar" #: docbrowser/browser.glade:164 msgid "_Edit" msgstr "_Editar" #: docbrowser/browser.glade:172 msgid "_Cut" msgstr "" #: docbrowser/browser.glade:194 msgid "_Copy" msgstr "_Copiar" #: docbrowser/browser.glade:216 msgid "_Paste" msgstr "" #: docbrowser/browser.glade:244 msgid "Select All" msgstr "Selecionar tudo" #: docbrowser/browser.glade:258 msgid "_View" msgstr "E_xibir" #: docbrowser/browser.glade:267 msgid "Collapse All" msgstr "Contrair todos" #: docbrowser/browser.glade:276 msgid "Show Inherited Members" msgstr "Exibir membros herdados" #: docbrowser/browser.glade:286 msgid "Show Comments" msgstr "Exibir comentários" #: docbrowser/browser.glade:300 msgid "_Bookmarks" msgstr "_Marcadores" #: docbrowser/browser.glade:315 #, fuzzy msgid "_Contributing" msgstr "_Enviar contribuições" #: docbrowser/browser.glade:323 #, fuzzy msgid "_Upload Contributions..." msgstr "_Enviar contribuições" #: docbrowser/browser.glade:345 msgid "_View Contribution Statistics..." msgstr "" #: docbrowser/browser.glade:372 msgid "Edit Mode" msgstr "" #: docbrowser/browser.glade:386 msgid "_Help" msgstr "A_juda" #: docbrowser/browser.glade:395 #, fuzzy msgid "About..." msgstr "Sobre" #: docbrowser/browser.glade:548 msgid "n/a" msgstr "n/d" #: docbrowser/browser.glade:657 msgid "_Contents" msgstr "_Conteúdo" #: docbrowser/browser.glade:721 msgid "_Index" msgstr "_Índice" #: docbrowser/browser.glade:784 msgid "_Search" msgstr "_Busca" #: docbrowser/browser.glade:856 msgid "About monodoc" msgstr "Sobre o monodoc" #: docbrowser/browser.glade:907 msgid "" "monodoc: The Mono Documentation Library viewer" msgstr "" "monodoc: O visualizador da Bibiloteca de " "Documentação do Mono" #: docbrowser/browser.glade:928 #, fuzzy msgid "Version " msgstr "Status: " #: docbrowser/browser.glade:970 #, fuzzy msgid "" "Authors:\n" " Miguel de Icaza (miguel@ximian.com)\n" " Duncan Mak (duncan@ximian.com)\n" " Joshua Tauberer (tauberer@for.net)\n" " Lee Malabone\n" " Philip Van Hoof\n" " Johannes Roith (johannes@jroith.de)\n" " Alp Toker (alp@atoker.com)\n" " Piers Haken\n" " John Luke (jluke@cfl.rr.com)\n" " Ben Maurer\n" " Mario Sopena Novales (mario.sopena@gmail.com)\n" " Rafael Ferreira (raf@ophion.org)\n" "\t " msgstr "" "Autores:\n" " Miguel de Icaza (miguel@ximian.com)\n" " Duncan Mak (duncan@ximian.com)\n" " Joshua Tauberer (tauberer@for.net)\n" " Lee Malabone\n" " Philip Van Hoof\n" " Johannes Roith (johannes@jroith.de)\n" " Alp Toker (alp@atoker.com)\n" " Piers Haken\n" " John Luke (jluke@cfl.rr.com)\n" " Ben Maurer" #: docbrowser/browser.glade:1005 msgid "" "Plugins:\n" " ECMA Documentation.\n" " Mono XML Documentation.\n" " Mono Handbook.\n" " Manual Pages.\n" " Compiler Errors.\n" " ECMA C# Specification." msgstr "" "Plugins:\n" " ECMA Documentation.\n" " Mono XML Documentation.\n" " Mono Handbook.\n" " Manual Pages.\n" " Compiler Errors.\n" " ECMA C# Specification." #: docbrowser/browser.glade:1080 #, fuzzy msgid "Lookup URL" msgstr "_Procurar URL" #: docbrowser/browser.glade:1103 #, fuzzy msgid "_URL to lookup:" msgstr "_URL a procurar:" #: docbrowser/browser.glade:1132 docbrowser/browser.glade:1360 #: docbrowser/browser.glade:1746 docbrowser/browser.glade:2726 #: docbrowser/browser.glade:2749 docbrowser/browser.glade:2798 msgid "*" msgstr "*" #: docbrowser/browser.glade:1135 msgid "lookup_entry" msgstr "lookup_entry" #: docbrowser/browser.glade:1183 msgid "Login configuration" msgstr "Configuração de login" #: docbrowser/browser.glade:1215 msgid "" "You can edit the contents of the API documentation in MonoDoc and " "contribute\n" "those back. To do this you must agree to relicense your updates under the " "terms\n" "of the MIT X11 Open Source License and register your email address with the\n" "documentation service.\n" "\n" "If you agree, click Continue" msgstr "" "Você pode editar o conteúdo da documentação da API no MonoDoc e contribuir\n" " este de volta. Para fazer isto, você tem que concordar em re-licenciar suas " "atualizações sob os termos da licença Open Source MIT X11 e registrar seu " "endereço de email com o\n" " serviço de documentação.\n" "\n" "Se você concorda, clique em Continuar" #: docbrowser/browser.glade:1271 docbrowser/browser.glade:1432 #: docbrowser/browser.glade:1807 msgid "Continue" msgstr "Continuar" #: docbrowser/browser.glade:1300 msgid "0" msgstr "0" #: docbrowser/browser.glade:1331 msgid "_Email:" msgstr "_Email:" #: docbrowser/browser.glade:1374 msgid "xx" msgstr "xx" #: docbrowser/browser.glade:1461 msgid "1" msgstr "1" #: docbrowser/browser.glade:1486 msgid "Monodoc is requesting an account for you." msgstr "O Monodoc está requisitando uma conta para você." #: docbrowser/browser.glade:1567 msgid "2" msgstr "2" #: docbrowser/browser.glade:1592 msgid "" "Error: Monodoc encountered a failure when requesting\n" "a password for your e-mail address. Try again later." msgstr "" "Erro: O Monodoc encontrou um erro ao requisitar\n" "uma senha pro seu endereço de email. Tente de novo mais tarde." #: docbrowser/browser.glade:1628 docbrowser/browser.glade:2013 #: docbrowser/browser.glade:2102 docbrowser/browser.glade:2297 #: docbrowser/browser.glade:2387 docbrowser/browser.glade:2477 msgid "Ok" msgstr "Ok" #: docbrowser/browser.glade:1658 msgid "3" msgstr "3" #: docbrowser/browser.glade:1689 msgid "" "Once you receive your password on the mail, please enter it\n" "here:\n" msgstr "" "Quando você receber a sua senha no email, favor digitá-la\n" "aqui:\n" #: docbrowser/browser.glade:1718 msgid "Password:" msgstr "Senha:" #: docbrowser/browser.glade:1837 msgid "4" msgstr "4" #: docbrowser/browser.glade:1862 msgid "MonoDoc is logging into the server." msgstr "O MonoDoc está autenticando-se no servidor." #: docbrowser/browser.glade:1953 msgid "5" msgstr "5" #: docbrowser/browser.glade:1978 msgid "" "Congratulations! \n" "\n" "You can now contribute your changes to MonoDoc by using \n" "the File/Upload menu option." msgstr "" "Parabéns! \n" "\n" "Agora você pode contribuir suas mudanças para o MonoDoc usando \n" "a opção de menu Arquivo/Enviar contribuição." #: docbrowser/browser.glade:2043 msgid "6" msgstr "6" #: docbrowser/browser.glade:2068 msgid "" "Terminated \n" "\n" "The request to the Monodoc server has been cancelled." msgstr "" "Terminado \n" "\n" "A requisição ao servidor do Monodoc foi cancelada." #: docbrowser/browser.glade:2132 msgid "7" msgstr "7" #: docbrowser/browser.glade:2157 msgid "" "Please wait\n" "\n" "MonoDoc is checking the server version." msgstr "" "Favor esperar\n" "\n" "O MonoDoc está verificando a versão do servidor." #: docbrowser/browser.glade:2237 msgid "8" msgstr "8" #: docbrowser/browser.glade:2262 msgid "" "Communications Problem \n" "\n" "There was a communications problem when communicating\n" "with the Mono Documentation Server." msgstr "" "Problema na comunicação \n" "\n" "Houve um problema de comunicação ao tentar se comunicar\n" "com o Servidor de Documentação do Mono." #: docbrowser/browser.glade:2327 msgid "9" msgstr "9" #: docbrowser/browser.glade:2352 msgid "" "Version missmatch \n" "\n" "This version of MonoDoc is not compatible with the current Monodoc\n" "server, please upgrade your MonoDoc installation." msgstr "" "Incompatibilidade de versões \n" "\n" "Esta versão do MonoDoc não é compatível com o servidor atual do\n" "Monodoc, favor atualizar a sua instalação do MonoDoc." #: docbrowser/browser.glade:2417 msgid "10" msgstr "10" #: docbrowser/browser.glade:2442 msgid "" "Password Problem \n" "\n" "The passkey entered is incorrect. \n" "Please try again." msgstr "" "Problema com a senha \n" "\n" "A senha digitada está incorreta. \n" "Favor tentar novamente." #: docbrowser/browser.glade:2507 msgid "11" msgstr "11" #: docbrowser/browser.glade:2528 msgid "Uploading Documentation Updates - MonoDoc" msgstr "Enviando atualizações de documentação - MonoDoc" #: docbrowser/browser.glade:2583 msgid "Monodoc Documentation Updates Uploader. " msgstr "Enviador de atualizações para a documentação do MonoDoc. " #: docbrowser/browser.glade:2610 msgid "Status: " msgstr "Status: " #: docbrowser/browser.glade:2668 msgid "New Comment" msgstr "Novo comentário" #: docbrowser/browser.glade:2690 msgid "TODO: Some advise on posting here." msgstr "TODO: Alguns conselhos sobre envio aqui." #: docbrowser/browser.glade:2766 msgid "Title:" msgstr "Título:" #: docbrowser/browser.glade:2815 msgid "Comment" msgstr "Comentário" #: docbrowser/browser.glade:2841 msgid "E-Mail:" msgstr "E-Mail:" #: docbrowser/browser.glade:2867 docbrowser/browser.glade:3169 msgid "Name:" msgstr "Nome:" #: docbrowser/browser.glade:2987 #, fuzzy msgid "Manage Bookmarks" msgstr "_Marcadores" #: docbrowser/browser.glade:3071 msgid "New Folder" msgstr "" #: docbrowser/browser.glade:3136 #, fuzzy msgid "Add Bookmark" msgstr "_Adicionar marcador" #: docbrowser/browser.glade:3227 msgid "Create in:" msgstr "" #~ msgid "Editing" #~ msgstr "Edição" #~ msgid "_Edit bookmarks..." #~ msgstr "_Editar marcadores..." #~ msgid "_Look for:" #~ msgstr "_Procurar por:" #, fuzzy #~ msgid "_Search for:" #~ msgstr "_Busca" #~ msgid "Lookup" #~ msgstr "Procurar" #~ msgid "Edit bookmarks" #~ msgstr "Editar marcadores:" #~ msgid "" #~ msgstr "" #~ msgid "" #~ msgstr "" #~ msgid "<_table>" #~ msgstr "<_table>" #~ msgid "<_see...>" #~ msgstr "<_see...>" #~ msgid "<_para>" #~ msgstr "<_para>" #~ msgid "Add Note\t" #~ msgstr "Adicionar nota\t" #~ msgid "Preview" #~ msgstr "Pré-visualizar" #~ msgid "label17" #~ msgstr "label17" mono-tools-2.11/po/ca.gmo0000664000175000017500000001124712225357742017310 0ustar00directhexdirecthex00000000000000FLa|PTry 6&8 >L`w &@C HV[n    , C S b o t {  , '   !3 8U            U c ie ! $ ! :. i         -0^!u*) 5=BSXu";$Mr *)Eo#; +7?FNU]nu)+E %D(4',  =2.$?51 *73#"> <C& F;/60!A89B:-@*monodoc: The Mono Documentation Library viewerAlready running some test(s).CancelCancelled on user request.Collapse AllDo you have correct permissions to write to that file?Do you want to overwrite it?Don't know anything about {0}Don't save resultsElapsed time: {0}ErrorError detailsError loading '{0}'Error loading assemblyErrors and failuresExit programFile exists. Overwrite?Hide details <<Loading test {0} of {1}Loading {0}...Mono Documentation LibraryMono NUnit2 GUINo assembly loaded.No test results availableOkOpenOpen assemblyQuitResults not saved.Results saved to {0}RunRun selected test fixture(s)Running tests...Save AsSave resultsSave results to a XML fileSave results to...Select AllSelect an assembly to loadShow CommentsShow Inherited MembersShow details >>Standard errorStandard outStopTest: Tests not runThe program will terminate now.There has been an error saving the results. There has been an unhandled exception. Unhandled ExceptionWarning: unexpected combination.You have to select a test to run.You must run some tests in order to get results to save._Bookmarks_Clear recent_Contents_Copy_Edit_File_Help_Index_Recent assemblies_Search_Viewlabeln/a{0} tests loaded.Project-Id-Version: Mono Tools Report-Msgid-Bugs-To: POT-Creation-Date: 2008-01-22 17:13-0500 PO-Revision-Date: 2004-05-28 19:18+0200 Last-Translator: Jordi Mas i Hernàndez Language-Team: Jordi Mas i Hernàndez MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit *monodoc: Visualitzador de la documentació de les biblioteques del MonoJa s'estan executant alguns testsCancel·laCancel·lat per petició de l'usuariContrau totsTeniu els permisos adequats per escriure en aquest fitxer?Voleu sobreescriure'l?No sé res de {0}No desis els resultatsTemps transcorregut: {0}ErrorDetalls de l'errorError carregant '{0}'Error carregant l'assemblyErrors i fallidesSurt del programaEl fitxer ja existeix. Voleu sobreescriure'l?Ocultar els detalls <<S'està carregant test {0} de {1}S'està carregant {0}...Documentació de les biblioteques del MonoMono NUnit2 GUINo hi ha cap assembly carregat.No hi ha resultats dels tests disponiblesD'acordObreObre un assemblySurtNo s'han desat els resultatsEls resultats s'han desat a {0}ExecutaExecuta els tests seleccionatsS'està executant els test...Anomena i desaDesa els resultatsDesa els resultats a un fitxer XMLDesa els resultats com a...Selecciona-ho totSeleccioneu un assembly per carregarMostra comentarisMostra els membres heredatsMostra els detalls >>Sortida d'errorSortida estàndardAturaTest: Tests no executatsEl programa es finalitzarà ara.Hi ha hagut un error desant els resultats Ha succeït una excepció no gestionada. Excepció no gestionadaAvís: combinació no esperada.Heu d'escollir un test per executarHeu d'exectuar alguns tests per obtenir resultats per desar_Adreçes d'interès_Buida recents_Continguts_Còpia_Edita_FitxerAj_uda_ÍndexFitxers _recents_Cerca_Visualitzacióetiquetan/d{0} tests carregats.mono-tools-2.11/po/Makefile.in.in0000644000175000017500000001760412225357724020674 0ustar00directhexdirecthex00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ libdir = @libdir@ localedir = $(libdir)/locale gnulocaledir = $(datadir)/locale gettextsrcdir = $(datadir)/glib-2.0/gettext/po subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = mkdir -p CC = @CC@ GENCAT = @GENCAT@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge DEFS = @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) SOURCES = POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = LINGUAS ChangeLog Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \ $(POFILES) $(GMOFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat .c.o: $(COMPILE) $< .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: $(AM_V_GEN) file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) $(MSGFMT_OPTS) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES) $(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) \ --msgid-bugs-address='http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general' \ --add-comments --keyword=_ --keyword=N_ \ --keyword=C_:1c,2 \ --keyword=NC_:1c,2 \ --keyword=g_dcgettext:2 \ --keyword=g_dngettext:2,3 \ --keyword=g_dpgettext2:2c,3 \ --flag=N_:1:pass-c-format \ --flag=C_:2:pass-c-format \ --flag=NC_:2:pass-c-format \ --flag=g_dngettext:2:pass-c-format \ --flag=g_strdup_printf:1:c-format \ --flag=g_string_printf:2:c-format \ --flag=g_string_append_printf:2:c-format \ --flag=g_error_new:3:c-format \ --flag=g_set_error:4:c-format \ --flag=g_markup_printf_escaped:1:c-format \ --flag=g_log:3:c-format \ --flag=g_print:1:c-format \ --flag=g_printerr:1:c-format \ --flag=g_printf:1:c-format \ --flag=g_fprintf:2:c-format \ --flag=g_sprintf:2:c-format \ --flag=g_snprintf:3:c-format \ --flag=g_scanner_error:2:c-format \ --flag=g_scanner_warn:2:c-format \ $(POTFILES) \ && test ! -f $(GETTEXT_PACKAGE).po \ || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \ && mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot ) install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ case "$$cat" in \ *.gmo) destdir=$(gnulocaledir);; \ *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ $(MKINSTALLDIRS) $$dir; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ fi; \ if test -r $$cat.m; then \ $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ if test -r $(srcdir)/$$cat.m ; then \ $(INSTALL_DATA) $(srcdir)/$$cat.m \ $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ true; \ fi; \ fi; \ done if test "$(PACKAGE)" = "glib"; then \ $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ done if test "$(PACKAGE)" = "glib"; then \ rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ fi check: all dvi info tags TAGS ID: mostlyclean: rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m 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 $(GMOFILES) distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ cd $(srcdir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ echo "$$lang:"; \ if $(MSGMERGE) $$lang.po $(GETTEXT_PACKAGE).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$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 $$cat failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done # POTFILES is created from POTFILES.in by stripping comments, empty lines # and Intltool tags (enclosed in square brackets), and appending a full # relative path to them POTFILES: POTFILES.in ( if test 'x$(srcdir)' != 'x.'; then \ posrcprefix='$(top_srcdir)/'; \ else \ posrcprefix="../"; \ fi; \ rm -f $@-t $@ \ && (sed -e '/^#/d' \ -e "s/^\[.*\] +//" \ -e '/^[ ]*$$/d' \ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ | sed -e '$$s/\\$$//') > $@-t \ && chmod a-w $@-t \ && mv $@-t $@ ) Makefile: Makefile.in.in ../config.status POTFILES cd .. \ && $(SHELL) ./config.status $(subdir)/$@.in # 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: mono-tools-2.11/Makefile.in0000664000175000017500000005773412225357730017660 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/mono-tools.spec.in \ $(top_srcdir)/configure AUTHORS COPYING COPYING.LIB ChangeLog \ INSTALL NEWS config.guess config.sub install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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 = mono-tools.spec 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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 = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi 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 am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ACLOCAL_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = po docbrowser asn1view create-native-map ilcontrast gui-compare \ gendarme mperfmon gsharp webdoc minvoke Mono.Profiler #capture aclocal flags for autoreconf ACLOCAL_AMFLAGS = $(ACLOCAL_FLAGS) all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(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) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu 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): mono-tools.spec: $(top_builddir)/config.status $(srcdir)/mono-tools.spec.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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ 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=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(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_OPT=$${XZ_OPT--e} 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.lz*) \ lzip -dc $(distdir).tar.lz | $(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 u+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" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(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: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-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-lzip 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: mono-tools-2.11/mono-tools.spec.in0000664000175000017500000000553212225357701021165 0ustar00directhexdirecthex00000000000000Name: mono-tools Version: @VERSION@ Release: 0 License: GPL v2 only ; LGPL v2.0 only ; MIT License (or similar) BuildArch: noarch Url: http://go-mono.org/ Source0: %{name}-%{version}.tar.bz2 Summary: Collection of Tools and Utilities for Mono Group: Development/Tools/Other BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: mono-devel mono-nunit monodoc-core BuildRequires: update-desktop-files BuildRequires: webkit-sharp BuildRequires: glade-sharp2 %description Mono Tools is a collection of development and testing programs and utilities for use with Mono. %files -f %{name}.lang %defattr(-, root, root) %_bindir/create-native-map %_bindir/emveepee %_bindir/gendarme %_bindir/gendarme-wizard %_bindir/gd2i %_bindir/gsharp %_bindir/gui-compare %_bindir/ilcontrast %_bindir/minvoke %_bindir/monodoc %_bindir/mperfmon %_bindir/mprof-decoder %_bindir/mprof-heap-viewer %_datadir/applications/gendarme-wizard.desktop %_datadir/applications/gsharp.desktop %_datadir/applications/ilcontrast.desktop %_datadir/applications/monodoc.desktop %_datadir/create-native-map %_datadir/icons/hicolor/*/apps/monodoc.png %_datadir/pixmaps/gendarme.svg %_datadir/pixmaps/ilcontrast.png %_datadir/pixmaps/monodoc.png %_datadir/pkgconfig/create-native-map.pc %_datadir/pkgconfig/gendarme-framework.pc %_mandir/man1/create-native-map* %_mandir/man1/gd2i* %_mandir/man1/gendarme* %_mandir/man1/mperfmon* %_mandir/man1/mprof-decoder* %_mandir/man1/mprof-heap-viewer* %_mandir/man5/gendarme* %_prefix/lib/create-native-map %_prefix/lib/gendarme %_prefix/lib/gsharp %_prefix/lib/gui-compare %_prefix/lib/ilcontrast %_prefix/lib/minvoke %_prefix/lib/mono-tools %_prefix/lib/monodoc/*.dll* %_prefix/lib/monodoc/*.exe* %_prefix/lib/monodoc/sources %_prefix/lib/mperfmon %package -n monodoc-http License: X11/MIT Summary: ASP.NET front-end for displaying Monodoc documentation Group: Development/Tools/Other %description -n monodoc-http Monodoc-http provides an ASP.NET front-end for displaying installed Monodoc documentation. %files -n monodoc-http %defattr(-, root, root) %_prefix/lib/monodoc/web %prep %setup -q %build ./configure --prefix=%{_prefix} --libdir=%{_prefix}/lib --sysconfdir=%{_sysconfdir} --mandir=%{_mandir} %install make install DESTDIR=%{buildroot} %suse_update_desktop_file monodoc %suse_update_desktop_file ilcontrast %suse_update_desktop_file gendarme-wizard %suse_update_desktop_file gsharp # Move create-native-map stuff out of lib into share mkdir $RPM_BUILD_ROOT/%_prefix/share/create-native-map mv $RPM_BUILD_ROOT/%_prefix/lib/create-native-map/MapAttribute.cs $RPM_BUILD_ROOT/%_prefix/share/create-native-map mv $RPM_BUILD_ROOT/%_prefix/lib/pkgconfig $RPM_BUILD_ROOT/%_prefix/share %find_lang %{name} %clean rm -Rf %{buildroot} %post %{_bindir}/monodoc --make-index %changelog mono-tools-2.11/install-sh0000755000175000017500000003325612026454250017600 0ustar00directhexdirecthex00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.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 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac 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 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; 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 X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$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: mono-tools-2.11/COPYING.LIB0000664000175000017500000006143112225357701017236 0ustar00directhexdirecthex00000000000000 The Mono runtime is licensed under the terms of the GNU Library General Public License, version 2. GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, 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 library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] 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 Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the 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 a program 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. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. 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, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library 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 compile 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) 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. c) 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. d) 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 source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. 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 to 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 Library 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 Appendix: 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. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, 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. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! mono-tools-2.11/create-native-map/0000775000175000017500000000000012225357743021101 5ustar00directhexdirecthex00000000000000mono-tools-2.11/create-native-map/Makefile.in0000664000175000017500000004402112225357726023150 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = create-native-map DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = bin src lib man 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) --gnu create-native-map/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu create-native-map/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): # 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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic 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 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 ctags \ ctags-recursive distclean distclean-generic 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 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: mono-tools-2.11/create-native-map/bin/0000775000175000017500000000000012225357743021651 5ustar00directhexdirecthex00000000000000mono-tools-2.11/create-native-map/bin/Makefile.in0000664000175000017500000003401612225357726023723 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = create-native-map/bin DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = 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__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" SCRIPTS = $(bin_SCRIPTS) SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ bin_SCRIPTS = create-native-map EXTRA_DIST = create-native-map.in CLEANFILES = create-native-map 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) --gnu create-native-map/bin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu create-native-map/bin/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): install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ 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)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) 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)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -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." 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-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binSCRIPTS 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-binSCRIPTS .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-binSCRIPTS 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 pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-binSCRIPTS create-native-map: create-native-map.in cp $(srcdir)/$@.in $@ chmod +x $@ # 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: mono-tools-2.11/create-native-map/bin/Makefile.am0000664000175000017500000000026112225357701023676 0ustar00directhexdirecthex00000000000000 bin_SCRIPTS = create-native-map EXTRA_DIST = create-native-map.in CLEANFILES = create-native-map create-native-map: create-native-map.in cp $(srcdir)/$@.in $@ chmod +x $@ mono-tools-2.11/create-native-map/bin/create-native-map.in0000775000175000017500000000017412225357701025502 0ustar00directhexdirecthex00000000000000#!/bin/sh bindir=`dirname "$0"` libdir="$bindir/../lib/create-native-map" exec mono "$libdir/create-native-map.exe" "$@" mono-tools-2.11/create-native-map/Makefile.am0000664000175000017500000000003212225357701023122 0ustar00directhexdirecthex00000000000000SUBDIRS = bin src lib man mono-tools-2.11/create-native-map/ChangeLog0000664000175000017500000001510712225357701022651 0ustar00directhexdirecthex000000000000002007-06-28 Jonathan Pryor * src/create-native-map.cs: Sort members by Ordinal|IgnoreCase; sort types by their .FullName property, so that namespace is taken into account when sorting them and emitting their declarations. * src/TestMap.cs: Make one of the enum's a `long' type, to see how the constants change in the generated .h file. * src/test.h.ref, src/test.xml.ref, src/test.c.ref, src/test.cs.ref: Flush (due to TestEnum type change in TestMap.cs). 2007-04-12 Jonathan Pryor * src/create-native-map.cs: Remove unused methods; fix indenting; fix _cnm_return_val_if_overflow() so that it doesn't trigger false positives on Linux and Intel Mac OS X * src/Makefile.am: Test --impl-header with a header that actually exists -- allows the libtest.so target to actually work. (Granted, now "test.h" has *two* includes in test.c, but that's not a problem.) Add a test-overflow target to create test-overflow program from test-overflow.c, test-overflow.h. * src/test-overflow.c, src/test-overflow.h: Tests for _cnm_return_val_if_overflow(). * src/test.c.ref: Flush. 2006-11-30 Mike Kestner * bin/Makefile.am: distcheck fixes * bin/create-native-map.in: renamed for distcheck friendliness * src/Makefile.am: distcheck fixes 2006-11-30 Jonathan Pryor * src/create-native-map.cs: _cnm_return_val_if_overflow() shouldn't check for overflow if DEBUG isn't defined. It's causing too many false positives in MonoPosixHelper. * src/test.c.ref: Flush (_cnm_return_val_if_overflow() change). 2006-11-17 Jonathan Pryor * src/create-native-map.cs: SupressFlags values should still be bitwise OR'd with the value returned from the FromManagedType() functions, just like they are in the ToManagedType() functions. * src/test.c.ref: Flush (SuppressFlags fix) 2006-11-15 Jonathan Pryor * src/create-native-map.cs: - Mask against SuppressFlags if SuppressFlags is non-null, as if you have bitmask & non-bitmask values in the same enum, it's fairly certain that the non-bitmask values won't start at 0. This fixes FilePermissions mapping in MonoPosixHelper. - Fix _cnm_return_val_if_overflow() macro so that it doesn't generate warnings about value overflows. * src/MapAttribute.cs: Change SuppressFlags to be a string, not a bool. This contains the value to mask against. * src/TestMap.cs: Test new SuppressFlags semantics. * src/test.c.ref: Flush (updated _cnm_return_val_if_overflow() value; addition of bitmask semantics). 2006-10-30 Wade Berrier * src/Makefile.am bin/Makefile.am: add source files to EXTRA_DIST to fix building from tarball 2006-10-27 Jonathan Pryor * man/create-native-map.1: Add documentation for MapAttribute.SuppressFlags; remove documentation for MapAttribute.NativeSymbolPrefix. * src/create-native-map.cs: Add support for MapAttribute.SuppressFlags. * src/MapAttribute.cs: Add SuppressFlags property (default is false). * src/TestMap.cs: Add [Flags] enums, and tests for [Map(SuppressFlags=true)]. * src/test.c.ref, src/test.cs.ref, src/test.h.ref, src/test.xml.ref: Flush. 2006-10-26 Jonathan Pryor * src/create-native-map.cs: Enclose structure conversion functions with `#ifdef HAVE_<>', as not all platforms will have the required types. For example, only *nix platforms have `struct stat', so having a function which uses `struct stat' on Win32 will break (w/o the use of Cygwin). * src/test.c.ref: Flush. 2006-10-26 Jonathan Pryor * src/create-native-map.cs: Remove the fallback, and just fallback to the appropriate System.Int??.MinValue/MaxValue values. * src/test.c.ref: Flush. 2006-10-26 Jonathan Pryor * src/create-native-map.cs: Add support for limits fallbacks -- if G_MAXINT8 isn't defined, fallback to INT8_MAX (from ), and if that doesn't exist use a hard-coded (possibly wrong) implementation. * src/test.c.ref: Flush. 2006-10-24 Jonathan Pryor * Makefile.am, lib/Makefile.am: Added; build subdirectories. * bin/create-native-map: Script to startup `dirname`/../lib/create-native-map/create-native-map.exe. * bin/Makefile.am: Added; install $bindir/create-native-map. * lib/create-native-map/Makefile.am: Added; present to make sure $top_builddir/lib/create-native-map is created. * lib/pkgconfig/create-native-map.pc.in: Aded; pkgconfig file to copy an installed version of create-native-map.exe & MapAttribute.cs. * lib/pkgconfig/Makfile.am: Added; install the create-native-map.pc file. * man/create-native-map.1: Man page for create-native-map. * man/Makefile.am: Added; install the man page. * src/create-native-map.cs: - Moved from mcs/class/Mono.Posix/Mono.Unix.Native/make-map.cs - check for t.Namespace==null before looking using Configuration.NamespaceRenames (Dictionary`2 doesn't like null keys); - HeaderFileGenerator needs to know about member renames (so it uses the renamed member in conversion code); - Clean up enumeration generation for readablility. - Generate structure declarations for [Map]-decorated types and types used within a [DllImport]-marked method. - Warnings should be prefixed with "warning: ". - Don't generate function prototypes for already-generated functions (e.g. if we emit a prototype for Mono_Posix_ToFilePermissions, don't re-declare that function later because we found a DllImport for it). - Add new arguments: --autoconf-member, --exclude-native-symbol, --library, --rename-member, --rename-namespace. These are to: - Allow native structure members to only be accessed if an Autoconf macro is defined (--autoconf-member) - Modify the C "namespace" of types/functions (--rename-namespace) - Specify the DllImport library that prototypes should be generated for (--library) - Exclude symbols from the function declaration system (--exclude-native-symbol) - Member renaming (--rename-member). (Curse you glibc making st_atime a macro!) * src/Makefile.am: Added; build create-native-map.exe; test cases. * src/MapAttribute.cs: Added; the attribute that create-native-map looks for, and should be copied into projects using create-native-map. * src/TestMap.cs: Added; test case for create-native-map.exe * src/test.c.ref, src/test.cs.ref, src/test.h.ref, src/test.xml.ref: Added; expected create-native-map.exe output for TestMap.cs. * ChangeLog: Started. mono-tools-2.11/create-native-map/man/0000775000175000017500000000000012225357743021654 5ustar00directhexdirecthex00000000000000mono-tools-2.11/create-native-map/man/Makefile.in0000664000175000017500000003545112225357726023732 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = create-native-map/man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = create-native-map.1 EXTRA_DIST = $(man_MANS) 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) --gnu create-native-map/man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu create-native-map/man/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): install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | 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='$(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,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man 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-man1 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-man uninstall-man: uninstall-man1 .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-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-man uninstall-man1 # 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: mono-tools-2.11/create-native-map/man/create-native-map.10000664000175000017500000002421412225357701025235 0ustar00directhexdirecthex00000000000000.\" .\" create-native-map manual page. .\" (C) 2006 Jonathan Pryor .\" Author: .\" Jonathan Pryor (jonpryor@vt.edu) .\" .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .TH "create-native-map" 1 .SH NAME create-native-map \- C/C# Mapping Creator .SH SYNOPSIS .B create-native-map [OPTIONS]* ASSEMBLY-FILE-NAME OUPUT-PREFIX .SH OPTIONS .TP .I \--autoconf-header=HEADER .I HEADER is a header file name in the syntax typically used with the C .I #include statement, e.g. .I "#include " or .I "#include ""local.h""" \&. .Sp An Autoconf-formatted macro is generated from the include name, and a .I #include directive is wrapped within a .I #ifdef block for the Autoconf macro within the generated .I .c file. .Sp For example, .I "--autoconf-header=" would generate the code: .nf #ifndef HAVE_STDIO_H #include #endif /* ndef HAVE_STDIO_H */ .fi .TP .I \--autoconf-member=MEMBER Specify that any access to .I MEMBER should be wrapped within a .I #ifdef HAVE_MEMBER block. .I MEMBER can be either a .I field-name or a .I class-name \&. .I field-name combination. .Sp For example, given the C# declaration: .nf [Mono.Unix.Native.Map ("struct dirent")] struct Dirent { public long d_off; } .fi then .I "--autoconf-member=d_off" would generate the code similar to: .nf int ToDirent (struct dirent *from, struct Dirent *to) { #ifdef HAVE_STRUCT_DIRENT_D_OFF to->d_off = from->d_off; #endif /* ndef HAVE_STRUCT_DIRENT_D_OFF */ } .fi .TP .I \--exclude-native-symbol=SYMBOL .I SYMBOL is a .I [DllImport] -marked method that should .I not have a prototype generated for it. .TP .I \--impl-header=HEADER Insert a .I #include statement within the generated .I .c file for .I HEADER \&. .Sp For example, .I "--impl-header=" generates .nf #include .fi .TP .I \--impl-macro=MACRO Insert a .I #define statement within the generated .I .c file. .I MACRO can contain a .I "=" to separate the macro name from the macro value. .Sp For example, .I "--impl-macro=FOO=42" generates .nf #define FOO 42 .fi .TP .I \--library=LIBRARY Create prototypes for .I [DllImport] -marked methods which reference the native library .I LIBRARY into the generated .I .h file. .TP .I \--public-header=HEADER Insert a .I #include statement within the generated .I .h file for .I HEADER \&. .Sp For example, .I "--public-header=" generates .nf #include .fi .TP .I \--public-macro=MACRO Insert a .I #define statement within the generated .I .h file. .I MACRO can contain a .I "=" to separate the macro name from the macro value. .Sp For example, .I "--public-macro=FOO=42" generates .nf #define FOO 42 .fi .TP .I \--rename-member=FROM=TO This is used when .I FROM is a C macro, and thus must be altered in order to be used sanely. All generated references to the managed representation will use .I TO instead of .I FROM \&. .Sp For example, given the C# declaration: .nf [Mono.Unix.Native.Map ("struct stat")] struct Stat { public long st_atime; } .fi and the argument .I "--rename-member=st_atime=st_atime_" , the generated .I .h file would contain: .nf struct Stat { gint64 st_atime_; }; .fi (note the altered field name), while the generated .I .c file would contain: .nf ToStat (struct stat *from, struct Stat *to) { to->st_atime_ = from->st_atime; } .fi .TP .I \--rename-namespace=FROM=TO By default, the C "namespace" (symbol prefix) is the C# namespace; types within the C# namespace .I Mono.Unix.Native would be in the C "namespace" .I Mono_Unix_Native \&. Use .I "--rename-namespace" to modify the default, e.g. .I "--rename-namespace=Mono.Unix.Native=Mono_Posix" \&. .PP .SH DESCRIPTION .I create-native-map is a program for a specific scenario: keeping code which is tightly coupled between C and C# in sync with each other, based upon the C# types. .PP Platform Invoke is only useful if the managed code knows the exact types and layout of all unmanaged structures it uses. This is usually the case on Windows, but it is .I not the case on Unix. For example, .I "struct stat" makes use of types with sizes that will vary from platform to platform (or even based on the compiler macros defined!). For example, .I off_t is usually a signed 32-bit integer on ILP32 platforms, but may be a signed 64-bit integer on LP64 platforms, but may also be a 64-bit signed integer on ILP32 platforms if the .I "_FILE_OFFSET_BITS" macro has the value 64. In short, everything is flexible within Unix, and managed code can't deal with such flexibility. .PP Thus, the niche for .I create-native-map : assume a fixed ABI that managed code can target, and generate code to "thunk" the managed representations to the corresponding native representations. This needs to be done for .I everything that can vary between platforms and compiler flags, from enumeration values ( .I SIGBUS has the value 10 on FreeBSD but 7 on Linux) to structure members (how big is .I off_t ?). .PP .I create-native-map will inspect .I ASSEMBLY-FILE-NAME and output the following files: .RS .ne 8 .TP .I OUTPUT-PREFIX.h Contains enumeration values, class and structure declarations, delegate declarations, and .I [DllImport] -marked methods (from the library specified by .I \--library ) within the assembly .I ASSEMBLY-FILE-NAME \&. .TP .I OUTPUT-PREFIX.c Contains the implementation of enumeration and structure conversion functions. .TP .I OUTPUT-PREFIX.cs Contains a partial class .I NativeConvert containing enumeration translation methods. .TP .I OUTPUT-PREFIX.xml Generates ECMA XML documentation stubs for the enumeration translation methods in .I OUTPUT-PREFIX.cs \&. .ne .RE .PP .I create-native-map primarily looks for .I MapAttribute -decorated types, and makes use of two .I MapAttribute properties: .RS .ne 8 .TP .I NativeType Contains the corresponding C type. Only useful if applied to classes, structures, and fields. .TP .I SuppressFlags When specified on an enumeration member of a .I [Flags] -decorated enumeration type, .I disables the normal code generator support for bit-masking enumeration types. .Sp This is useful when bitmask and non-bitmask information is stored within the same type, and bitmask checking shouldn't be used for the non-bitmask values. Example: .I Mono.Unix.Native.FilePermissions.S_IFREG , which is not a bitmask value, while most of .I FilePermissions consists of bitmask values ( .I FilePermissions.S_IRUSR , .I FilePermissions.S_IWUSR , etc.). .ne .RE .PP The .I MapAttribute attribute can be specified on classes, structures, delegates, fields, and enumerations. .TP Delegates Code generation for delegates ignores the .I MapAttribute.NativeType property, and generates a function pointer .I typedef that best matches the delegate declaration into the .I .h file. .Sp For example, .nf namespace Foo { [Map] delegate string MyCallback (string s); } .fi generates the .I typedef : .nf typedef char* (*Foo_MyCallback) (const char *s); .fi .TP Classes and Structures A .I [Map] -decorated class or structure will get a C structure declaration within the .I .h file: .nf [Map] struct Foo { public int i; } .fi becomes .nf struct Foo { public int i; }; .fi If the .I MapAttribute.NativeType property is set, then conversion functions will be declared within the .I .h file and created within the .I .c file: .nf namespace Foo { [Map ("struct stat")] struct Stat { public uint st_uid; } } .fi becomes .nf /* The .h file */ struct Foo_Stat { unsigned int st_uid; }; int Foo_FromStat (struct Foo_Stat *from, struct stat *to); int Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to); /* The .c file */ int Foo_FromStat (struct Foo_Stat *from, struct stat *to) { memset (to, 0, sizeof(*to); to->st_uid = from->st_uid; return 0; } int Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to) { memset (to, 0, sizeof(*to); to->st_uid = from->st_uid; return 0; } .fi .TP Fields If a field (1) has the .I MapAttribute attribute, and (2) has the .I MapAttribute.NativeType property set, then the specified native type will be used for overflow checking. For example: .nf namespace Foo { [Map ("struct stat")] struct Stat { [Map ("off_t")] public long st_size; } } .fi generates .nf /* The .h file */ struct Foo_Stat { gint64 st_size; }; int Foo_FromStat (struct Foo_Stat *from, struct stat *to); int Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to); /* The .c file */ int Foo_FromStat (struct Foo_Stat *from, struct stat *to) { _cnm_return_val_if_overflow (off_t, from->st_size, -1); memset (to, 0, sizeof(*to); to->st_size = from->st_size; return 0; } int Foo_ToStat (struct stat *to, sxtruct Foo_Stat *to) { _cnm_return_val_if_overflow (gint64, from->st_size, -1); memset (to, 0, sizeof(*to); to->st_size = from->st_size; return 0; } .fi This is useful for better error checking within the conversion functions. .I MapAttribute.NativeType is required for this as there is no other way to know what the native type is (without parsing the system header files...). .TP Enumerations Generates a C enumeration and macros for each of the members within the enumeration. .I To and .I From functions are also declared in the .I .h file and implemented in the .I .c file. .Sp For example, .nf namespace Foo { [Map] enum Errno { EINVAL } } .fi would generate the following in the .I .h file: .nf enum Foo_Errno { Foo_Errno_EINVAL = 0, #define Foo_Errno_EINVAL Foo_Errno_EINVAL }; int Foo_FromErrno (int from, int *to); int Foo_ToErrno (int from, int *to); .fi and generates the following in the the .I .c file: .nf int Foo_FromErrno (int from, int *to) { *to = 0; if (from == Foo_Errno_EPERM) #ifdef EINVAL {*to = EINVAL;} #else {errno = EINVAL; return -1;} #endif return 0; } int Foo_ToErrno (int from, int *to) { *to = 0; #ifdef EINVAL if (from == EINVAL) {*to = Foo_Errno_EPERM; return 0;} #endif return -1; } .fi Different code will be generated if the managed enum is a .I [Flags] -decorated enumeration (to account for bitwise flags), but this is the basic idea. .PP .SH MAILING LISTS Visit http://lists.ximian.com/mailman/listinfo/mono-devel-list for details. .SH WEB SITE Visit http://www.mono-project.com for details mono-tools-2.11/create-native-map/man/Makefile.am0000664000175000017500000000007312225357701023702 0ustar00directhexdirecthex00000000000000 man_MANS = create-native-map.1 EXTRA_DIST = $(man_MANS) mono-tools-2.11/create-native-map/src/0000775000175000017500000000000012225357743021670 5ustar00directhexdirecthex00000000000000mono-tools-2.11/create-native-map/src/Makefile.in0000664000175000017500000003631712225357726023750 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = create-native-map/src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(assemblydir)" DATA = $(assembly_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ CNM_FILES = \ create-native-map.cs \ MapAttribute.cs TM_FILES = \ MapAttribute.cs \ TestMap.cs cnm_build_sources = $(addprefix $(srcdir)/, $(CNM_FILES)) tm_build_sources = $(addprefix $(srcdir)/, $(TM_FILES)) EXE = ../lib/create-native-map/create-native-map.exe REFS = -r:Mono.Posix.dll assemblydir = $(prefix)/lib/create-native-map assembly_DATA = $(EXE) MapAttribute.cs test_output = test.c test.h test.cs test.xml CLEANFILES = $(EXE) $(EXE).mdb $(test_output) TestMap.dll TestMap.dll.mdb libtest.so EXTRA_DIST = $(CNM_FILES) TestMap.cs test.c.ref test.cs.ref test.h.ref test.xml.ref 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) --gnu create-native-map/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu create-native-map/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): install-assemblyDATA: $(assembly_DATA) @$(NORMAL_INSTALL) @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(assemblydir)'"; \ $(MKDIR_P) "$(DESTDIR)$(assemblydir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \ done uninstall-assemblyDATA: @$(NORMAL_UNINSTALL) @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(assemblydir)'; $(am__uninstall_files_from_dir) 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)$(assemblydir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -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." 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-assemblyDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-assemblyDATA .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-assemblyDATA 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 pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-assemblyDATA all: $(EXE) $(EXE) : $(cnm_build_sources) $(GMCS) $(MCS_FLAGS) -d:TRACE -debug+ -out:$@ -target:exe $(REFS) $(cnm_build_sources) check: $(PROGRAM) TestMap.dll TestMap.dll: $(tm_build_sources) $(PROGRAM) $(MCS) -debug+ -out:$@ -t:library $(tm_build_sources) $(test_output): TestMap.dll $(EXE) ../bin/create-native-map \ --autoconf-member autoconf_me \ --autoconf-header='' \ --public-header='' \ --public-macro=DefineMe=42 \ --impl-header='' \ --impl-header='"test.h"' \ --impl-macro='FOO="foo"' \ --exclude-native-symbol=exclude_native_symbol \ --library=NativeLib \ --rename-member=st_atime=st_atime_ \ --rename-namespace=MakeMap.ToBeRenamed=MakeMap_Rename \ $< test check: $(test_output) for f in test.c test.h test.cs test.xml ; do \ diff -rup $(srcdir)/$$f.ref $$f ; \ done check-update: for f in test.c test.h test.cs test.xml ; do \ mv $$f $$f.ref ; \ done libtest.so: test.c gcc -shared -o $@ $^ -I.. `pkg-config --libs --cflags glib-2.0` test-overflow: test-overflow.c test-overflow.h test.c gcc -o $@ $< `pkg-config --libs --cflags glib-2.0` # 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: mono-tools-2.11/create-native-map/src/test.xml.ref0000664000175000017500000005555212225357701024152 0ustar00directhexdirecthex00000000000000 Method System.Boolean The managed value to convert. The OS-specific equivalent value. Converts a enumeration value to an OS-specific value. if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the OS-specific equivalent value of into . Otherwise, will contain 0. Method System.Int32 The managed value to convert. Converts a to an OS-specific value. The equivalent OS-specific value. has no equivalent OS-specific value. Method System.Boolean The OS-specific value to convert. The managed equivalent value Converts an OS-specific value to a . if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the managed equivalent value of into . Otherwise, will contain a 0 cast to a . The current conversion functions are unable to determine if a value in a [Flags]-marked enumeration does not exist on the current platform. As such, if contains a flag value which the current platform doesn't support, it will not be present in the managed value returned. This should only be a problem if was not previously returned by . Method MakeMap.Test.FlagsEnum The OS-specific value to convert. Converts an OS-specific value to a . An approximation of the equivalent managed value. The current conversion functions are unable to determine if a value in a [Flags]-marked enumeration does not exist on the current platform. As such, if contains a flag value which the current platform doesn't support, it will not be present in the managed value returned. This should only be a problem if was not previously returned by . Method System.Boolean The managed value to convert. The OS-specific equivalent value. Converts a enumeration value to an OS-specific value. if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the OS-specific equivalent value of into . Otherwise, will contain 0. Method System.Int32 The managed value to convert. Converts a to an OS-specific value. The equivalent OS-specific value. has no equivalent OS-specific value. Method System.Boolean The OS-specific value to convert. The managed equivalent value Converts an OS-specific value to a . if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the managed equivalent value of into . Otherwise, will contain a 0 cast to a . The current conversion functions are unable to determine if a value in a [Flags]-marked enumeration does not exist on the current platform. As such, if contains a flag value which the current platform doesn't support, it will not be present in the managed value returned. This should only be a problem if was not previously returned by . Method MakeMap.Test.SimpleFlagsEnum The OS-specific value to convert. Converts an OS-specific value to a . An approximation of the equivalent managed value. The current conversion functions are unable to determine if a value in a [Flags]-marked enumeration does not exist on the current platform. As such, if contains a flag value which the current platform doesn't support, it will not be present in the managed value returned. This should only be a problem if was not previously returned by . Method System.Boolean The managed value to convert. The OS-specific equivalent value. Converts a enumeration value to an OS-specific value. if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the OS-specific equivalent value of into . Otherwise, will contain 0. Method System.Int64 The managed value to convert. Converts a to an OS-specific value. The equivalent OS-specific value. has no equivalent OS-specific value. Method System.Boolean The OS-specific value to convert. The managed equivalent value Converts an OS-specific value to a . if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the managed equivalent value of into . Otherwise, will contain a 0 cast to a . Method MakeMap.Test.TestEnum The OS-specific value to convert. Converts an OS-specific value to a . The equivalent managed value. has no equivalent managed value. Method System.Boolean The managed value to convert. The OS-specific equivalent value. Converts a enumeration value to an OS-specific value. if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the OS-specific equivalent value of into . Otherwise, will contain 0. Method System.Int32 The managed value to convert. Converts a to an OS-specific value. The equivalent OS-specific value. has no equivalent OS-specific value. Method System.Boolean The OS-specific value to convert. The managed equivalent value Converts an OS-specific value to a . if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the managed equivalent value of into . Otherwise, will contain a 0 cast to a . Method MakeMap.ToBeRenamed.Colors The OS-specific value to convert. Converts an OS-specific value to a . The equivalent managed value. has no equivalent managed value. mono-tools-2.11/create-native-map/src/test.h.ref0000664000175000017500000001421412225357701023567 0ustar00directhexdirecthex00000000000000/* * This file was automatically generated by create-native-map from TestMap.dll. * * DO NOT MODIFY. */ #ifndef INC_TestMap_test_H #define INC_TestMap_test_H #include G_BEGIN_DECLS /* * Public Macros */ #ifndef DefineMe #define DefineMe 42 #endif /* ndef DefineMe */ /* * Public Includes */ #include /* * Enumerations */ enum MakeMap_Test_FlagsEnum { MakeMap_Test_FlagsEnum_A = 0x00000001, #define MakeMap_Test_FlagsEnum_A MakeMap_Test_FlagsEnum_A MakeMap_Test_FlagsEnum_All = 0x0000000f, #define MakeMap_Test_FlagsEnum_All MakeMap_Test_FlagsEnum_All MakeMap_Test_FlagsEnum_B = 0x00000002, #define MakeMap_Test_FlagsEnum_B MakeMap_Test_FlagsEnum_B MakeMap_Test_FlagsEnum_C = 0x00000004, #define MakeMap_Test_FlagsEnum_C MakeMap_Test_FlagsEnum_C MakeMap_Test_FlagsEnum_D = 0x00000008, #define MakeMap_Test_FlagsEnum_D MakeMap_Test_FlagsEnum_D MakeMap_Test_FlagsEnum_None = 0x00000000, #define MakeMap_Test_FlagsEnum_None MakeMap_Test_FlagsEnum_None MakeMap_Test_FlagsEnum_S_IFBLK = 0x00006000, #define MakeMap_Test_FlagsEnum_S_IFBLK MakeMap_Test_FlagsEnum_S_IFBLK MakeMap_Test_FlagsEnum_S_IFCHR = 0x00002000, #define MakeMap_Test_FlagsEnum_S_IFCHR MakeMap_Test_FlagsEnum_S_IFCHR MakeMap_Test_FlagsEnum_S_IFDIR = 0x00004000, #define MakeMap_Test_FlagsEnum_S_IFDIR MakeMap_Test_FlagsEnum_S_IFDIR MakeMap_Test_FlagsEnum_S_IFIFO = 0x00001000, #define MakeMap_Test_FlagsEnum_S_IFIFO MakeMap_Test_FlagsEnum_S_IFIFO MakeMap_Test_FlagsEnum_S_IFLNK = 0x0000a000, #define MakeMap_Test_FlagsEnum_S_IFLNK MakeMap_Test_FlagsEnum_S_IFLNK MakeMap_Test_FlagsEnum_S_IFMT = 0x0000f000, #define MakeMap_Test_FlagsEnum_S_IFMT MakeMap_Test_FlagsEnum_S_IFMT MakeMap_Test_FlagsEnum_S_IFREG = 0x00008000, #define MakeMap_Test_FlagsEnum_S_IFREG MakeMap_Test_FlagsEnum_S_IFREG MakeMap_Test_FlagsEnum_S_IFSOCK = 0x0000c000, #define MakeMap_Test_FlagsEnum_S_IFSOCK MakeMap_Test_FlagsEnum_S_IFSOCK }; int MakeMap_Test_FromFlagsEnum (int x, int *r); int MakeMap_Test_ToFlagsEnum (int x, int *r); enum MakeMap_Test_SimpleFlagsEnum { MakeMap_Test_SimpleFlagsEnum_A = 0x00000001, #define MakeMap_Test_SimpleFlagsEnum_A MakeMap_Test_SimpleFlagsEnum_A MakeMap_Test_SimpleFlagsEnum_B = 0x00000002, #define MakeMap_Test_SimpleFlagsEnum_B MakeMap_Test_SimpleFlagsEnum_B MakeMap_Test_SimpleFlagsEnum_C = 0x00000004, #define MakeMap_Test_SimpleFlagsEnum_C MakeMap_Test_SimpleFlagsEnum_C MakeMap_Test_SimpleFlagsEnum_D = 0x00000008, #define MakeMap_Test_SimpleFlagsEnum_D MakeMap_Test_SimpleFlagsEnum_D MakeMap_Test_SimpleFlagsEnum_None = 0x00000000, #define MakeMap_Test_SimpleFlagsEnum_None MakeMap_Test_SimpleFlagsEnum_None }; int MakeMap_Test_FromSimpleFlagsEnum (int x, int *r); int MakeMap_Test_ToSimpleFlagsEnum (int x, int *r); enum MakeMap_Test_TestEnum { MakeMap_Test_TestEnum_Bar = 0x0000000000000001, #define MakeMap_Test_TestEnum_Bar MakeMap_Test_TestEnum_Bar MakeMap_Test_TestEnum_Baz = 0x0000000000000002, #define MakeMap_Test_TestEnum_Baz MakeMap_Test_TestEnum_Baz MakeMap_Test_TestEnum_Foo = 0x0000000000000000, #define MakeMap_Test_TestEnum_Foo MakeMap_Test_TestEnum_Foo MakeMap_Test_TestEnum_Qux = 0x0000000000000003, #define MakeMap_Test_TestEnum_Qux MakeMap_Test_TestEnum_Qux }; int MakeMap_Test_FromTestEnum (gint64 x, gint64 *r); int MakeMap_Test_ToTestEnum (gint64 x, gint64 *r); enum MakeMap_Rename_Colors { MakeMap_Rename_Colors_Blue = 0x00000001, #define MakeMap_Rename_Colors_Blue MakeMap_Rename_Colors_Blue MakeMap_Rename_Colors_Green = 0x00000002, #define MakeMap_Rename_Colors_Green MakeMap_Rename_Colors_Green MakeMap_Rename_Colors_Red = 0x00000000, #define MakeMap_Rename_Colors_Red MakeMap_Rename_Colors_Red }; int MakeMap_Rename_FromColors (int x, int *r); int MakeMap_Rename_ToColors (int x, int *r); /* * Managed Structure Declarations */ struct MakeMap_Test_Baz; struct MakeMap_Test_Foo; struct MakeMap_Test_FooHolder; struct MakeMap_Test_ForDelegate; struct MakeMap_Test_Qux; struct MakeMap_Rename_Stat; /* * Inferred Structure Declarations */ struct foo; struct foo_holder; /* * Delegate Declarations */ typedef void (*DelArrayBaz) (int i, struct MakeMap_Test_Baz** b); typedef void (*DelArrayFoo) (int i, struct MakeMap_Test_Foo* f); typedef void (*DelBaz) (int i, struct MakeMap_Test_Baz* b); typedef void (*DelFoo) (int i, struct MakeMap_Test_Foo f); typedef void (*DelRefArrayBaz) (int i, struct MakeMap_Test_Baz*** b); typedef void (*DelRefArrayFoo) (int i, struct MakeMap_Test_Foo** f); typedef void (*DelRefBaz) (int i, struct MakeMap_Test_Baz** b); typedef void (*DelRefFoo) (int i, struct MakeMap_Test_Foo* f); typedef char* (*MyDelegate) (int b1, unsigned char b2, signed char b3, short s1, unsigned short us1, int i1, unsigned int ui1, gint64 l1, guint64 ul1, void* p1, void* p2, const char* s2, char* sb1, void* h, struct MakeMap_Test_ForDelegate fd); /* * Structures */ struct MakeMap_Test_Baz { DelFoo b1; DelRefFoo b2; DelArrayFoo b3; DelRefArrayFoo b4; DelBaz b5; DelRefBaz b6; DelArrayBaz b7; DelRefArrayBaz b8; }; struct MakeMap_Test_Foo { int foo; void* p; gint64 autoconf_me; }; int MakeMap_Test_FromFoo (struct MakeMap_Test_Foo* from, struct foo *to); int MakeMap_Test_ToFoo (struct foo *from, struct MakeMap_Test_Foo* to); struct MakeMap_Test_FooHolder { struct MakeMap_Test_Foo foo; /* struct foo */ gint64 mode; }; int MakeMap_Test_FromFooHolder (struct MakeMap_Test_FooHolder* from, struct foo_holder *to); int MakeMap_Test_ToFooHolder (struct foo_holder *from, struct MakeMap_Test_FooHolder* to); struct MakeMap_Test_ForDelegate { int i; }; struct MakeMap_Test_Qux { int i; struct MakeMap_Test_Baz* b; }; struct MakeMap_Rename_Stat { gint64 st_atime_; /* time_t */ }; /* * Functions */ void UseQux (DelFoo b, struct MakeMap_Test_Qux** q); G_END_DECLS #endif /* ndef INC_Mono_Posix_test_H */ mono-tools-2.11/create-native-map/src/test.c.ref0000664000175000017500000003727612225357701023577 0ustar00directhexdirecthex00000000000000/* * This file was automatically generated by create-native-map from TestMap.dll. * * DO NOT MODIFY. */ #ifdef HAVE_CONFIG_H #include #endif /* ndef HAVE_CONFIG_H */ #include #include /* * Implementation Macros */ #ifndef FOO #define FOO "foo" #endif /* ndef FOO */ /* * Implementation Includes */ #ifdef HAVE_UNISTD_H #include #endif /* ndef HAVE_UNISTD_H */ #include #include "test.h" #include "test.h" #include /* errno, EOVERFLOW */ #include /* g* types, g_assert_not_reached() */ #if defined (G_MININT8) #define CNM_MININT8 G_MININT8 #else #define CNM_MININT8 (-128) #endif #if defined (G_MAXINT8) #define CNM_MAXINT8 G_MAXINT8 #else #define CNM_MAXINT8 (127) #endif #if defined (G_MAXUINT8) #define CNM_MAXUINT8 G_MAXUINT8 #else #define CNM_MAXUINT8 (255) #endif #if defined (G_MININT16) #define CNM_MININT16 G_MININT16 #else #define CNM_MININT16 (-32768) #endif #if defined (G_MAXINT16) #define CNM_MAXINT16 G_MAXINT16 #else #define CNM_MAXINT16 (32767) #endif #if defined (G_MAXUINT16) #define CNM_MAXUINT16 G_MAXUINT16 #else #define CNM_MAXUINT16 (65535) #endif #if defined (G_MININT32) #define CNM_MININT32 G_MININT32 #else #define CNM_MININT32 (-2147483648) #endif #if defined (G_MAXINT32) #define CNM_MAXINT32 G_MAXINT32 #else #define CNM_MAXINT32 (2147483647) #endif #if defined (G_MAXUINT32) #define CNM_MAXUINT32 G_MAXUINT32 #else #define CNM_MAXUINT32 (4294967295U) #endif #if defined (G_MININT64) #define CNM_MININT64 G_MININT64 #else #define CNM_MININT64 (-9223372036854775808LL) #endif #if defined (G_MAXINT64) #define CNM_MAXINT64 G_MAXINT64 #else #define CNM_MAXINT64 (9223372036854775807LL) #endif #if defined (G_MAXUINT64) #define CNM_MAXUINT64 G_MAXUINT64 #else #define CNM_MAXUINT64 (18446744073709551615ULL) #endif /* returns TRUE if @type is an unsigned type */ #define _cnm_integral_type_is_unsigned(type) \ (sizeof(type) == sizeof(gint8) \ ? (((type)-1) > CNM_MAXINT8) \ : sizeof(type) == sizeof(gint16) \ ? (((type)-1) > CNM_MAXINT16) \ : sizeof(type) == sizeof(gint32) \ ? (((type)-1) > CNM_MAXINT32) \ : sizeof(type) == sizeof(gint64) \ ? (((type)-1) > CNM_MAXINT64) \ : (g_assert_not_reached (), 0)) /* returns the minimum value of @type as a gint64 */ #define _cnm_integral_type_min(type) \ (_cnm_integral_type_is_unsigned (type) \ ? 0 \ : sizeof(type) == sizeof(gint8) \ ? CNM_MININT8 \ : sizeof(type) == sizeof(gint16) \ ? CNM_MININT16 \ : sizeof(type) == sizeof(gint32) \ ? CNM_MININT32 \ : sizeof(type) == sizeof(gint64) \ ? CNM_MININT64 \ : (g_assert_not_reached (), 0)) /* returns the maximum value of @type as a guint64 */ #define _cnm_integral_type_max(type) \ (_cnm_integral_type_is_unsigned (type) \ ? sizeof(type) == sizeof(gint8) \ ? CNM_MAXUINT8 \ : sizeof(type) == sizeof(gint16) \ ? CNM_MAXUINT16 \ : sizeof(type) == sizeof(gint32) \ ? CNM_MAXUINT32 \ : sizeof(type) == sizeof(gint64) \ ? CNM_MAXUINT64 \ : (g_assert_not_reached (), 0) \ : sizeof(type) == sizeof(gint8) \ ? CNM_MAXINT8 \ : sizeof(type) == sizeof(gint16) \ ? CNM_MAXINT16 \ : sizeof(type) == sizeof(gint32) \ ? CNM_MAXINT32 \ : sizeof(type) == sizeof(gint64) \ ? CNM_MAXINT64 \ : (g_assert_not_reached (), 0)) #ifdef _CNM_DUMP #define _cnm_dump(to_t,from) \ printf ("# %s -> %s: uns=%i; min=%llx; max=%llx; value=%llx; lt=%i; l0=%i; gt=%i; e=%i\n", \ #from, #to_t, \ (int) _cnm_integral_type_is_unsigned (to_t), \ (gint64) (_cnm_integral_type_min (to_t)), \ (gint64) (_cnm_integral_type_max (to_t)), \ (gint64) (from), \ (((gint64) _cnm_integral_type_min (to_t)) <= (gint64) from), \ (from < 0), \ (((guint64) from) <= (guint64) _cnm_integral_type_max (to_t)), \ !((int) _cnm_integral_type_is_unsigned (to_t) \ ? ((0 <= from) && \ ((guint64) from <= (guint64) _cnm_integral_type_max (to_t))) \ : ((gint64) _cnm_integral_type_min(to_t) <= (gint64) from && \ (guint64) from <= (guint64) _cnm_integral_type_max (to_t))) \ ) #else /* ndef _CNM_DUMP */ #define _cnm_dump(to_t, from) do {} while (0) #endif /* def _CNM_DUMP */ #ifdef DEBUG #define _cnm_return_val_if_overflow(to_t,from,val) G_STMT_START { \ int uns = _cnm_integral_type_is_unsigned (to_t); \ gint64 min = (gint64) _cnm_integral_type_min (to_t); \ guint64 max = (guint64) _cnm_integral_type_max (to_t); \ gint64 sf = (gint64) from; \ guint64 uf = (guint64) from; \ if (!(uns ? ((0 <= from) && (uf <= max)) \ : (min <= sf && (from < 0 || uf <= max)))) { \ _cnm_dump(to_t, from); \ errno = EOVERFLOW; \ return (val); \ } \ } G_STMT_END #else /* !def DEBUG */ /* don't do any overflow checking */ #define _cnm_return_val_if_overflow(to_t,from,val) G_STMT_START { \ } G_STMT_END #endif /* def DEBUG */ int MakeMap_Test_FromFlagsEnum (int x, int *r) { *r = 0; if ((x & MakeMap_Test_FlagsEnum_A) == MakeMap_Test_FlagsEnum_A) #ifdef A *r |= A; #else /* def A */ {errno = EINVAL; return -1;} #endif /* ndef A */ if ((x & MakeMap_Test_FlagsEnum_All) == MakeMap_Test_FlagsEnum_All) #ifdef All *r |= All; #else /* def All */ {/* Ignoring MakeMap_Test_FlagsEnum_All, as it is constructed from other values */} #endif /* ndef All */ if ((x & MakeMap_Test_FlagsEnum_B) == MakeMap_Test_FlagsEnum_B) #ifdef B *r |= B; #else /* def B */ {errno = EINVAL; return -1;} #endif /* ndef B */ if ((x & MakeMap_Test_FlagsEnum_C) == MakeMap_Test_FlagsEnum_C) #ifdef C *r |= C; #else /* def C */ {errno = EINVAL; return -1;} #endif /* ndef C */ if ((x & MakeMap_Test_FlagsEnum_D) == MakeMap_Test_FlagsEnum_D) #ifdef D *r |= D; #else /* def D */ {errno = EINVAL; return -1;} #endif /* ndef D */ if ((x & MakeMap_Test_FlagsEnum_None) == MakeMap_Test_FlagsEnum_None) #ifdef None *r |= None; #else /* def None */ {errno = EINVAL; return -1;} #endif /* ndef None */ if ((x & MakeMap_Test_FlagsEnum_S_IFMT) == MakeMap_Test_FlagsEnum_S_IFBLK) #ifdef S_IFBLK *r |= S_IFBLK; #else /* def S_IFBLK */ {errno = EINVAL; return -1;} #endif /* ndef S_IFBLK */ if ((x & MakeMap_Test_FlagsEnum_S_IFMT) == MakeMap_Test_FlagsEnum_S_IFCHR) #ifdef S_IFCHR *r |= S_IFCHR; #else /* def S_IFCHR */ {errno = EINVAL; return -1;} #endif /* ndef S_IFCHR */ if ((x & MakeMap_Test_FlagsEnum_S_IFMT) == MakeMap_Test_FlagsEnum_S_IFDIR) #ifdef S_IFDIR *r |= S_IFDIR; #else /* def S_IFDIR */ {errno = EINVAL; return -1;} #endif /* ndef S_IFDIR */ if ((x & MakeMap_Test_FlagsEnum_S_IFMT) == MakeMap_Test_FlagsEnum_S_IFIFO) #ifdef S_IFIFO *r |= S_IFIFO; #else /* def S_IFIFO */ {errno = EINVAL; return -1;} #endif /* ndef S_IFIFO */ if ((x & MakeMap_Test_FlagsEnum_S_IFMT) == MakeMap_Test_FlagsEnum_S_IFLNK) #ifdef S_IFLNK *r |= S_IFLNK; #else /* def S_IFLNK */ {errno = EINVAL; return -1;} #endif /* ndef S_IFLNK */ if ((x & MakeMap_Test_FlagsEnum_S_IFMT) == MakeMap_Test_FlagsEnum_S_IFMT) #ifdef S_IFMT *r |= S_IFMT; #else /* def S_IFMT */ {/* Ignoring MakeMap_Test_FlagsEnum_S_IFMT, as it is constructed from other values */} #endif /* ndef S_IFMT */ if ((x & MakeMap_Test_FlagsEnum_S_IFMT) == MakeMap_Test_FlagsEnum_S_IFREG) #ifdef S_IFREG *r |= S_IFREG; #else /* def S_IFREG */ {errno = EINVAL; return -1;} #endif /* ndef S_IFREG */ if ((x & MakeMap_Test_FlagsEnum_S_IFMT) == MakeMap_Test_FlagsEnum_S_IFSOCK) #ifdef S_IFSOCK *r |= S_IFSOCK; #else /* def S_IFSOCK */ {errno = EINVAL; return -1;} #endif /* ndef S_IFSOCK */ if (x == 0) return 0; return 0; } int MakeMap_Test_ToFlagsEnum (int x, int *r) { *r = 0; if (x == 0) return 0; #ifdef A if ((x & A) == A) *r |= MakeMap_Test_FlagsEnum_A; #endif /* ndef A */ #ifdef All if ((x & All) == All) *r |= MakeMap_Test_FlagsEnum_All; #endif /* ndef All */ #ifdef B if ((x & B) == B) *r |= MakeMap_Test_FlagsEnum_B; #endif /* ndef B */ #ifdef C if ((x & C) == C) *r |= MakeMap_Test_FlagsEnum_C; #endif /* ndef C */ #ifdef D if ((x & D) == D) *r |= MakeMap_Test_FlagsEnum_D; #endif /* ndef D */ #ifdef None if ((x & None) == None) *r |= MakeMap_Test_FlagsEnum_None; #endif /* ndef None */ #ifdef S_IFBLK if ((x & S_IFMT) == S_IFBLK) *r |= MakeMap_Test_FlagsEnum_S_IFBLK; #endif /* ndef S_IFBLK */ #ifdef S_IFCHR if ((x & S_IFMT) == S_IFCHR) *r |= MakeMap_Test_FlagsEnum_S_IFCHR; #endif /* ndef S_IFCHR */ #ifdef S_IFDIR if ((x & S_IFMT) == S_IFDIR) *r |= MakeMap_Test_FlagsEnum_S_IFDIR; #endif /* ndef S_IFDIR */ #ifdef S_IFIFO if ((x & S_IFMT) == S_IFIFO) *r |= MakeMap_Test_FlagsEnum_S_IFIFO; #endif /* ndef S_IFIFO */ #ifdef S_IFLNK if ((x & S_IFMT) == S_IFLNK) *r |= MakeMap_Test_FlagsEnum_S_IFLNK; #endif /* ndef S_IFLNK */ #ifdef S_IFMT if ((x & S_IFMT) == S_IFMT) *r |= MakeMap_Test_FlagsEnum_S_IFMT; #endif /* ndef S_IFMT */ #ifdef S_IFREG if ((x & S_IFMT) == S_IFREG) *r |= MakeMap_Test_FlagsEnum_S_IFREG; #endif /* ndef S_IFREG */ #ifdef S_IFSOCK if ((x & S_IFMT) == S_IFSOCK) *r |= MakeMap_Test_FlagsEnum_S_IFSOCK; #endif /* ndef S_IFSOCK */ return 0; } #ifdef HAVE_STRUCT_FOO int MakeMap_Test_FromFoo (struct MakeMap_Test_Foo *from, struct foo *to) { _cnm_return_val_if_overflow (int, from->foo, -1); #ifdef HAVE_STRUCT_FOO_AUTOCONF_ME _cnm_return_val_if_overflow (gint64, from->autoconf_me, -1); #endif /* ndef HAVE_STRUCT_FOO_AUTOCONF_ME */ memset (to, 0, sizeof(*to)); to->foo = from->foo; to->p = from->p; #ifdef HAVE_STRUCT_FOO_AUTOCONF_ME to->autoconf_me = from->autoconf_me; #endif /* ndef HAVE_STRUCT_FOO_AUTOCONF_ME */ return 0; } #endif /* ndef HAVE_STRUCT_FOO */ #ifdef HAVE_STRUCT_FOO int MakeMap_Test_ToFoo (struct foo *from, struct MakeMap_Test_Foo *to) { _cnm_return_val_if_overflow (int, from->foo, -1); #ifdef HAVE_STRUCT_FOO_AUTOCONF_ME _cnm_return_val_if_overflow (gint64, from->autoconf_me, -1); #endif /* ndef HAVE_STRUCT_FOO_AUTOCONF_ME */ memset (to, 0, sizeof(*to)); to->foo = from->foo; to->p = from->p; #ifdef HAVE_STRUCT_FOO_AUTOCONF_ME to->autoconf_me = from->autoconf_me; #endif /* ndef HAVE_STRUCT_FOO_AUTOCONF_ME */ return 0; } #endif /* ndef HAVE_STRUCT_FOO */ #ifdef HAVE_STRUCT_FOO_HOLDER int MakeMap_Test_FromFooHolder (struct MakeMap_Test_FooHolder *from, struct foo_holder *to) { memset (to, 0, sizeof(*to)); if (MakeMap_Test_FromFoo (&from->foo, &to->foo) != 0) { return -1; } if (MakeMap_Test_FromTestEnum (from->mode, &to->mode) != 0) { return -1; } return 0; } #endif /* ndef HAVE_STRUCT_FOO_HOLDER */ #ifdef HAVE_STRUCT_FOO_HOLDER int MakeMap_Test_ToFooHolder (struct foo_holder *from, struct MakeMap_Test_FooHolder *to) { memset (to, 0, sizeof(*to)); if (MakeMap_Test_ToFoo (&from->foo, &to->foo) != 0) { return -1; } if (MakeMap_Test_ToTestEnum (from->mode, &to->mode) != 0) { return -1; } return 0; } #endif /* ndef HAVE_STRUCT_FOO_HOLDER */ int MakeMap_Test_FromSimpleFlagsEnum (int x, int *r) { *r = 0; if ((x & MakeMap_Test_SimpleFlagsEnum_A) == MakeMap_Test_SimpleFlagsEnum_A) #ifdef A *r |= A; #else /* def A */ {errno = EINVAL; return -1;} #endif /* ndef A */ if ((x & MakeMap_Test_SimpleFlagsEnum_B) == MakeMap_Test_SimpleFlagsEnum_B) #ifdef B *r |= B; #else /* def B */ {errno = EINVAL; return -1;} #endif /* ndef B */ if ((x & MakeMap_Test_SimpleFlagsEnum_C) == MakeMap_Test_SimpleFlagsEnum_C) #ifdef C *r |= C; #else /* def C */ {errno = EINVAL; return -1;} #endif /* ndef C */ if ((x & MakeMap_Test_SimpleFlagsEnum_D) == MakeMap_Test_SimpleFlagsEnum_D) #ifdef D *r |= D; #else /* def D */ {errno = EINVAL; return -1;} #endif /* ndef D */ if ((x & MakeMap_Test_SimpleFlagsEnum_None) == MakeMap_Test_SimpleFlagsEnum_None) #ifdef None *r |= None; #else /* def None */ {errno = EINVAL; return -1;} #endif /* ndef None */ if (x == 0) return 0; return 0; } int MakeMap_Test_ToSimpleFlagsEnum (int x, int *r) { *r = 0; if (x == 0) return 0; #ifdef A if ((x & A) == A) *r |= MakeMap_Test_SimpleFlagsEnum_A; #endif /* ndef A */ #ifdef B if ((x & B) == B) *r |= MakeMap_Test_SimpleFlagsEnum_B; #endif /* ndef B */ #ifdef C if ((x & C) == C) *r |= MakeMap_Test_SimpleFlagsEnum_C; #endif /* ndef C */ #ifdef D if ((x & D) == D) *r |= MakeMap_Test_SimpleFlagsEnum_D; #endif /* ndef D */ #ifdef None if ((x & None) == None) *r |= MakeMap_Test_SimpleFlagsEnum_None; #endif /* ndef None */ return 0; } int MakeMap_Test_FromTestEnum (gint64 x, gint64 *r) { *r = 0; if (x == MakeMap_Test_TestEnum_Bar) #ifdef Bar {*r = Bar; return 0;} #else /* def Bar */ {errno = EINVAL; return -1;} #endif /* ndef Bar */ if (x == MakeMap_Test_TestEnum_Baz) #ifdef Baz {*r = Baz; return 0;} #else /* def Baz */ {errno = EINVAL; return -1;} #endif /* ndef Baz */ if (x == MakeMap_Test_TestEnum_Foo) #ifdef Foo {*r = Foo; return 0;} #else /* def Foo */ {errno = EINVAL; return -1;} #endif /* ndef Foo */ if (x == MakeMap_Test_TestEnum_Qux) #ifdef Qux {*r = Qux; return 0;} #else /* def Qux */ {errno = EINVAL; return -1;} #endif /* ndef Qux */ if (x == 0) return 0; errno = EINVAL; return -1; } int MakeMap_Test_ToTestEnum (gint64 x, gint64 *r) { *r = 0; if (x == 0) return 0; #ifdef Bar if (x == Bar) {*r = MakeMap_Test_TestEnum_Bar; return 0;} #endif /* ndef Bar */ #ifdef Baz if (x == Baz) {*r = MakeMap_Test_TestEnum_Baz; return 0;} #endif /* ndef Baz */ #ifdef Foo if (x == Foo) {*r = MakeMap_Test_TestEnum_Foo; return 0;} #endif /* ndef Foo */ #ifdef Qux if (x == Qux) {*r = MakeMap_Test_TestEnum_Qux; return 0;} #endif /* ndef Qux */ errno = EINVAL; return -1; } int MakeMap_Rename_FromColors (int x, int *r) { *r = 0; if (x == MakeMap_Rename_Colors_Blue) #ifdef Blue {*r = Blue; return 0;} #else /* def Blue */ {errno = EINVAL; return -1;} #endif /* ndef Blue */ if (x == MakeMap_Rename_Colors_Green) #ifdef Green {*r = Green; return 0;} #else /* def Green */ {errno = EINVAL; return -1;} #endif /* ndef Green */ if (x == MakeMap_Rename_Colors_Red) #ifdef Red {*r = Red; return 0;} #else /* def Red */ {errno = EINVAL; return -1;} #endif /* ndef Red */ if (x == 0) return 0; errno = EINVAL; return -1; } int MakeMap_Rename_ToColors (int x, int *r) { *r = 0; if (x == 0) return 0; #ifdef Blue if (x == Blue) {*r = MakeMap_Rename_Colors_Blue; return 0;} #endif /* ndef Blue */ #ifdef Green if (x == Green) {*r = MakeMap_Rename_Colors_Green; return 0;} #endif /* ndef Green */ #ifdef Red if (x == Red) {*r = MakeMap_Rename_Colors_Red; return 0;} #endif /* ndef Red */ errno = EINVAL; return -1; } mono-tools-2.11/create-native-map/src/MapAttribute.cs0000664000175000017500000000331312225357701024612 0ustar00directhexdirecthex00000000000000// // MapAttribute.cs // // Author: // Miguel de Icaza (miguel@gnome.org) // // (C) Novell, Inc. // // // 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; [AttributeUsage ( AttributeTargets.Class | AttributeTargets.Delegate | AttributeTargets.Enum | AttributeTargets.Field | AttributeTargets.Struct)] internal class MapAttribute : Attribute { private string nativeType; private string suppressFlags; public MapAttribute () { } public MapAttribute (string nativeType) { this.nativeType = nativeType; } public string NativeType { get {return nativeType;} } public string SuppressFlags { get {return suppressFlags;} set {suppressFlags = value;} } } mono-tools-2.11/create-native-map/src/Makefile.am0000664000175000017500000000373412225357701023725 0ustar00directhexdirecthex00000000000000 CNM_FILES = \ create-native-map.cs \ MapAttribute.cs TM_FILES = \ MapAttribute.cs \ TestMap.cs cnm_build_sources = $(addprefix $(srcdir)/, $(CNM_FILES)) tm_build_sources = $(addprefix $(srcdir)/, $(TM_FILES)) EXE = ../lib/create-native-map/create-native-map.exe REFS = -r:Mono.Posix.dll all: $(EXE) $(EXE) : $(cnm_build_sources) $(GMCS) $(MCS_FLAGS) -d:TRACE -debug+ -out:$@ -target:exe $(REFS) $(cnm_build_sources) assemblydir = $(prefix)/lib/create-native-map assembly_DATA = $(EXE) MapAttribute.cs check: $(PROGRAM) TestMap.dll TestMap.dll: $(tm_build_sources) $(PROGRAM) $(MCS) -debug+ -out:$@ -t:library $(tm_build_sources) test_output = test.c test.h test.cs test.xml $(test_output): TestMap.dll $(EXE) ../bin/create-native-map \ --autoconf-member autoconf_me \ --autoconf-header='' \ --public-header='' \ --public-macro=DefineMe=42 \ --impl-header='' \ --impl-header='"test.h"' \ --impl-macro='FOO="foo"' \ --exclude-native-symbol=exclude_native_symbol \ --library=NativeLib \ --rename-member=st_atime=st_atime_ \ --rename-namespace=MakeMap.ToBeRenamed=MakeMap_Rename \ $< test check: $(test_output) for f in test.c test.h test.cs test.xml ; do \ diff -rup $(srcdir)/$$f.ref $$f ; \ done check-update: for f in test.c test.h test.cs test.xml ; do \ mv $$f $$f.ref ; \ done libtest.so: test.c gcc -shared -o $@ $^ -I.. `pkg-config --libs --cflags glib-2.0` test-overflow: test-overflow.c test-overflow.h test.c gcc -o $@ $< `pkg-config --libs --cflags glib-2.0` CLEANFILES = $(EXE) $(EXE).mdb $(test_output) TestMap.dll TestMap.dll.mdb libtest.so EXTRA_DIST = $(CNM_FILES) TestMap.cs test.c.ref test.cs.ref test.h.ref test.xml.ref mono-tools-2.11/create-native-map/src/test.cs.ref0000664000175000017500000001207612225357701023751 0ustar00directhexdirecthex00000000000000/* * This file was automatically generated by create-native-map from TestMap.dll. * * DO NOT MODIFY. */ using System; using System.Runtime.InteropServices; using Mono.Unix.Native; namespace Mono.Unix.Native { public sealed /* static */ partial class NativeConvert { private NativeConvert () {} private const string LIB = "NativeLib"; private static void ThrowArgumentException (object value) { throw new ArgumentOutOfRangeException ("value", value, Locale.GetText ("Current platform doesn't support this value.")); } [DllImport (LIB, EntryPoint="MakeMap_Test_FromFlagsEnum")] private static extern int FromFlagsEnum (FlagsEnum value, out Int32 rval); public static bool TryFromFlagsEnum (FlagsEnum value, out Int32 rval) { return FromFlagsEnum (value, out rval) == 0; } public static Int32 FromFlagsEnum (FlagsEnum value) { Int32 rval; if (FromFlagsEnum (value, out rval) == -1) ThrowArgumentException (value); return rval; } [DllImport (LIB, EntryPoint="MakeMap_Test_ToFlagsEnum")] private static extern int ToFlagsEnum (Int32 value, out FlagsEnum rval); public static bool TryToFlagsEnum (Int32 value, out FlagsEnum rval) { return ToFlagsEnum (value, out rval) == 0; } public static FlagsEnum ToFlagsEnum (Int32 value) { FlagsEnum rval; if (ToFlagsEnum (value, out rval) == -1) ThrowArgumentException (value); return rval; } [DllImport (LIB, EntryPoint="MakeMap_Test_FromFoo")] private static extern int FromFoo (ref Foo source, IntPtr destination); public static bool TryCopy (ref Foo source, IntPtr destination) { return FromFoo (ref source, destination) == 0; } [DllImport (LIB, EntryPoint="MakeMap_Test_ToFoo")] private static extern int ToFoo (IntPtr source, out Foo destination); public static bool TryCopy (IntPtr source, out Foo destination) { return ToFoo (source, out destination) == 0; } [DllImport (LIB, EntryPoint="MakeMap_Test_FromFooHolder")] private static extern int FromFooHolder (ref FooHolder source, IntPtr destination); public static bool TryCopy (ref FooHolder source, IntPtr destination) { return FromFooHolder (ref source, destination) == 0; } [DllImport (LIB, EntryPoint="MakeMap_Test_ToFooHolder")] private static extern int ToFooHolder (IntPtr source, out FooHolder destination); public static bool TryCopy (IntPtr source, out FooHolder destination) { return ToFooHolder (source, out destination) == 0; } [DllImport (LIB, EntryPoint="MakeMap_Test_FromSimpleFlagsEnum")] private static extern int FromSimpleFlagsEnum (SimpleFlagsEnum value, out Int32 rval); public static bool TryFromSimpleFlagsEnum (SimpleFlagsEnum value, out Int32 rval) { return FromSimpleFlagsEnum (value, out rval) == 0; } public static Int32 FromSimpleFlagsEnum (SimpleFlagsEnum value) { Int32 rval; if (FromSimpleFlagsEnum (value, out rval) == -1) ThrowArgumentException (value); return rval; } [DllImport (LIB, EntryPoint="MakeMap_Test_ToSimpleFlagsEnum")] private static extern int ToSimpleFlagsEnum (Int32 value, out SimpleFlagsEnum rval); public static bool TryToSimpleFlagsEnum (Int32 value, out SimpleFlagsEnum rval) { return ToSimpleFlagsEnum (value, out rval) == 0; } public static SimpleFlagsEnum ToSimpleFlagsEnum (Int32 value) { SimpleFlagsEnum rval; if (ToSimpleFlagsEnum (value, out rval) == -1) ThrowArgumentException (value); return rval; } [DllImport (LIB, EntryPoint="MakeMap_Test_FromTestEnum")] private static extern int FromTestEnum (TestEnum value, out Int64 rval); public static bool TryFromTestEnum (TestEnum value, out Int64 rval) { return FromTestEnum (value, out rval) == 0; } public static Int64 FromTestEnum (TestEnum value) { Int64 rval; if (FromTestEnum (value, out rval) == -1) ThrowArgumentException (value); return rval; } [DllImport (LIB, EntryPoint="MakeMap_Test_ToTestEnum")] private static extern int ToTestEnum (Int64 value, out TestEnum rval); public static bool TryToTestEnum (Int64 value, out TestEnum rval) { return ToTestEnum (value, out rval) == 0; } public static TestEnum ToTestEnum (Int64 value) { TestEnum rval; if (ToTestEnum (value, out rval) == -1) ThrowArgumentException (value); return rval; } [DllImport (LIB, EntryPoint="MakeMap_Rename_FromColors")] private static extern int FromColors (Colors value, out Int32 rval); public static bool TryFromColors (Colors value, out Int32 rval) { return FromColors (value, out rval) == 0; } public static Int32 FromColors (Colors value) { Int32 rval; if (FromColors (value, out rval) == -1) ThrowArgumentException (value); return rval; } [DllImport (LIB, EntryPoint="MakeMap_Rename_ToColors")] private static extern int ToColors (Int32 value, out Colors rval); public static bool TryToColors (Int32 value, out Colors rval) { return ToColors (value, out rval) == 0; } public static Colors ToColors (Int32 value) { Colors rval; if (ToColors (value, out rval) == -1) ThrowArgumentException (value); return rval; } } } mono-tools-2.11/create-native-map/src/create-native-map.cs0000664000175000017500000016051412225357701025522 0ustar00directhexdirecthex00000000000000// // create-native-map.cs: Builds a C map of constants defined on C# land // // Authors: // Miguel de Icaza (miguel@novell.com) // Jonathan Pryor (jonpryor@vt.edu) // // (C) 2003 Novell, Inc. // (C) 2004-2005 Jonathan Pryor // // // 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.IO; using System.Globalization; using System.Reflection; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Text; using System.Text.RegularExpressions; using Mono.Unix.Native; delegate void CreateFileHandler (string assembly_name, string file_prefix); delegate void AssemblyAttributesHandler (Assembly assembly); delegate void TypeHandler (Type t, string ns, string fn); delegate void CloseFileHandler (string file_prefix); class MakeMap { public static int Main (string [] args) { FileGenerator[] generators = new FileGenerator[]{ new HeaderFileGenerator (), new SourceFileGenerator (), new ConvertFileGenerator (), new ConvertDocFileGenerator (), }; Configuration config = new Configuration (); bool exit = false; try { exit = !config.Parse (args); } catch (Exception e) { Console.WriteLine ("{0}: error: {1}", Environment.GetCommandLineArgs () [0], e.Message); exit = true; } if (exit) { Configuration.ShowHelp (); return 1; } MapUtils.config = config; MakeMap composite = new MakeMap (); foreach (FileGenerator g in generators) { g.Configuration = config; composite.FileCreators += new CreateFileHandler (g.CreateFile); composite.AssemblyAttributesHandler += new AssemblyAttributesHandler (g.WriteAssemblyAttributes); composite.TypeHandler += new TypeHandler (g.WriteType); composite.FileClosers += new CloseFileHandler (g.CloseFile); } return composite.Run (config); } event CreateFileHandler FileCreators; event AssemblyAttributesHandler AssemblyAttributesHandler; event TypeHandler TypeHandler; event CloseFileHandler FileClosers; int Run (Configuration config) { FileCreators (config.AssemblyFileName, config.OutputPrefix); Assembly assembly = Assembly.LoadFrom (config.AssemblyFileName); AssemblyAttributesHandler (assembly); Type [] exported_types = assembly.GetTypes (); Array.Sort (exported_types, new TypeFullNameComparer ()); foreach (Type t in exported_types) { string ns = MapUtils.GetNamespace (t); /* if (ns == null || !ns.StartsWith ("Mono")) continue; */ string fn = MapUtils.GetManagedType (t); TypeHandler (t, ns, fn); } FileClosers (config.OutputPrefix); return 0; } private class TypeFullNameComparer : IComparer { public int Compare (Type t1, Type t2) { if (t1 == t2) return 0; if (t1 == null) return 1; if (t2 == null) return -1; return CultureInfo.InvariantCulture.CompareInfo.Compare ( t1.FullName, t2.FullName, CompareOptions.Ordinal); } } } class Configuration { Dictionary renameMembers = new Dictionary (); Dictionary renameNamespaces = new Dictionary (); List libraries = new List(); List optionals = new List (); List excludes = new List (); List iheaders = new List (); List pheaders = new List (); List imacros = new List (); List pmacros = new List (); string assembly_name; string output; delegate void ArgumentHandler (Configuration c, string name, string value); static Dictionary handlers; static Configuration () { handlers = new Dictionary (); handlers ["autoconf-header"] = delegate (Configuration c, string name, string value) { c.iheaders.Add ("ah:" + name); }; handlers ["autoconf-member"] = delegate (Configuration c, string name, string value) { c.optionals.Add (name); }; handlers ["impl-header"] = delegate (Configuration c, string name, string value) { c.iheaders.Add (name); }; handlers ["impl-macro"] = delegate (Configuration c, string name, string value) { if (value != null) name += "=" + value; c.imacros.Add (name); }; handlers ["library"] = delegate (Configuration c, string name, string value) { c.libraries.Add (name); }; handlers ["exclude-native-symbol"] = delegate (Configuration c, string name, string value) { c.excludes.Add (name); }; handlers ["public-header"] = delegate (Configuration c, string name, string value) { c.pheaders.Add (name); }; handlers ["public-macro"] = delegate (Configuration c, string name, string value) { if (value != null) name += "=" + value; c.pmacros.Add (name); }; handlers ["rename-member"] = delegate (Configuration c, string name, string value) { if (value == null) { throw new Exception ("missing rename value"); } c.renameMembers [name] = value; }; handlers ["rename-namespace"] = delegate (Configuration c, string name, string value) { if (value == null) { throw new Exception ("missing rename value"); } value = value.Replace (".", "_"); c.renameNamespaces [name] = value; }; } public Configuration () { } public List NativeLibraries { get {return libraries;} } public List AutoconfMembers { get {return optionals;} } public List NativeExcludeSymbols { get {return excludes;} } public List PublicHeaders { get {return pheaders;} } public List PublicMacros { get {return pmacros;} } public List ImplementationHeaders { get {return iheaders;} } public List ImplementationMacros { get {return imacros;} } public IDictionary MemberRenames { get {return renameMembers;} } public IDictionary NamespaceRenames { get {return renameNamespaces;} } public string AssemblyFileName { get {return assembly_name;} } public string OutputPrefix { get {return output;} } const string NameValue = @"(?[^=]+)(=(?.*))?"; const string Argument = @"^--(?[\w-]+)([=:]" + NameValue + ")?$"; public bool Parse (string[] args) { Regex argRE = new Regex (Argument); Regex valRE = new Regex (NameValue); for (int i = 0; i < args.Length; ++i) { Match m = argRE.Match (args [i]); if (m.Success) { string arg = m.Groups ["Argument"].Value; if (arg == "help") return false; if (!m.Groups ["Name"].Success) { if ((i+1) >= args.Length) throw new Exception ( string.Format ("missing value for argument {0}", args [i])); m = valRE.Match (args [++i]); if (!m.Success) { throw new Exception ( string.Format ("invalid value for argument {0}: {1}", args [i-1], args[i])); } } string name = m.Groups ["Name"].Value; string value = m.Groups ["Value"].Success ? m.Groups ["Value"].Value : null; if (handlers.ContainsKey (arg)) { handlers [arg] (this, name, value); } else { throw new Exception ("invalid argument " + arg); } } else if (assembly_name == null) { assembly_name = args [i]; } else { output = args [i]; } } if (assembly_name == null) throw new Exception ("missing ASSEMBLY"); if (output == null) throw new Exception ("missing OUTPUT-PREFIX"); libraries.Sort (); optionals.Sort (); excludes.Sort (); return true; } public static void ShowHelp () { Console.WriteLine ( "Usage: create-native-map \n" + "\t[--autoconf-header=HEADER]* \n" + "\t[--autoconf-member=MEMBER]* \n" + "\t[--exclude-native-symbol=SYMBOL]*\n" + "\t[--impl-header=HEADER]* \n" + "\t[--impl-macro=MACRO]* \n" + "\t[--library=LIBRARY]+ \n" + "\t[--public-header=HEADER]* \n" + "\t[--public-macro=MACRO]* \n" + "\t[--rename-member=FROM=TO]* \n" + "\t[--rename-namespace=FROM=TO]*\n" + "\tASSEMBLY OUTPUT-PREFIX" ); } } static class MapUtils { internal static Configuration config; public static T GetCustomAttribute (MemberInfo element) where T : Attribute { return (T) Attribute.GetCustomAttribute (element, typeof(T), true); } public static T GetCustomAttribute (Assembly assembly) where T : Attribute { return (T) Attribute.GetCustomAttribute (assembly, typeof(T), true); } public static T[] GetCustomAttributes (MemberInfo element) where T : Attribute { return (T[]) Attribute.GetCustomAttributes (element, typeof(T), true); } public static T[] GetCustomAttributes (Assembly assembly) where T : Attribute { return (T[]) Attribute.GetCustomAttributes (assembly, typeof(T), true); } public static MapAttribute GetMapAttribute (ICustomAttributeProvider element) { foreach (object o in element.GetCustomAttributes (true)) { if (!IsMapAttribute (o)) continue; string nativeType = GetPropertyValueAsString (o, "NativeType"); MapAttribute map = nativeType == null ? new MapAttribute () : new MapAttribute (nativeType); map.SuppressFlags = GetPropertyValueAsString (o, "SuppressFlags"); return map; } return null; } private static bool IsMapAttribute (object o) { Type t = o.GetType (); do { if (t.Name == "MapAttribute") { return true; } t = t.BaseType; } while (t != null); return false; } private static string GetPropertyValueAsString (object o, string property) { object v = GetPropertyValue (o, property); string s = v == null ? null : v.ToString (); if (s != null) return s.Length == 0 ? null : s; return null; } private static object GetPropertyValue (object o, string property) { PropertyInfo p = o.GetType().GetProperty (property); if (p == null) return null; if (!p.CanRead) return null; return p.GetValue (o, new object[0]); } public static bool IsIntegralType (Type t) { return t == typeof(byte) || t == typeof(sbyte) || t == typeof(char) || t == typeof(short) || t == typeof(ushort) || t == typeof(int) || t == typeof(uint) || t == typeof(long) || t == typeof(ulong); } public static bool IsBlittableType (Type t) { return IsIntegralType (t) || t == typeof(IntPtr) || t == typeof(UIntPtr); } public static string GetNativeType (Type t) { Type et = GetElementType (t); string ut = et.Name; if (et.IsEnum) ut = Enum.GetUnderlyingType (et).Name; string type = null; switch (ut) { case "Boolean": type = "int"; break; case "Byte": type = "unsigned char"; break; case "SByte": type = "signed char"; break; case "Int16": type = "short"; break; case "UInt16": type = "unsigned short"; break; case "Int32": type = "int"; break; case "UInt32": type = "unsigned int"; break; case "Int64": type = "gint64"; break; case "UInt64": type = "guint64"; break; case "IntPtr": type = "void*"; break; case "UIntPtr": type = "void*"; break; case "String": type = "const char"; break; /* ref type */ case "StringBuilder": type = "char"; break; /* ref type */ case "Void": type = "void"; break; case "HandleRef": type = "void*"; break; } bool isDelegate = IsDelegate (t); if (type == null) type = isDelegate ? t.Name : GetStructName (t); if (!et.IsValueType && !isDelegate) { type += "*"; } while (t.HasElementType) { t = t.GetElementType (); type += "*"; } return type; //return (t.IsByRef || t.IsArray || (!t.IsValueType && !isDelegate)) ? type + "*" : type; } public static bool IsDelegate (Type t) { return typeof(Delegate).IsAssignableFrom (t); } private static string GetStructName (Type t) { t = GetElementType (t); return "struct " + GetManagedType (t); } public static Type GetElementType (Type t) { while (t.HasElementType) { t = t.GetElementType (); } return t; } public static string GetNamespace (Type t) { if (t.Namespace == null) return ""; if (config.NamespaceRenames.ContainsKey (t.Namespace)) return config.NamespaceRenames [t.Namespace]; return t.Namespace.Replace ('.', '_'); } public static string GetManagedType (Type t) { string ns = GetNamespace (t); string tn = (t.DeclaringType != null ? t.DeclaringType.Name + "_" : "") + t.Name; return ns + "_" + tn; } public static string GetNativeType (FieldInfo field) { MapAttribute map = GetMapAttribute (field) ?? GetMapAttribute (field.FieldType); if (map != null) return map.NativeType; return null; } public static string GetFunctionDeclaration (string name, MethodInfo method) { StringBuilder sb = new StringBuilder (); #if false Console.WriteLine (t); foreach (object o in t.GetMembers ()) Console.WriteLine ("\t" + o); #endif sb.Append (method.ReturnType == typeof(string) ? "char*" : MapUtils.GetNativeType (method.ReturnType)); sb.Append (" ").Append (name).Append (" ("); ParameterInfo[] parameters = method.GetParameters(); if (parameters.Length == 0) { sb.Append ("void"); } else { if (parameters.Length > 0) { WriteParameterDeclaration (sb, parameters [0]); } for (int i = 1; i < parameters.Length; ++i) { sb.Append (", "); WriteParameterDeclaration (sb, parameters [i]); } } sb.Append (")"); return sb.ToString (); } private static void WriteParameterDeclaration (StringBuilder sb, ParameterInfo pi) { // DumpTypeInfo (pi.ParameterType); string nt = GetNativeType (pi.ParameterType); sb.AppendFormat ("{0} {1}", nt, pi.Name); } internal class _MemberNameComparer : IComparer, IComparer { public int Compare (FieldInfo m1, FieldInfo m2) { return Compare ((MemberInfo) m1, (MemberInfo) m2); } public int Compare (MemberInfo m1, MemberInfo m2) { if (m1 == m2) return 0; if (m1 == null) return 1; if (m2 == null) return -1; return CultureInfo.InvariantCulture.CompareInfo.Compare ( m1.Name, m2.Name, CompareOptions.Ordinal); } } private class _OrdinalStringComparer : IComparer { public int Compare (string s1, string s2) { if (object.ReferenceEquals (s1, s2)) return 0; if (s1 == null) return 1; if (s2 == null) return -1; return CultureInfo.InvariantCulture.CompareInfo.Compare (s1, s2, CompareOptions.Ordinal | CompareOptions.IgnoreCase); } } internal static _MemberNameComparer MemberNameComparer = new _MemberNameComparer (); internal static IComparer OrdinalStringComparer = new _OrdinalStringComparer (); } abstract class FileGenerator { private Configuration config; public Configuration Configuration { get {return config;} set {config = value;} } public abstract void CreateFile (string assembly_name, string file_prefix); public virtual void WriteAssemblyAttributes (Assembly assembly) { } public abstract void WriteType (Type t, string ns, string fn); public abstract void CloseFile (string file_prefix); protected static void WriteHeader (StreamWriter s, string assembly) { WriteHeader (s, assembly, false); } protected static void WriteHeader (StreamWriter s, string assembly, bool noConfig) { s.WriteLine ( "/*\n" + " * This file was automatically generated by create-native-map from {0}.\n" + " *\n" + " * DO NOT MODIFY.\n" + " */", assembly); if (!noConfig) { s.WriteLine ("#ifdef HAVE_CONFIG_H"); s.WriteLine ("#include "); s.WriteLine ("#endif /* ndef HAVE_CONFIG_H */"); } s.WriteLine (); } protected static bool CanMapType (Type t) { return MapUtils.GetMapAttribute (t) != null; } protected static bool IsFlagsEnum (Type t) { return t.IsEnum && MapUtils.GetCustomAttributes (t).Length > 0; } protected static void SortFieldsInOffsetOrder (Type t, FieldInfo[] fields) { Array.Sort (fields, delegate (FieldInfo f1, FieldInfo f2) { long o1 = (long) Marshal.OffsetOf (f1.DeclaringType, f1.Name); long o2 = (long) Marshal.OffsetOf (f2.DeclaringType, f2.Name); return o1.CompareTo (o2); }); } protected static void WriteMacroDefinition (TextWriter writer, string macro) { if (macro == null || macro.Length == 0) return; string[] val = macro.Split ('='); writer.WriteLine ("#ifndef {0}", val [0]); writer.WriteLine ("#define {0}{1}", val [0], val.Length > 1 ? " " + val [1] : ""); writer.WriteLine ("#endif /* ndef {0} */", val [0]); writer.WriteLine (); } private static Regex includeRegex = new Regex (@"^(?ah:)?(?(""|<)(?.*)(""|>))$"); protected static void WriteIncludeDeclaration (TextWriter writer, string inc) { if (inc == null || inc.Length == 0) return; Match m = includeRegex.Match (inc); if (!m.Groups ["Include"].Success) { Console.WriteLine ("warning: invalid PublicIncludeFile: {0}", inc); return; } if (m.Success && m.Groups ["AutoHeader"].Success) { string i = m.Groups ["IncludeFile"].Value; string def = "HAVE_" + i.ToUpper ().Replace ("/", "_").Replace (".", "_"); writer.WriteLine ("#ifdef {0}", def); writer.WriteLine ("#include {0}", m.Groups ["Include"]); writer.WriteLine ("#endif /* ndef {0} */", def); } else writer.WriteLine ("#include {0}", m.Groups ["Include"]); } protected string GetNativeMemberName (FieldInfo field) { if (!Configuration.MemberRenames.ContainsKey (field.Name)) return field.Name; return Configuration.MemberRenames [field.Name]; } } class HeaderFileGenerator : FileGenerator { StreamWriter sh; string assembly_file; Dictionary methods = new Dictionary (); Dictionary structs = new Dictionary (); Dictionary delegates = new Dictionary (); List decls = new List (); public override void CreateFile (string assembly_name, string file_prefix) { sh = File.CreateText (file_prefix + ".h"); file_prefix = file_prefix.Replace ("../", "").Replace ("/", "_"); this.assembly_file = assembly_name = Path.GetFileName (assembly_name); WriteHeader (sh, assembly_name, true); assembly_name = assembly_name.Replace (".dll", "").Replace (".", "_"); sh.WriteLine ("#ifndef INC_" + assembly_name + "_" + file_prefix + "_H"); sh.WriteLine ("#define INC_" + assembly_name + "_" + file_prefix + "_H\n"); sh.WriteLine ("#include \n"); sh.WriteLine ("G_BEGIN_DECLS\n"); // Kill warning about unused method DumpTypeInfo (null); } public override void WriteAssemblyAttributes (Assembly assembly) { sh.WriteLine ("/*\n * Public Macros\n */"); foreach (string def in Configuration.PublicMacros) { WriteMacroDefinition (sh, def); } sh.WriteLine (); sh.WriteLine ("/*\n * Public Includes\n */"); foreach (string inc in Configuration.PublicHeaders) { WriteIncludeDeclaration (sh, inc); } sh.WriteLine (); sh.WriteLine ("/*\n * Enumerations\n */"); } public override void WriteType (Type t, string ns, string fn) { WriteEnum (t, ns, fn); CacheStructs (t, ns, fn); CacheExternalMethods (t, ns, fn); } private void WriteEnum (Type t, string ns, string fn) { if (!CanMapType (t) || !t.IsEnum) return; string etype = MapUtils.GetNativeType (t); WriteLiteralValues (sh, t, fn); sh.WriteLine ("int {1}_From{2} ({0} x, {0} *r);", etype, ns, t.Name); sh.WriteLine ("int {1}_To{2} ({0} x, {0} *r);", etype, ns, t.Name); Configuration.NativeExcludeSymbols.Add ( string.Format ("{1}_From{2}", etype, ns, t.Name)); Configuration.NativeExcludeSymbols.Add ( string.Format ("{1}_To{2}", etype, ns, t.Name)); Configuration.NativeExcludeSymbols.Sort (); sh.WriteLine (); } static void WriteLiteralValues (StreamWriter sh, Type t, string n) { object inst = Activator.CreateInstance (t); int max_field_length = 0; FieldInfo[] fields = t.GetFields (); Array.Sort (fields, delegate (FieldInfo f1, FieldInfo f2) { max_field_length = Math.Max (max_field_length, f1.Name.Length); max_field_length = Math.Max (max_field_length, f2.Name.Length); return MapUtils.MemberNameComparer.Compare (f1, f2); }); max_field_length += 1 + n.Length; sh.WriteLine ("enum {0} {{", n); foreach (FieldInfo fi in fields) { if (!fi.IsLiteral) continue; string e = n + "_" + fi.Name; sh.WriteLine ("\t{0,-" + max_field_length + "} = 0x{1:x},", e, fi.GetValue (inst)); sh.WriteLine ("\t#define {0,-" + max_field_length + "} {0}", e); } sh.WriteLine ("};"); } private void CacheStructs (Type t, string ns, string fn) { if (t.IsEnum) return; MapAttribute map = MapUtils.GetMapAttribute (t); if (map != null) { if (map.NativeType != null && map.NativeType.Length > 0) decls.Add (map.NativeType); RecordTypes (t); } } private void CacheExternalMethods (Type t, string ns, string fn) { BindingFlags bf = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; foreach (MethodInfo m in t.GetMethods (bf)) { if ((m.Attributes & MethodAttributes.PinvokeImpl) == 0) continue; DllImportAttribute dia = GetDllImportInfo (m); if (dia == null) { Console.WriteLine ("warning: unable to emit native prototype for P/Invoke " + "method: {0}", m); continue; } // we shouldn't declare prototypes for POSIX, etc. functions. if (Configuration.NativeLibraries.BinarySearch (dia.Value) < 0 || IsOnExcludeList (dia.EntryPoint)) continue; methods [dia.EntryPoint] = m; RecordTypes (m); } } private static DllImportAttribute GetDllImportInfo (MethodInfo method) { // .NET 2.0 synthesizes pseudo-attributes such as DllImport DllImportAttribute dia = MapUtils.GetCustomAttribute (method); if (dia != null) return dia; // We're not on .NET 2.0; assume we're on Mono and use some internal // methods... Type MonoMethod = Type.GetType ("System.Reflection.MonoMethod", false); if (MonoMethod == null) { Console.WriteLine ("warning: cannot find MonoMethod"); return null; } MethodInfo GetDllImportAttribute = MonoMethod.GetMethod ("GetDllImportAttribute", BindingFlags.Static | BindingFlags.NonPublic); if (GetDllImportAttribute == null) { Console.WriteLine ("warning: cannot find GetDllImportAttribute"); return null; } IntPtr mhandle = method.MethodHandle.Value; return (DllImportAttribute) GetDllImportAttribute.Invoke (null, new object[]{mhandle}); } private bool IsOnExcludeList (string method) { int idx = Configuration.NativeExcludeSymbols.BinarySearch (method); return (idx < 0) ? false : true; } private void RecordTypes (MethodInfo method) { ParameterInfo[] parameters = method.GetParameters (); foreach (ParameterInfo pi in parameters) { RecordTypes (pi.ParameterType); } } private void RecordTypes (Type st) { if (typeof(Delegate).IsAssignableFrom (st) && !delegates.ContainsKey (st.Name)) { MethodInfo mi = st.GetMethod ("Invoke"); delegates [st.Name] = mi; RecordTypes (mi); return; } Type et = MapUtils.GetElementType (st); string s = MapUtils.GetNativeType (et); if (s.StartsWith ("struct ") && !structs.ContainsKey (et.FullName)) { structs [et.FullName] = et; foreach (FieldInfo fi in et.GetFields (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { RecordTypes (fi.FieldType); } } } public override void CloseFile (string file_prefix) { IEnumerable structures = Sort (structs.Keys); sh.WriteLine (); sh.WriteLine ("/*\n * Managed Structure Declarations\n */\n"); foreach (string s in structures) { sh.WriteLine ("struct {0};", MapUtils.GetManagedType (structs [s])); } sh.WriteLine (); sh.WriteLine ("/*\n * Inferred Structure Declarations\n */\n"); foreach (string s in decls) { sh.WriteLine ("{0};", s); } sh.WriteLine (); sh.WriteLine ("/*\n * Delegate Declarations\n */\n"); foreach (string s in Sort (delegates.Keys)) { sh.WriteLine ("typedef {0};", MapUtils.GetFunctionDeclaration ("(*" + s + ")", delegates [s])); } sh.WriteLine (); sh.WriteLine ("/*\n * Structures\n */\n"); foreach (string s in structures) { WriteStructDeclarations (s); } sh.WriteLine (); sh.WriteLine ("/*\n * Functions\n */"); foreach (string method in Configuration.NativeExcludeSymbols) { if (methods.ContainsKey (method)) methods.Remove (method); } foreach (string method in Sort (methods.Keys)) { WriteMethodDeclaration ((MethodInfo) methods [method], method); } sh.WriteLine ("\nG_END_DECLS\n"); sh.WriteLine ("#endif /* ndef INC_Mono_Posix_" + file_prefix + "_H */\n"); sh.Close (); } private static IEnumerable Sort (ICollection c) { List al = new List (c); al.Sort (MapUtils.OrdinalStringComparer); return al; } private void WriteStructDeclarations (string s) { Type t = structs [s]; #if false if (!t.Assembly.CodeBase.EndsWith (this.assembly_file)) { return; } #endif sh.WriteLine ("struct {0} {{", MapUtils.GetManagedType (t)); FieldInfo[] fields = t.GetFields (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); int max_type_len = 0, max_name_len = 0, max_native_len = 0; Array.ForEach (fields, delegate (FieldInfo f) { max_type_len = Math.Max (max_type_len, HeaderFileGenerator.GetType (f.FieldType).Length); max_name_len = Math.Max (max_name_len, GetNativeMemberName (f).Length); string native_type = MapUtils.GetNativeType (f); if (native_type != null) max_native_len = Math.Max (max_native_len, native_type.Length); }); SortFieldsInOffsetOrder (t, fields); foreach (FieldInfo field in fields) { string fname = GetNativeMemberName (field); sh.Write ("\t{0,-" + max_type_len + "} {1};", GetType (field.FieldType), fname); string native_type = MapUtils.GetNativeType (field); if (native_type != null) { sh.Write (new string (' ', max_name_len - fname.Length)); sh.Write (" /* {0,-" + max_native_len + "} */", native_type); } sh.WriteLine (); } sh.WriteLine ("};"); MapAttribute map = MapUtils.GetMapAttribute (t); if (map != null && map.NativeType != null && map.NativeType.Length != 0 && t.Assembly.CodeBase.EndsWith (this.assembly_file)) { sh.WriteLine (); sh.WriteLine ( "int\n{0}_From{1} ({3}{4} from, {2} *to);\n" + "int\n{0}_To{1} ({2} *from, {3}{4} to);\n", MapUtils.GetNamespace (t), t.Name, map.NativeType, MapUtils.GetNativeType (t), t.IsValueType ? "*" : ""); Configuration.NativeExcludeSymbols.Add ( string.Format ("{0}_From{1}", MapUtils.GetNamespace (t), t.Name)); Configuration.NativeExcludeSymbols.Add ( string.Format ("{0}_To{1}", MapUtils.GetNamespace (t), t.Name)); Configuration.NativeExcludeSymbols.Sort (); } sh.WriteLine (); } private static string GetType (Type t) { if (typeof(Delegate).IsAssignableFrom (t)) return t.Name; return MapUtils.GetNativeType (t); } private void WriteMethodDeclaration (MethodInfo method, string entryPoint) { if (method.ReturnType.IsClass) { Console.WriteLine ("warning: {0} has a return type of {1}, which is a reference type", entryPoint, method.ReturnType.FullName); } sh.Write (MapUtils.GetFunctionDeclaration (entryPoint, method)); sh.WriteLine (";"); } private void DumpTypeInfo (Type t) { if (t == null) return; sh.WriteLine ("\t\t/* Type Info for " + t.FullName + ":"); foreach (MemberInfo mi in typeof(Type).GetMembers()) { sh.WriteLine ("\t\t\t{0}={1}", mi.Name, GetMemberValue (mi, t)); } sh.WriteLine ("\t\t */"); } private static string GetMemberValue (MemberInfo mi, Type t) { try { switch (mi.MemberType) { case MemberTypes.Constructor: case MemberTypes.Method: { MethodBase b = (MethodBase) mi; if (b.GetParameters().Length == 0) return b.Invoke (t, new object[]{}).ToString(); return "<>"; } case MemberTypes.Field: return ((FieldInfo) mi).GetValue (t).ToString (); case MemberTypes.Property: { PropertyInfo pi = (PropertyInfo) mi; if (!pi.CanRead) return "<>"; return pi.GetValue (t, null).ToString (); } default: return "<>"; } } catch (Exception e) { return "<>"; } } } class SourceFileGenerator : FileGenerator { StreamWriter sc; string file_prefix; public override void CreateFile (string assembly_name, string file_prefix) { sc = File.CreateText (file_prefix + ".c"); WriteHeader (sc, assembly_name); if (file_prefix.IndexOf ("/") != -1) file_prefix = file_prefix.Substring (file_prefix.IndexOf ("/") + 1); this.file_prefix = file_prefix; sc.WriteLine ("#include "); sc.WriteLine ("#include "); sc.WriteLine (); } public override void WriteAssemblyAttributes (Assembly assembly) { sc.WriteLine ("/*\n * Implementation Macros\n */"); foreach (string def in Configuration.ImplementationMacros) { WriteMacroDefinition (sc, def); } sc.WriteLine (); sc.WriteLine ("/*\n * Implementation Includes\n */"); foreach (string inc in Configuration.ImplementationHeaders) { WriteIncludeDeclaration (sc, inc); } sc.WriteLine (); sc.WriteLine ("#include \"{0}.h\"", file_prefix); sc.WriteLine (@" #include /* errno, EOVERFLOW */ #include /* g* types, g_assert_not_reached() */"); WriteFallbackMacro ("CNM_MININT8", "G_MININT8", sbyte.MinValue.ToString ()); WriteFallbackMacro ("CNM_MAXINT8", "G_MAXINT8", sbyte.MaxValue.ToString ()); WriteFallbackMacro ("CNM_MAXUINT8", "G_MAXUINT8", byte.MaxValue.ToString ()); WriteFallbackMacro ("CNM_MININT16", "G_MININT16", short.MinValue.ToString ()); WriteFallbackMacro ("CNM_MAXINT16", "G_MAXINT16", short.MaxValue.ToString ()); WriteFallbackMacro ("CNM_MAXUINT16", "G_MAXUINT16", ushort.MaxValue.ToString ()); WriteFallbackMacro ("CNM_MININT32", "G_MININT32", int.MinValue.ToString ()); WriteFallbackMacro ("CNM_MAXINT32", "G_MAXINT32", int.MaxValue.ToString ()); WriteFallbackMacro ("CNM_MAXUINT32", "G_MAXUINT32", uint.MaxValue.ToString () + "U"); WriteFallbackMacro ("CNM_MININT64", "G_MININT64", long.MinValue.ToString () + "LL"); WriteFallbackMacro ("CNM_MAXINT64", "G_MAXINT64", long.MaxValue.ToString () + "LL"); WriteFallbackMacro ("CNM_MAXUINT64", "G_MAXUINT64", ulong.MaxValue.ToString () + "ULL"); sc.WriteLine (@" /* returns TRUE if @type is an unsigned type */ #define _cnm_integral_type_is_unsigned(type) \ (sizeof(type) == sizeof(gint8) \ ? (((type)-1) > CNM_MAXINT8) \ : sizeof(type) == sizeof(gint16) \ ? (((type)-1) > CNM_MAXINT16) \ : sizeof(type) == sizeof(gint32) \ ? (((type)-1) > CNM_MAXINT32) \ : sizeof(type) == sizeof(gint64) \ ? (((type)-1) > CNM_MAXINT64) \ : (g_assert_not_reached (), 0)) /* returns the minimum value of @type as a gint64 */ #define _cnm_integral_type_min(type) \ (_cnm_integral_type_is_unsigned (type) \ ? 0 \ : sizeof(type) == sizeof(gint8) \ ? CNM_MININT8 \ : sizeof(type) == sizeof(gint16) \ ? CNM_MININT16 \ : sizeof(type) == sizeof(gint32) \ ? CNM_MININT32 \ : sizeof(type) == sizeof(gint64) \ ? CNM_MININT64 \ : (g_assert_not_reached (), 0)) /* returns the maximum value of @type as a guint64 */ #define _cnm_integral_type_max(type) \ (_cnm_integral_type_is_unsigned (type) \ ? sizeof(type) == sizeof(gint8) \ ? CNM_MAXUINT8 \ : sizeof(type) == sizeof(gint16) \ ? CNM_MAXUINT16 \ : sizeof(type) == sizeof(gint32) \ ? CNM_MAXUINT32 \ : sizeof(type) == sizeof(gint64) \ ? CNM_MAXUINT64 \ : (g_assert_not_reached (), 0) \ : sizeof(type) == sizeof(gint8) \ ? CNM_MAXINT8 \ : sizeof(type) == sizeof(gint16) \ ? CNM_MAXINT16 \ : sizeof(type) == sizeof(gint32) \ ? CNM_MAXINT32 \ : sizeof(type) == sizeof(gint64) \ ? CNM_MAXINT64 \ : (g_assert_not_reached (), 0)) #ifdef _CNM_DUMP #define _cnm_dump(to_t,from) \ printf (""# %s -> %s: uns=%i; min=%llx; max=%llx; value=%llx; lt=%i; l0=%i; gt=%i; e=%i\n"", \ #from, #to_t, \ (int) _cnm_integral_type_is_unsigned (to_t), \ (gint64) (_cnm_integral_type_min (to_t)), \ (gint64) (_cnm_integral_type_max (to_t)), \ (gint64) (from), \ (((gint64) _cnm_integral_type_min (to_t)) <= (gint64) from), \ (from < 0), \ (((guint64) from) <= (guint64) _cnm_integral_type_max (to_t)), \ !((int) _cnm_integral_type_is_unsigned (to_t) \ ? ((0 <= from) && \ ((guint64) from <= (guint64) _cnm_integral_type_max (to_t))) \ : ((gint64) _cnm_integral_type_min(to_t) <= (gint64) from && \ (guint64) from <= (guint64) _cnm_integral_type_max (to_t))) \ ) #else /* ndef _CNM_DUMP */ #define _cnm_dump(to_t, from) do {} while (0) #endif /* def _CNM_DUMP */ #ifdef DEBUG #define _cnm_return_val_if_overflow(to_t,from,val) G_STMT_START { \ int uns = _cnm_integral_type_is_unsigned (to_t); \ gint64 min = (gint64) _cnm_integral_type_min (to_t); \ guint64 max = (guint64) _cnm_integral_type_max (to_t); \ gint64 sf = (gint64) from; \ guint64 uf = (guint64) from; \ if (!(uns ? ((0 <= from) && (uf <= max)) \ : (min <= sf && (from < 0 || uf <= max)))) { \ _cnm_dump(to_t, from); \ errno = EOVERFLOW; \ return (val); \ } \ } G_STMT_END #else /* !def DEBUG */ /* don't do any overflow checking */ #define _cnm_return_val_if_overflow(to_t,from,val) G_STMT_START { \ } G_STMT_END #endif /* def DEBUG */ "); } private void WriteFallbackMacro (string target, string glib, string def) { sc.WriteLine (@" #if defined ({1}) #define {0} {1} #else #define {0} ({2}) #endif", target, glib, def); } public override void WriteType (Type t, string ns, string fn) { if (!CanMapType (t)) return; string etype = MapUtils.GetNativeType (t); if (t.IsEnum) { bool bits = IsFlagsEnum (t); WriteFromManagedEnum (t, ns, fn, etype, bits); WriteToManagedEnum (t, ns, fn, etype, bits); } else { WriteFromManagedClass (t, ns, fn, etype); WriteToManagedClass (t, ns, fn, etype); } } private void WriteFromManagedEnum (Type t, string ns, string fn, string etype, bool bits) { sc.WriteLine ("int {1}_From{2} ({0} x, {0} *r)", etype, ns, t.Name); sc.WriteLine ("{"); sc.WriteLine ("\t*r = 0;"); FieldInfo[] fields = t.GetFields (); Array.Sort (fields, MapUtils.MemberNameComparer); Array values = Enum.GetValues (t); foreach (FieldInfo fi in fields) { if (!fi.IsLiteral) continue; if (MapUtils.GetCustomAttribute (fi) != null) { sc.WriteLine ("\t/* {0}_{1} is obsolete or optional; ignoring */", fn, fi.Name); continue; } MapAttribute map = MapUtils.GetMapAttribute (fi); bool is_bits = bits && (map != null ? map.SuppressFlags == null : true); if (is_bits) // properly handle case where [Flags] enumeration has helper // synonyms. e.g. DEFFILEMODE and ACCESSPERMS for mode_t. sc.WriteLine ("\tif ((x & {0}_{1}) == {0}_{1})", fn, fi.Name); else if (GetSuppressFlags (map) == null) sc.WriteLine ("\tif (x == {0}_{1})", fn, fi.Name); else sc.WriteLine ("\tif ((x & {0}_{1}) == {0}_{2})", fn, map.SuppressFlags, fi.Name); sc.WriteLine ("#ifdef {0}", fi.Name); if (is_bits || GetSuppressFlags (map) != null) sc.WriteLine ("\t\t*r |= {1};", fn, fi.Name); else sc.WriteLine ("\t\t{{*r = {1}; return 0;}}", fn, fi.Name); sc.WriteLine ("#else /* def {0} */", fi.Name); if (is_bits && IsRedundant (t, fi, values)) { sc.WriteLine ("\t\t{{/* Ignoring {0}_{1}, as it is constructed from other values */}}", fn, fi.Name); } else { sc.WriteLine ("\t\t{errno = EINVAL; return -1;}"); } sc.WriteLine ("#endif /* ndef {0} */", fi.Name); } // For many values, 0 is a valid value, but doesn't have it's own symbol. // Examples: Error (0 means "no error"), WaitOptions (0 means "no options"). // Make 0 valid for all conversions. sc.WriteLine ("\tif (x == 0)\n\t\treturn 0;"); if (bits) sc.WriteLine ("\treturn 0;"); else sc.WriteLine ("\terrno = EINVAL; return -1;"); // return error if not matched sc.WriteLine ("}\n"); } private static string GetSuppressFlags (MapAttribute map) { if (map != null) { return map.SuppressFlags == null ? null : map.SuppressFlags.Length == 0 ? null : map.SuppressFlags; } return null; } private static bool IsRedundant (Type t, FieldInfo fi, Array values) { long v = Convert.ToInt64 (fi.GetValue (null)); long d = v; if (v == 0) return false; foreach (object o in values) { long e = Convert.ToInt64 (o); if (((d & e) != 0) && (e < d)) { v &= ~e; } } if (v == 0) { return true; } return false; } private void WriteToManagedEnum (Type t, string ns, string fn, string etype, bool bits) { sc.WriteLine ("int {1}_To{2} ({0} x, {0} *r)", etype, ns, t.Name); sc.WriteLine ("{"); sc.WriteLine ("\t*r = 0;", etype); // For many values, 0 is a valid value, but doesn't have it's own symbol. // Examples: Error (0 means "no error"), WaitOptions (0 means "no options"). // Make 0 valid for all conversions. sc.WriteLine ("\tif (x == 0)\n\t\treturn 0;"); FieldInfo[] fields = t.GetFields (); Array.Sort (fields, MapUtils.MemberNameComparer); foreach (FieldInfo fi in fields) { if (!fi.IsLiteral) continue; MapAttribute map = MapUtils.GetMapAttribute (fi); bool is_bits = bits && (map != null ? map.SuppressFlags == null: true); sc.WriteLine ("#ifdef {0}", fi.Name); if (is_bits) // properly handle case where [Flags] enumeration has helper // synonyms. e.g. DEFFILEMODE and ACCESSPERMS for mode_t. sc.WriteLine ("\tif ((x & {1}) == {1})\n\t\t*r |= {0}_{1};", fn, fi.Name); else if (GetSuppressFlags (map) == null) sc.WriteLine ("\tif (x == {1})\n\t\t{{*r = {0}_{1}; return 0;}}", fn, fi.Name); else sc.WriteLine ("\tif ((x & {2}) == {1})\n\t\t*r |= {0}_{1};", fn, fi.Name, map.SuppressFlags); sc.WriteLine ("#endif /* ndef {0} */", fi.Name); } if (bits) sc.WriteLine ("\treturn 0;"); else sc.WriteLine ("\terrno = EINVAL; return -1;"); sc.WriteLine ("}\n"); } private void WriteFromManagedClass (Type t, string ns, string fn, string etype) { MapAttribute map = MapUtils.GetMapAttribute (t); if (map == null || map.NativeType == null || map.NativeType.Length == 0) return; string nativeMacro = GetAutoconfDefine (map.NativeType); sc.WriteLine ("#ifdef {0}", nativeMacro); sc.WriteLine ("int\n{0}_From{1} (struct {0}_{1} *from, {2} *to)", MapUtils.GetNamespace (t), t.Name, map.NativeType); WriteManagedClassConversion (t, delegate (FieldInfo field) { MapAttribute ft = MapUtils.GetMapAttribute (field); if (ft != null) return ft.NativeType; return MapUtils.GetNativeType (field.FieldType); }, delegate (FieldInfo field) { return GetNativeMemberName (field); }, delegate (FieldInfo field) { return field.Name; }, delegate (FieldInfo field) { return string.Format ("{0}_From{1}", MapUtils.GetNamespace (field.FieldType), field.FieldType.Name); } ); sc.WriteLine ("#endif /* ndef {0} */\n\n", nativeMacro); } private static string GetAutoconfDefine (string nativeType) { return string.Format ("HAVE_{0}", nativeType.ToUpperInvariant ().Replace (" ", "_")); } private delegate string GetFromType (FieldInfo field); private delegate string GetToFieldName (FieldInfo field); private delegate string GetFromFieldName (FieldInfo field); private delegate string GetFieldCopyMethod (FieldInfo field); private void WriteManagedClassConversion (Type t, GetFromType gft, GetFromFieldName gffn, GetToFieldName gtfn, GetFieldCopyMethod gfc) { MapAttribute map = MapUtils.GetMapAttribute (t); sc.WriteLine ("{"); FieldInfo[] fields = GetFieldsToCopy (t); SortFieldsInOffsetOrder (t, fields); int max_len = 0; foreach (FieldInfo f in fields) { max_len = Math.Max (max_len, f.Name.Length); if (!MapUtils.IsIntegralType (f.FieldType)) continue; string d = GetAutoconfDefine (map, f); if (d != null) sc.WriteLine ("#ifdef " + d); sc.WriteLine ("\t_cnm_return_val_if_overflow ({0}, from->{1}, -1);", gft (f), gffn (f)); if (d != null) sc.WriteLine ("#endif /* ndef " + d + " */"); } sc.WriteLine ("\n\tmemset (to, 0, sizeof(*to));\n"); foreach (FieldInfo f in fields) { string d = GetAutoconfDefine (map, f); if (d != null) sc.WriteLine ("#ifdef " + d); if (MapUtils.IsBlittableType (f.FieldType)) { sc.WriteLine ("\tto->{0,-" + max_len + "} = from->{1};", gtfn (f), gffn (f)); } else if (f.FieldType.IsEnum) { sc.WriteLine ("\tif ({0} (from->{1}, &to->{2}) != 0) {{", gfc (f), gffn (f), gtfn (f)); sc.WriteLine ("\t\treturn -1;"); sc.WriteLine ("\t}"); } else if (f.FieldType.IsValueType) { sc.WriteLine ("\tif ({0} (&from->{1}, &to->{2}) != 0) {{", gfc (f), gffn (f), gtfn (f)); sc.WriteLine ("\t\treturn -1;"); sc.WriteLine ("\t}"); } if (d != null) sc.WriteLine ("#endif /* ndef " + d + " */"); } sc.WriteLine (); sc.WriteLine ("\treturn 0;"); sc.WriteLine ("}"); } private void WriteToManagedClass (Type t, string ns, string fn, string etype) { MapAttribute map = MapUtils.GetMapAttribute (t); if (map == null || map.NativeType == null || map.NativeType.Length == 0) return; string nativeMacro = GetAutoconfDefine (map.NativeType); sc.WriteLine ("#ifdef {0}", nativeMacro); sc.WriteLine ("int\n{0}_To{1} ({2} *from, struct {0}_{1} *to)", MapUtils.GetNamespace (t), t.Name, map.NativeType); WriteManagedClassConversion (t, delegate (FieldInfo field) { return MapUtils.GetNativeType (field.FieldType); }, delegate (FieldInfo field) { return field.Name; }, delegate (FieldInfo field) { return GetNativeMemberName (field); }, delegate (FieldInfo field) { return string.Format ("{0}_To{1}", MapUtils.GetNamespace (field.FieldType), field.FieldType.Name); } ); sc.WriteLine ("#endif /* ndef {0} */\n\n", nativeMacro); } private static FieldInfo[] GetFieldsToCopy (Type t) { FieldInfo[] fields = t.GetFields (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); int count = 0; for (int i = 0; i < fields.Length; ++i) if (MapUtils.GetCustomAttribute (fields [i]) == null) ++count; FieldInfo[] rf = new FieldInfo [count]; for (int i = 0, j = 0; i < fields.Length; ++i) { if (MapUtils.GetCustomAttribute (fields [i]) == null) rf [j++] = fields [i]; } return rf; } private string GetAutoconfDefine (MapAttribute typeMap, FieldInfo field) { if (Configuration.AutoconfMembers.BinarySearch (field.Name) < 0 && Configuration.AutoconfMembers.BinarySearch (field.DeclaringType.Name + "." + field.Name) < 0) return null; return string.Format ("HAVE_{0}_{1}", typeMap.NativeType.ToUpperInvariant().Replace (" ", "_"), field.Name.ToUpperInvariant ()); } public override void CloseFile (string file_prefix) { sc.Close (); } } class ConvertFileGenerator : FileGenerator { StreamWriter scs; public override void CreateFile (string assembly_name, string file_prefix) { scs = File.CreateText (file_prefix + ".cs"); WriteHeader (scs, assembly_name, true); scs.WriteLine ("using System;"); scs.WriteLine ("using System.Runtime.InteropServices;"); scs.WriteLine ("using Mono.Unix.Native;\n"); scs.WriteLine ("namespace Mono.Unix.Native {\n"); scs.WriteLine ("\tpublic sealed /* static */ partial class NativeConvert"); scs.WriteLine ("\t{"); scs.WriteLine ("\t\tprivate NativeConvert () {}\n"); scs.WriteLine ("\t\tprivate const string LIB = \"{0}\";\n", Configuration.NativeLibraries[0]); scs.WriteLine ("\t\tprivate static void ThrowArgumentException (object value)"); scs.WriteLine ("\t\t{"); scs.WriteLine ("\t\t\tthrow new ArgumentOutOfRangeException (\"value\", value,"); scs.WriteLine ("\t\t\t\tLocale.GetText (\"Current platform doesn't support this value.\"));"); scs.WriteLine ("\t\t}\n"); } public override void WriteType (Type t, string ns, string fn) { if (!CanMapType (t)) return; if (t.IsEnum) WriteEnum (t, ns, fn); else WriteStruct (t, ns, fn); } private void WriteEnum (Type t, string ns, string fn) { string mtype = Enum.GetUnderlyingType(t).Name; ObsoleteAttribute oa = MapUtils.GetCustomAttribute (t); string obsolete = ""; if (oa != null) { obsolete = string.Format ("[Obsolete (\"{0}\", {1})]\n\t\t", oa.Message, oa.IsError ? "true" : "false"); } scs.WriteLine ( "\t\t{0}[DllImport (LIB, EntryPoint=\"{1}_From{2}\")]\n" + "\t\tprivate static extern int From{2} ({2} value, out {3} rval);\n" + "\n" + "\t\t{0}public static bool TryFrom{2} ({2} value, out {3} rval)\n" + "\t\t{{\n" + "\t\t\treturn From{2} (value, out rval) == 0;\n" + "\t\t}}\n" + "\n" + "\t\t{0}public static {3} From{2} ({2} value)\n" + "\t\t{{\n" + "\t\t\t{3} rval;\n" + "\t\t\tif (From{2} (value, out rval) == -1)\n" + "\t\t\t\tThrowArgumentException (value);\n" + "\t\t\treturn rval;\n" + "\t\t}}\n" + "\n" + "\t\t{0}[DllImport (LIB, EntryPoint=\"{1}_To{2}\")]\n" + "\t\tprivate static extern int To{2} ({3} value, out {2} rval);\n" + "\n" + "\t\t{0}public static bool TryTo{2} ({3} value, out {2} rval)\n" + "\t\t{{\n" + "\t\t\treturn To{2} (value, out rval) == 0;\n" + "\t\t}}\n" + "\n" + "\t\t{0}public static {2} To{2} ({3} value)\n" + "\t\t{{\n" + "\t\t\t{2} rval;\n" + "\t\t\tif (To{2} (value, out rval) == -1)\n" + "\t\t\t\tThrowArgumentException (value);\n" + "\t\t\treturn rval;\n" + "\t\t}}\n", obsolete, ns, t.Name, mtype ); } private void WriteStruct (Type t, string ns, string fn) { if (MapUtils.IsDelegate (t)) return; MapAttribute map = MapUtils.GetMapAttribute (t); if (map == null || map.NativeType == null || map.NativeType.Length == 0) return; ObsoleteAttribute oa = MapUtils.GetCustomAttribute (t); string obsolete = ""; if (oa != null) { obsolete = string.Format ("[Obsolete (\"{0}\", {1})]\n\t\t", oa.Message, oa.IsError ? "true" : "false"); } string _ref = t.IsValueType ? "ref " : ""; string _out = t.IsValueType ? "out " : ""; scs.WriteLine ( "\t\t{0}[DllImport (LIB, EntryPoint=\"{1}_From{2}\")]\n" + "\t\tprivate static extern int From{2} ({3}{2} source, IntPtr destination);\n" + "\n" + "\t\t{0}public static bool TryCopy ({3}{2} source, IntPtr destination)\n" + "\t\t{{\n" + "\t\t\treturn From{2} ({3}source, destination) == 0;\n" + "\t\t}}\n" + "\n" + "\t\t{0}[DllImport (LIB, EntryPoint=\"{1}_To{2}\")]\n" + "\t\tprivate static extern int To{2} (IntPtr source, {4}{2} destination);\n" + "\n" + "\t\t{0}public static bool TryCopy (IntPtr source, {4}{2} destination)\n" + "\t\t{{\n" + "\t\t\treturn To{2} (source, {4}destination) == 0;\n" + "\t\t}}\n", obsolete, ns, t.Name, _ref, _out ); } public override void CloseFile (string file_prefix) { scs.WriteLine ("\t}"); scs.WriteLine ("}\n"); scs.Close (); } } class ConvertDocFileGenerator : FileGenerator { StreamWriter scs; public override void CreateFile (string assembly_name, string file_prefix) { scs = File.CreateText (file_prefix + ".xml"); scs.WriteLine (" "); } public override void WriteType (Type t, string ns, string fn) { if (!CanMapType (t) || !t.IsEnum) return; bool bits = IsFlagsEnum (t); string type = GetCSharpType (t); string mtype = Enum.GetUnderlyingType(t).FullName; string member = t.Name; string ftype = t.FullName; string to_returns = ""; string to_remarks = ""; string to_exception = ""; if (bits) { to_returns = "An approximation of the equivalent managed value."; to_remarks = @"The current conversion functions are unable to determine if a value in a [Flags]-marked enumeration does not exist on the current platform. As such, if contains a flag value which the current platform doesn't support, it will not be present in the managed value returned. This should only be a problem if was not previously returned by .\n"; } else { to_returns = "The equivalent managed value."; to_exception = @" has no equivalent managed value. "; } scs.WriteLine (@" Method System.Boolean The managed value to convert. The OS-specific equivalent value. Converts a enumeration value to an OS-specific value. if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the OS-specific equivalent value of into . Otherwise, will contain 0. Method {3} The managed value to convert. Converts a to an OS-specific value. The equivalent OS-specific value. has no equivalent OS-specific value. Method System.Boolean The OS-specific value to convert. The managed equivalent value Converts an OS-specific value to a . if the conversion was successful; otherwise, . This is an exception-safe alternative to . If successful, this method stores the managed equivalent value of into . Otherwise, will contain a 0 cast to a . " + to_remarks + @" Method {0} The OS-specific value to convert. Converts an OS-specific value to a . " + to_returns + "\n" + to_exception + @" " + to_remarks + @" ", ftype, member, type, mtype ); } private string GetCSharpType (Type t) { string ut = t.Name; if (t.IsEnum) ut = Enum.GetUnderlyingType (t).Name; Type et = t.GetElementType (); if (et != null && et.IsEnum) ut = Enum.GetUnderlyingType (et).Name; string type = null; switch (ut) { case "Boolean": type = "bool"; break; case "Byte": type = "byte"; break; case "SByte": type = "sbyte"; break; case "Int16": type = "short"; break; case "UInt16": type = "ushort"; break; case "Int32": type = "int"; break; case "UInt32": type = "uint"; break; case "Int64": type = "long"; break; case "UInt64": type = "ulong"; break; } return type; } public override void CloseFile (string file_prefix) { scs.WriteLine (" "); scs.Close (); } } // vim: noexpandtab mono-tools-2.11/create-native-map/src/TestMap.cs0000664000175000017500000000545412225357701023576 0ustar00directhexdirecthex00000000000000// Test file for make-map.cs using System; using System.Runtime.InteropServices; using System.Text; // Make sure that a null namespace doesn't kill make-map class GlobalClass {} namespace MakeMap.Test { struct ForDelegate {int i;} [Map] delegate string MyDelegate ( bool b1, byte b2, sbyte b3, short s1, ushort us1, int i1, uint ui1, long l1, ulong ul1, IntPtr p1, UIntPtr p2, string s2, StringBuilder sb1, HandleRef h, ForDelegate fd); [Map] enum TestEnum : long { Foo, Bar, Baz, Qux, } [Map, Flags] enum SimpleFlagsEnum { None = 0, A = 1, B = 2, C = 4, D = 8, } [Map, Flags] enum FlagsEnum { None = 0, A = 1, B = 2, C = 4, D = 8, All = A | B | C | D, // Device types S_IFMT = 0xF000, // Bits which determine file type [Map(SuppressFlags="S_IFMT")] S_IFDIR = 0x4000, // Directory [Map(SuppressFlags="S_IFMT")] S_IFCHR = 0x2000, // Character device [Map(SuppressFlags="S_IFMT")] S_IFBLK = 0x6000, // Block device [Map(SuppressFlags="S_IFMT")] S_IFREG = 0x8000, // Regular file [Map(SuppressFlags="S_IFMT")] S_IFIFO = 0x1000, // FIFO [Map(SuppressFlags="S_IFMT")] S_IFLNK = 0xA000, // Symbolic link [Map(SuppressFlags="S_IFMT")] S_IFSOCK = 0xC000, // Socket } [Map ("struct foo")] struct Foo { public int foo; public IntPtr p; // this should be within a #ifdef HAVE_AUTOCONF_ME block, due to // --autoconf-member. public long autoconf_me; } [Map ("struct foo_holder")] struct FooHolder { public Foo foo; public TestEnum mode; } delegate void DelFoo (int i, Foo f); delegate void DelRefFoo (int i, ref Foo f); delegate void DelArrayFoo (int i, Foo[] f); delegate void DelRefArrayFoo (int i, ref Foo[] f); delegate void DelBaz (int i, Baz b); delegate void DelRefBaz (int i, ref Baz b); delegate void DelArrayBaz (int i, Baz[] b); delegate void DelRefArrayBaz (int i, ref Baz[] b); [StructLayout (LayoutKind.Sequential)] class Baz { public DelFoo b1; public DelRefFoo b2; public DelArrayFoo b3; public DelRefArrayFoo b4; public DelBaz b5; public DelRefBaz b6; public DelArrayBaz b7; public DelRefArrayBaz b8; } [StructLayout (LayoutKind.Sequential)] class Qux { public int i; public Baz b; } class NativeMethods { [DllImport ("NativeLib")] private static extern void UseQux (DelFoo b, ref Qux q); // This shouldn't appear in test.h, due to --exclude-native-symbol [DllImport ("NativeLib")] private static extern void exclude_native_symbol (); } } // Testing namespace renaming; this should be NSTo within test.h namespace MakeMap.ToBeRenamed { [Map] class Stat { // this should be st_atime_ in test.h due to --rename-member. [Map ("time_t")] public long st_atime; } [Map] enum Colors { Red, Blue, Green } } mono-tools-2.11/create-native-map/lib/0000775000175000017500000000000012225357743021647 5ustar00directhexdirecthex00000000000000mono-tools-2.11/create-native-map/lib/Makefile.in0000664000175000017500000004403712225357726023725 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = create-native-map/lib DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = create-native-map pkgconfig 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) --gnu create-native-map/lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu create-native-map/lib/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): # 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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic 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 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 ctags \ ctags-recursive distclean distclean-generic 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 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: mono-tools-2.11/create-native-map/lib/create-native-map/0000775000175000017500000000000012225357743025151 5ustar00directhexdirecthex00000000000000mono-tools-2.11/create-native-map/lib/create-native-map/Makefile.in0000664000175000017500000002607212225357726027226 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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@ # do nothing VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = create-native-map/lib/create-native-map DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ 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) --gnu create-native-map/lib/create-native-map/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu create-native-map/lib/create-native-map/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): 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .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-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am 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: mono-tools-2.11/create-native-map/lib/create-native-map/Makefile.am0000664000175000017500000000001612225357701027174 0ustar00directhexdirecthex00000000000000# do nothing mono-tools-2.11/create-native-map/lib/Makefile.am0000664000175000017500000000004612225357701023675 0ustar00directhexdirecthex00000000000000SUBDIRS = create-native-map pkgconfig mono-tools-2.11/create-native-map/lib/pkgconfig/0000775000175000017500000000000012225357743023616 5ustar00directhexdirecthex00000000000000mono-tools-2.11/create-native-map/lib/pkgconfig/create-native-map.pc.in0000664000175000017500000000051712225357701030046 0ustar00directhexdirecthex00000000000000prefix=${pcfiledir}/../.. exec_prefix=${pcfiledir}/../.. libdir=@libdir@ includedir=${prefix}/include assemblies_dir=${libdir}/create-native-map Sources=${assemblies_dir}/MapAttribute.cs Programs=${assemblies_dir}/create-native-map.exe Name: create-native-map Description: C/C# Mapping Generator Version: @VERSION@ Requires: Libs: mono-tools-2.11/create-native-map/lib/pkgconfig/Makefile.in0000664000175000017500000003323212225357726025667 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = create-native-map/lib/pkgconfig DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/create-native-map.pc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = create-native-map.pc CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pkgconfigdir = $(prefix)/lib/pkgconfig pkgconfig_DATA = create-native-map.pc DISTCLEANFILES = create-native-map.pc EXTRA_DIST = create-native-map.pc.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) --gnu create-native-map/lib/pkgconfig/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu create-native-map/lib/pkgconfig/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): create-native-map.pc: $(top_builddir)/config.status $(srcdir)/create-native-map.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(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|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) 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)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -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-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-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgconfigDATA .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-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-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-pkgconfigDATA # 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: mono-tools-2.11/create-native-map/lib/pkgconfig/Makefile.am0000664000175000017500000000023412225357701025643 0ustar00directhexdirecthex00000000000000 pkgconfigdir = $(prefix)/lib/pkgconfig pkgconfig_DATA = create-native-map.pc DISTCLEANFILES = create-native-map.pc EXTRA_DIST = create-native-map.pc.in mono-tools-2.11/webdoc/0000775000175000017500000000000012225357752017042 5ustar00directhexdirecthex00000000000000mono-tools-2.11/webdoc/TODO0000664000175000017500000000144312225357701017526 0ustar00directhexdirecthex00000000000000Cosas por hacer: Despues del login, actualizar el "login" en el frame padre. Que use una base de datos para validar el login. Que haya dos clases de usuarios "trusted" y non-trusted, para los trusted, los cambios aparecen en la pagina, para los non-trusted, solamente aparece para ellos. En vez de hacer un upload de las contribuciones, darle un hit directo a esta base de datos cuando se aprueban los cambios. Cuando se aplican, los cambios deben de removerse del servidor, o moverse a otro sitio. exponer esto directamente al cliente de Crear el comando SQL para actualizar la tabla para que tenga otro campo "trusted" Para que no cargue la base de datos en cada hit, usar un secreto calculado en cada "boot". Poner un cookie que contenga los datos de la sesion encritados. mono-tools-2.11/webdoc/README.md0000664000175000017500000000251212225357752020321 0ustar00directhexdirecthex00000000000000Webdoc ====== Webdoc is the web container for monodoc. It normally includes: - a header - a footer - a navigation tree - the monodoc iframe Structure --------- Each webdoc instance consists of a skin (theme, chrome) and several plugins. Plugins are located in the plugins directory. The plugins currently available are: - iframe: helps size the iframe correctly in your webdoc instance. Recommended unless you want to use your own code for that - sidebar: left navigation tree. Again, recommended unless you feel like writign and wiring up your own (good luck!) - fast search: searches while you type - full search: returns a page of search results (`search.html`). Can be styled however you like. Skins are located in the skins directory. Each skin consists of: - `header.html` (required) - `footer.html` (required) - additional css and js (usually placed in the `common-extension.css`/`common-extension.js` file) - images folder (optional) How to Use ---------- Making a new instance of webdoc is easy. First, you need to edit web.config to point to the location of your monodoc source root. `MonodocRootDir` -> monodoc source root Next, throw your skin into the skins directory (or use one that's already there). Edit the `plugins.def` file, uncommenting the plugins you want to use, and setting the location of your skin. mono-tools-2.11/webdoc/monodoc.css0000664000175000017500000000004512225357752021211 0ustar00directhexdirecthex00000000000000/*This file is referenced in monodoc mono-tools-2.11/webdoc/Makefile.in0000664000175000017500000006246012225357730021113 0ustar00directhexdirecthex00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = webdoc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(webdir)" DATA = $(web_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_FLAGS = @ACLOCAL_FLAGS@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CECIL_ASM = @CECIL_ASM@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSHARP_FLAGS = @CSHARP_FLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DMCS = @DMCS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GACUTIL = @GACUTIL@ GECKO_SHARP_CFLAGS = @GECKO_SHARP_CFLAGS@ GECKO_SHARP_LIBS = @GECKO_SHARP_LIBS@ GENDARME_VERSION = @GENDARME_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMCS = @GMCS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@ GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@ GNUNIT_VERSION = @GNUNIT_VERSION@ GREP = @GREP@ GTKHTML_SHARP_CFLAGS = @GTKHTML_SHARP_CFLAGS@ GTKHTML_SHARP_LIBS = @GTKHTML_SHARP_LIBS@ GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@ GTK_SHARP_LIBS = @GTK_SHARP_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIB_PREFIX = @LIB_PREFIX@ LIB_SUFFIX = @LIB_SUFFIX@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MCS = @MCS@ MDOC = @MDOC@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MONODOC_CFLAGS = @MONODOC_CFLAGS@ MONODOC_LIBS = @MONODOC_LIBS@ MOZILLA_HOME = @MOZILLA_HOME@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ NUNIT_CFLAGS = @NUNIT_CFLAGS@ NUNIT_LIBS = @NUNIT_LIBS@ 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@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RESGEN = @RESGEN@ RUNTIME = @RUNTIME@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOOLS_VERSION = @TOOLS_VERSION@ USE_NLS = @USE_NLS@ 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 = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ webdir = $(prefix)/lib/monodoc/web web_DATA = \ Global.asax \ robots.txt \ index.aspx \ monodoc.ashx \ monodoc.css \ web.config \ api.master \ plugins.def \ README.md DISTCLEANFILES = EXTRA_DIST = \ $(wildcard App_Code/Plugins/*.cs) \ $(wildcard views/*.css) \ $(wildcard views/*.js) \ $(wildcard views/*.html) \ $(wildcard views/images/*.png) \ $(wildcard views/images/*.gif) \ $(wildcard skins/mono-external/header*) \ $(wildcard skins/mono-external/footer*) \ $(wildcard skins/mono-external/*.css) \ $(wildcard skins/mono-external/*.js) \ $(wildcard skins/mono-external/images/*.png) \ $(wildcard skins/mono-external/images/*.gif) \ $(wildcard plugins/iframe-plugin/*.js) \ $(wildcard plugins/iframe-plugin/*.css) \ $(wildcard plugins/iframe-plugin/*.html) \ $(wildcard plugins/tooltip-plugin/*.js) \ $(wildcard plugins/sidebar-plugin/*.js) \ $(wildcard plugins/sidebar-plugin/*.css) \ $(wildcard plugins/sidebar-plugin/dependencies/ptree/*.css) \ $(wildcard plugins/sidebar-plugin/dependencies/ptree/*.js) \ $(wildcard plugins/sidebar-plugin/dependencies/ptree/*.gif) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/*.css) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/*.js) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/*.png) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/clean/*.gif) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/msdn/*.gif) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/msdn2/*.gif) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/xp/*.png) \ $(wildcard plugins/search-plugin/images/*.gif) \ $(wildcard plugins/search-plugin/fullsearch/*.css) \ $(wildcard plugins/search-plugin/fullsearch/*.js) \ $(wildcard plugins/search-plugin/fullsearch/*.html) \ $(wildcard plugins/search-plugin/fastsearch/*.css) \ $(wildcard plugins/search-plugin/fastsearch/*.js) 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) --gnu webdoc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu webdoc/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): install-webDATA: $(web_DATA) @$(NORMAL_INSTALL) @list='$(web_DATA)'; test -n "$(webdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(webdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(webdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(webdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(webdir)" || exit $$?; \ done uninstall-webDATA: @$(NORMAL_UNINSTALL) @list='$(web_DATA)'; test -n "$(webdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(webdir)'; $(am__uninstall_files_from_dir) 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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(webdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -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-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-webDATA @$(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 pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-webDATA .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic 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-pdf install-pdf-am \ install-ps install-ps-am install-strip install-webDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-webDATA .PHONY : \ dist-hook \ web \ up dist-hook: mkdir -p $(distdir)/App_Code/Plugins mkdir -p $(distdir)/views/images mkdir -p $(distdir)/skins/mono-external/images mkdir -p $(distdir)/plugins/iframe-plugin mkdir -p $(distdir)/plugins/tooltip-plugin mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/ptree mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2 mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean mkdir -p $(distdir)/plugins/search-plugin/images mkdir -p $(distdir)/plugins/search-plugin/fastsearch mkdir -p $(distdir)/plugins/search-plugin/fullsearch for f in $(web_DATA) ; do cp $(srcdir)/$$f $(distdir) ; done cp $(srcdir)/App_Code/Plugins/*cs $(distdir)/App_Code/Plugins cp $(srcdir)/views/*css $(distdir)/views cp $(srcdir)/views/*js $(distdir)/views cp $(srcdir)/views/images/*png $(distdir)/views/images cp $(srcdir)/views/images/*ico $(distdir)/views/images cp $(srcdir)/skins/mono-external/header* $(distdir)/skins/mono-external cp $(srcdir)/skins/mono-external/footer* $(distdir)/skins/mono-external cp $(srcdir)/skins/mono-external/*css $(distdir)/skins/mono-external cp $(srcdir)/skins/mono-external/images/*png $(distdir)/skins/mono-external/images cp $(srcdir)/skins/mono-external/images/*gif $(distdir)/skins/mono-external/images cp $(srcdir)/plugins/iframe-plugin/*js $(distdir)/plugins/iframe-plugin cp $(srcdir)/plugins/tooltip-plugin/*js $(distdir)/plugins/tooltip-plugin cp $(srcdir)/plugins/sidebar-plugin/*css $(distdir)/plugins/sidebar-plugin cp $(srcdir)/plugins/sidebar-plugin/*js $(distdir)/plugins/sidebar-plugin cp $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*css $(distdir)/plugins/sidebar-plugin/dependencies/ptree cp $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*js $(distdir)/plugins/sidebar-plugin/dependencies/ptree cp $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*gif $(distdir)/plugins/sidebar-plugin/dependencies/ptree cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/*css $(distdir)/plugins/sidebar-plugin/dependencies/xtree cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/*js $(distdir)/plugins/sidebar-plugin/dependencies/xtree cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/*png $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean/*gif $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn/*gif $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2/*gif $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2 cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp/*png $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp cp $(srcdir)/plugins/search-plugin/images/*gif $(distdir)/plugins/search-plugin/images cp $(srcdir)/plugins/search-plugin/fullsearch/*css $(distdir)/plugins/search-plugin/fullsearch cp $(srcdir)/plugins/search-plugin/fullsearch/*js $(distdir)/plugins/search-plugin/fullsearch cp $(srcdir)/plugins/search-plugin/fullsearch/*html $(distdir)/plugins/search-plugin/fullsearch cp $(srcdir)/plugins/search-plugin/fastsearch/*css $(distdir)/plugins/search-plugin/fastsearch cp $(srcdir)/plugins/search-plugin/fastsearch/*js $(distdir)/plugins/search-plugin/fastsearch install-data-hook: -$(mkinstalldirs) $(DESTDIR)$(webdir)/App_Code/Plugins -$(mkinstalldirs) $(DESTDIR)$(webdir)/views/images -$(mkinstalldirs) $(DESTDIR)$(webdir)/skins/mono-external/images -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/iframe-plugin -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/tooltip-plugin -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/ptree -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2 -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/search-plugin/images -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/search-plugin/fastsearch -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/search-plugin/fullsearch $(INSTALL_DATA) $(srcdir)/App_Code/Plugins/*cs $(DESTDIR)$(webdir)/App_Code/Plugins $(INSTALL_DATA) $(srcdir)/views/*css $(DESTDIR)$(webdir)/views $(INSTALL_DATA) $(srcdir)/views/*js $(DESTDIR)$(webdir)/views $(INSTALL_DATA) $(srcdir)/views/*html $(DESTDIR)$(webdir)/views $(INSTALL_DATA) $(srcdir)/views/images/*png $(DESTDIR)$(webdir)/views/images $(INSTALL_DATA) $(srcdir)/views/images/*gif $(DESTDIR)$(webdir)/views/images $(INSTALL_DATA) $(srcdir)/skins/mono-external/header* $(DESTDIR)$(webdir)/skins/mono-external $(INSTALL_DATA) $(srcdir)/skins/mono-external/footer* $(DESTDIR)$(webdir)/skins/mono-external $(INSTALL_DATA) $(srcdir)/skins/mono-external/*css $(DESTDIR)$(webdir)/skins/mono-external $(INSTALL_DATA) $(srcdir)/skins/mono-external/*js $(DESTDIR)$(webdir)/skins/mono-external $(INSTALL_DATA) $(srcdir)/skins/mono-external/images/*png $(DESTDIR)$(webdir)/skins/mono-external/images $(INSTALL_DATA) $(srcdir)/skins/mono-external/images/*gif $(DESTDIR)$(webdir)/skins/mono-external/images $(INSTALL_DATA) $(srcdir)/plugins/iframe-plugins/*css $(DESTDIR)$(webdir)/plugins/iframe-plugin $(INSTALL_DATA) $(srcdir)/plugins/iframe-plugin/*js $(DESTDIR)$(webdir)/plugins/iframe-plugin $(INSTALL_DATA) $(srcdir)/plugins/iframe-plugin/*html $(DESTDIR)$(webdir)/plugins/iframe-plugin $(INSTALL_DATA) $(srcdir)/plugins/tooltip-plugin/*js $(DESTDIR)$(webdir)/plugins/tooltip-plugin $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/*css $(DESTDIR)$(webdir)/plugins/sidebar-plugin $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/*js $(DESTDIR)$(webdir)/plugins/sidebar-plugin $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*css $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/ptree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*js $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/ptree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*gif $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/ptree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/*css $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/*js $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/*png $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean/*gif $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn/*gif $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2/*gif $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2 $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp/*png $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/images/*gif $(DESTDIR)$(webdir)/plugins/search-plugin/images $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fullsearch/*css $(DESTDIR)$(webdir)/plugins/search-plugin/fullsearch $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fullsearch/*js $(DESTDIR)$(webdir)/plugins/search-plugin/fullsearch $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fullsearch/*html $(DESTDIR)$(webdir)/plugins/search-plugin/fullsearch $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fastsearch/*css $(DESTDIR)$(webdir)/plugins/search-plugin/fastsearch $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fastsearch/*js $(DESTDIR)$(webdir)/plugins/search-plugin/fastsearch Monodoc.Contributions.dll: server.cs Makefile.am mcs -debug+ $< -target:library -out:$@ -r:System.Web -r:System.Web.Services -pkg:monodoc -r:System.Data -r:ByteFX.Data web: Monodoc.Contributions.dll xsp up: scp monodoc.dll root@www.go-mono.com: # 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: mono-tools-2.11/webdoc/monodoc.ashx0000664000175000017500000004167312225357752021400 0ustar00directhexdirecthex00000000000000<%@ WebHandler Language="c#" class="Mono.Website.Handlers.MonodocHandler" %> <%@ Assembly name="monodoc" %> #define MONODOC_PTREE // // Mono.Web.Handlers.MonodocHandler. // // Authors: // Ben Maurer (bmaurer@users.sourceforge.net) // Miguel de Icaza (miguel@novell.com) // // (C) 2003 Ben Maurer // (C) 2006 Novell, Inc. // using System; using System.Collections; using System.IO; using System.Text; using System.Web; using System.Web.UI; using System.Xml; using System.Xml.Xsl; using System.Linq; using Monodoc; using System.Text.RegularExpressions; namespace Mono.Website.Handlers { public class MonodocHandler : IHttpHandler { static DateTime monodoc_timestamp, handler_timestamp; static MonodocHandler () { monodoc_timestamp = File.GetCreationTimeUtc (typeof (Node).Assembly.Location); handler_timestamp = File.GetCreationTimeUtc (typeof (MonodocHandler).Assembly.Location); DumpEmbeddedImages (); } // Dumps the embedded images from monodoc.dll static void DumpEmbeddedImages () { try { Directory.CreateDirectory ("mdocimages"); } catch {} var mass = typeof (Node).Assembly; var buffer = new byte [4096]; foreach (string image in mass.GetManifestResourceNames ()){ if (!(image.EndsWith ("png") || image.EndsWith ("jpg"))) continue; var target = Path.Combine ("mdocimages", image); if (File.Exists (target)) continue; using (var output = File.Create (target)){ var input = mass.GetManifestResourceStream (image); int n; while ((n = input.Read (buffer, 0, buffer.Length)) > 0){ output.Write (buffer, 0, n); } } } } void IHttpHandler.ProcessRequest (HttpContext context) { string s; string callback; s = (string) context.Request.Params["link"]; if (s != null){ HandleMonodocUrl (context, s); return; } s = (string) context.Request.Params["tree"]; Console.WriteLine ("tree request: '{0}'", s); if (s != null){ HandleTree (context, s); return; } s = (string) context.Request.Params["fsearch"]; callback = (string) context.Request.Params["callback"]; Console.WriteLine ("Fast search requested for query {0}", s); if (s != null) { HandleFastSearchRequest (context, s, callback); return; } s = (string) context.Request.Params["search"]; callback = (string) context.Request.Params["callback"]; Console.WriteLine ("Full search requested for query {0}", s); if (s != null) { HandleFullSearchRequest (context, s, callback); return; } context.Response.Write ("Unknown request"); context.Response.ContentType = "text/html"; } void HandleTree (HttpContext context, string tree) { context.Response.ContentType = "text/xml"; //Console.WriteLine ("Tree request: " + tree); try { // // Walk the url, found what we are supposed to render. // string [] nodes = tree.Split (new char [] {'@'}); Node current_node = Global.help_tree; for (int i = 0; i < nodes.Length; i++){ try { current_node = (Node)current_node.Nodes [int.Parse (nodes [i])]; } catch (Exception e){ Console.WriteLine ("Failure with: {0} {1}", tree, i); } } XmlTextWriter w = new XmlTextWriter (context.Response.Output); w.WriteStartElement ("tree"); for (int i = 0; i < current_node.Nodes.Count; i++) { Node n = (Node)current_node.Nodes [i]; w.WriteStartElement ("tree"); w.WriteAttributeString ("text", n.Caption); if (n.tree != null && n.tree.HelpSource != null) w.WriteAttributeString ("action", HttpUtility.UrlEncode (n.PublicUrl)); if (n.Nodes != null){ w.WriteAttributeString ("src", tree + "@" + i); } w.WriteEndElement (); } w.WriteEndElement (); } catch (Exception e) { Console.WriteLine (e); } //Console.WriteLine ("Tree request satisfied"); } void CheckLastModified (HttpContext context) { string strHeader = context.Request.Headers ["If-Modified-Since"]; DateTime lastHelpSourceTime = Global.help_tree.LastHelpSourceTime; try { if (strHeader != null && lastHelpSourceTime != DateTime.MinValue) { // Console.WriteLine ("Got this: {0}", strHeader); DateTime dtIfModifiedSince = DateTime.ParseExact (strHeader, "r", null).ToUniversalTime (); DateTime ftime = lastHelpSourceTime.ToUniversalTime (); //Console.WriteLine ("Times:"); //Console.WriteLine (" ftime: {0}", ftime); //Console.WriteLine (" monod: {0}", monodoc_timestamp); //Console.WriteLine (" handl: {0}", handler_timestamp); //Console.WriteLine (" dtIf: {0}", dtIfModifiedSince); if (dtIfModifiedSince < DateTime.UtcNow && ftime <= dtIfModifiedSince && monodoc_timestamp <= dtIfModifiedSince && handler_timestamp <= dtIfModifiedSince) { context.Response.StatusCode = 304; return; } } } catch { } long ticks = System.Math.Max (monodoc_timestamp.Ticks, handler_timestamp.Ticks); if (lastHelpSourceTime != DateTime.MinValue) { ticks = System.Math.Max (ticks, lastHelpSourceTime.Ticks); DateTime lastWT = new DateTime (ticks).ToUniversalTime (); context.Response.AddHeader ("Last-Modified", lastWT.ToString ("r")); } } void HandleMonodocUrl (HttpContext context, string link) { if (link.StartsWith ("source-id:") && (link.EndsWith (".gif") || link.EndsWith (".jpeg") || link.EndsWith (".jpg") || link.EndsWith(".png"))){ switch (link.Substring (link.LastIndexOf ('.') + 1)) { case "gif": context.Response.ContentType = "image/gif"; break; case "jpeg": case "jpg": context.Response.ContentType = "image/jpeg"; break; case "png": context.Response.ContentType = "image/png"; break; default: throw new Exception ("Internal error"); } Stream s = Global.help_tree.GetImage (link); if (s == null) throw new HttpException (404, "File not found"); CheckLastModified (context); if (context.Response.StatusCode == 304) return; s.CopyTo (context.Response.OutputStream); return; } else if (link.Equals ("root:", StringComparison.Ordinal) && File.Exists ("home.html")) { context.Response.WriteFile ("home.html"); return; } if (Global.help_tree == null) return; Node n; //Console.WriteLine ("Considering {0}", link); string content = Global.help_tree.RenderUrl (link, out n); CheckLastModified (context); if (context.Response.StatusCode == 304){ //Console.WriteLine ("Keeping", link); return; } PrintDocs (content, n, context, GetHelpSource (n)); } void HandleFastSearchRequest (HttpContext context, string request, string callback) { if (string.IsNullOrWhiteSpace (request) || request.Length < 3) { // Unprocessable entity context.Response.StatusCode = 422; return; } var searchIndex = Global.GetSearchIndex (); var result = searchIndex.FastSearch (request, 15); // return Json corresponding to the results var answer = result == null || result.Count == 0 ? "[]" : "[" + Enumerable.Range (0, result.Count) .Select (i => string.Format ("{{ \"name\" : \"{0}\", \"url\" : \"{1}\", \"fulltitle\" : \"{2}\" }}", result.GetTitle (i), result.GetUrl (i), result.GetFullTitle (i))) .Aggregate ((e1, e2) => e1 + ", " + e2) + "]"; if (!string.IsNullOrWhiteSpace (callback)) answer = callback + "(" + answer + ")"; Console.WriteLine ("answer is {0}", answer); context.Response.ContentType = "application/json"; context.Response.Write (answer); } void HandleFullSearchRequest (HttpContext context, string request, string callback) { if (string.IsNullOrWhiteSpace (request)) { // Unprocessable entity context.Response.StatusCode = 422; return; } int start = 0, count = 0; var searchIndex = Global.GetSearchIndex (); Result result = null; if (int.TryParse (context.Request.Params["count"], out count)) { if (int.TryParse (context.Request.Params["start"], out start)) result = searchIndex.Search (request, count, start); else result = searchIndex.Search (request, count); } else { count = 20; result = searchIndex.Search (request, count); } // return Json corresponding to the results var answer = result == null || result.Count == 0 ? "[]" : "[" + Enumerable.Range (0, result.Count) .Select (i => string.Format ("{{ \"name\" : \"{0}\", \"url\" : \"{1}\", \"fulltitle\" : \"{2}\" }}", result.GetTitle (i), result.GetUrl (i), result.GetFullTitle (i))) .Aggregate ((e1, e2) => e1 + ", " + e2) + "]"; if(!string.IsNullOrWhiteSpace (callback)) { answer = string.Format ("{0}({{ \"count\": {1}, \"start\": {2}, \"result\": {3} }})", callback, count, start, answer); } Console.WriteLine ("answer is {0}", answer); context.Response.ContentType = "application/json"; context.Response.Write (answer); } HelpSource GetHelpSource (Node n) { if (n != null) return n.tree.HelpSource; return null; } string requestPath; void PrintDocs (string content, Node node, HttpContext ctx, HelpSource hs) { string tree_path = string.Empty; Node current = node; while (current != null && current.Parent != null) { int index = current.Parent.Nodes.IndexOf (current); tree_path = '@' + (index + tree_path); current = current.Parent; } tree_path = tree_path.Length > 0 ? tree_path.Substring (1) : tree_path; Console.WriteLine ("Tree path is:" + tree_path); string title = (node == null || node.Caption == null) ? "Mono XDocumentation" : node.Caption; ctx.Response.Write (@" "); ctx.Response.Write (title); ctx.Response.Write ("\n"); if (hs != null && hs.InlineCss != null) { ctx.Response.Write ("\n"); } if (hs != null && hs.InlineJavaScript != null) { ctx.Response.Write ("\n"); } ctx.Response.Write (@""); ctx.Response.Write (@""); // Set up object variable, as it's required by the MakeLink delegate requestPath=ctx.Request.Path; string output; if (content == null) output = "No documentation available on this topic"; else output = MakeLinks(content); ctx.Response.Write (output); ctx.Response.Write (@""); } string MakeLinks(string content) { MatchEvaluator linkUpdater=new MatchEvaluator(MakeLink); if(content.Trim().Length<1|| content==null) return content; try { string updatedContents=Regex.Replace(content,"(]*href=['\"])([^'\"]+)(['\"][^>]*)(>)", linkUpdater); return(updatedContents); } catch(Exception e) { return "LADEDA" + content+"!"; } } // Delegate to be called from MakeLinks for fixing tag string MakeLink (Match theMatch) { string updated_link = null; // Return the link without change if it of the form // $protocol:... or #... string link = theMatch.Groups[2].ToString(); if (Regex.Match(link, @"^\w+:\/\/").Success || Regex.Match(link, "^#").Success || Regex.Match(link, @"^javascript:").Success) updated_link = theMatch.Groups[0].ToString(); else if (link.StartsWith ("edit:")){ link = link.Substring (5); updated_link = String.Format("{0}/edit.aspx?link={2}{3} target=\"content\"{4}", theMatch.Groups[1].ToString(), requestPath, HttpUtility.UrlEncode (link.Replace ("file://","")), theMatch.Groups[3].ToString(), theMatch.Groups[4].ToString()); } else { updated_link = String.Format ("{0}{1}?link={2}{3} onclick=\"try_change_page('{2}')\" {4}", theMatch.Groups[1].ToString(), requestPath, HttpUtility.UrlEncode (link.Replace ("file://","")), theMatch.Groups[3].ToString(), theMatch.Groups[4].ToString()); } return updated_link; } bool IHttpHandler.IsReusable { get { return true; } } } } mono-tools-2.11/webdoc/views/0000775000175000017500000000000012225357752020177 5ustar00directhexdirecthex00000000000000mono-tools-2.11/webdoc/views/images/0000775000175000017500000000000012225357752021444 5ustar00directhexdirecthex00000000000000mono-tools-2.11/webdoc/views/images/favicon.ico0000664000175000017500000000257612225357752023577 0ustar00directhexdirecthex00000000000000h( ^^^kkkdddxxx]]]qqqVVVjjjcccwww\\\pppiiibbbvvvooohhhMMM|||aaauuuSSSggg{{{```mmmfff___ssslll"""eeeJJJyyy     !          "     Ç??Çmono-tools-2.11/webdoc/views/images/native-browser-icon.png0000664000175000017500000000331012225357752026044 0ustar00directhexdirecthex00000000000000PNG  IHDRaiCCPICC Profile(UoT?o\?US[IB*unS6mUo xB ISA$=t@hpS]Ƹ9w>5@WI`]5;V! A'@{N\..ƅG_!7suV$BlW=}i; F)A<.&Xax,38S(b׵*%31l #O-zQvaXOP5o6Zz&⻏^wkI/#&\%x/@{7S މjPh͔&mry>k7=ߪB#@fs_{덱п0-LZ~%Gpˈ{YXf^+_s-T>D@קƸ-9!r[2]3BcnCs?>*ԮeD|%4` :X2 pQSLPRaeyqĘ י5Fit )CdL$o$rpӶb>4+̹F_{Яki+x.+B.{L<۩ =UHcnf<>F ^e||pyv%b:iX'%8Iߔ? rw[vITVQN^dpYI"|#\cz[2M^S0[zIJ/HHȟ- Ic'P(,ϔjV("$MÎ#c.[z!)riZajTQ'3TiPDPX9@ܲ<1@b5RDe%/Q@#Qa)H; E6G b^R/_AmQNR vJT!~G $Iy@09>1q$_>eQZ|7B`YY,Dh+|~~{ %M=K7yP׳V.=^:CYja(@@s瘮|ТabD B,~,2=9^O""E"6uЋ7ZKwc.Zs9l9qe33Оfip >yP74J{QA_CuB9Qj|~T@IENDB`mono-tools-2.11/webdoc/views/reset.css0000664000175000017500000000236312225357752022037 0ustar00directhexdirecthex00000000000000 /** * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/) * http://cssreset.com */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } mono-tools-2.11/webdoc/views/common.js0000664000175000017500000000260612225357752022031 0ustar00directhexdirecthex00000000000000$(function () { //a hack for sizing our iframe correctly /* var getHeight = function () { } var main_part = $('#main_part'); var content_frame = main_part.find('#content_frame'); var resize_mainpart = function () { // main_part.height (getHeight() - 75); // main_part.children('#side').css ('height', '100%'); content_frame.css ('height', '97.5%'); } var resizeTimer; $(window).resize(function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(resize_mainpart, 100); }); resize_mainpart ();*/ }); mono-tools-2.11/webdoc/views/common.css0000664000175000017500000000113212225357752022176 0ustar00directhexdirecthex00000000000000/*****Common.css*****/ /*bare-bones css for most layouts*/ body { padding: 0; height: 100%; } html { padding: 0; margin: 0 auto; height: 100%; } .code { font-family: "Courier New", Courier; } .table { padding-left:2px; padding-right:2px; padding-top:0px; padding-bottom:0px; } div.Content { margin-right: 1em; } iframe { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } #content_frame { width: 100%; height: 100%; } #main_part { height: 100%; } mono-tools-2.11/webdoc/App_Code/0000775000175000017500000000000012225357752020514 5ustar00directhexdirecthex00000000000000mono-tools-2.11/webdoc/App_Code/Plugins/0000775000175000017500000000000012225357752022135 5ustar00directhexdirecthex00000000000000mono-tools-2.11/webdoc/App_Code/Plugins/Plugin.cs0000664000175000017500000001302712225357752023725 0ustar00directhexdirecthex00000000000000using System; using System.Web.Configuration; using System.Collections.Generic; using System.IO; using System.Linq; namespace Mono.Website { public class Plugin { static string PluginsDefLocation = WebConfigurationManager.AppSettings["Plugins"]; public enum PluginContent { Header, Footer, Css, Javascript } //generates a list of files of a certain type in the plugins we are including, //and spits out the necessary text to add to index.aspx public static string GetPluginContent (PluginContent type) { var plugins_list_from_def = ParseExternalDefinition(PluginsDefLocation); var paths_to_files = GetFilesTypeX(type, plugins_list_from_def); return GetPluginContent (type, paths_to_files); } //Add the actual HTML to include either the reference or the content in index.aspx, for each plugin mentioned //in the .def static string GetPluginContent (PluginContent type, string[] paths_to_files) { if (type == PluginContent.Javascript) { paths_to_files = Array.ConvertAll(paths_to_files, path => string.Format("{1}script type='text/javascript' src='{0}'{2}{1}/script{2}", path, '<', '>')); //reverse the array so we get all our js dependencies correct :) Array.Reverse(paths_to_files); } else if (type == PluginContent.Css) { paths_to_files = Array.ConvertAll(paths_to_files, path => string.Format("{1}link type='text/css' rel='stylesheet' media='screen' href='{0}'{2}", path, '<', '>')); } else { paths_to_files = Array.ConvertAll(paths_to_files, path => File.ReadAllText(path)); } var content_to_inject = String.Join(String.Empty, paths_to_files); return content_to_inject; } //returns files of a certain type from ALL directories. static string[] GetFilesTypeX (PluginContent type, List directories) { var all_typed_files = new List(); foreach(var directory in directories) { var files = GetFilesTypeX(type, directory); all_typed_files.AddRange(files); } return all_typed_files.ToArray(); } //grab files of type x from a directory static List GetFilesTypeX (PluginContent type, string directory) { try { string criteria; if(type == PluginContent.Javascript) { criteria = "*.js"; } else if(type == PluginContent.Css) { criteria = "*.css"; } else if(type == PluginContent.Footer) { criteria = "footer.????"; } else if (type == PluginContent.Header) { criteria = "header.????"; } else { criteria = string.Empty; } var files_arr = GetFilesTypeX(directory, criteria); List files = new List(files_arr); var external = Directory.GetFiles(directory, "external.def"); if (external.Any()) { try { if (type == PluginContent.Css) { files.AddRange(ParseExternalDefinition(external[0], ".css")); } else if (type == PluginContent.Javascript) { files.AddRange(ParseExternalDefinition(external[0], ".js")); } else { } } catch (Exception ex) { throw ex; } } return files; } catch (Exception ex) { throw ex; } } //recursively browse directories for files with a certain extension or file name static List GetFilesTypeX (string directory, string criteria) { try { var filesFound = new List(); foreach (string file in Directory.GetFiles(directory, criteria)) { filesFound.Add(file); } foreach (string dir in Directory.GetDirectories(directory)) { filesFound.AddRange(GetFilesTypeX(dir, criteria)); } return filesFound; } catch (Exception ex) { throw ex; } } static List ParseExternalDefinition (string definitionPath, string criteria) { //if definitionPath is undefined, or def file does not exist, don't bother if (string.IsNullOrEmpty (definitionPath) || !File.Exists (definitionPath)) return null; // read out the file var lines = File.ReadAllLines (definitionPath); //build our list var files = lines.Where (line => !string.IsNullOrEmpty (line) && line[0] != '#') // Take non-empty, non-comment lines .Where (file_path => file_path != null && file_path.Length > 2 && file_path.EndsWith(criteria)) .ToList (); //returns a list of directories in which to look for plugin resources return files; } //eats whatever .def file you feed it static List ParseExternalDefinition (string definitionPath) { //if definitionPath is undefined, or def file does not exist, don't bother if (string.IsNullOrEmpty (definitionPath) || !File.Exists (definitionPath)) return null; // read out the file var lines = File.ReadAllLines (definitionPath); //build our list var directories = lines.Where (line => !string.IsNullOrEmpty (line) && line[0] != '#') // Take non-empty, non-comment lines .Where (file_path => file_path != null && file_path.Length > 2) .ToList (); //returns a list of directories in which to look for plugin resources return directories; } } } mono-tools-2.11/webdoc/Makefile.am0000664000175000017500000002775412225357701021107 0ustar00directhexdirecthex00000000000000webdir=$(prefix)/lib/monodoc/web web_DATA = \ Global.asax \ robots.txt \ index.aspx \ monodoc.ashx \ monodoc.css \ web.config \ api.master \ plugins.def \ README.md DISTCLEANFILES = .PHONY : \ dist-hook \ web \ up EXTRA_DIST = \ $(wildcard App_Code/Plugins/*.cs) \ $(wildcard views/*.css) \ $(wildcard views/*.js) \ $(wildcard views/*.html) \ $(wildcard views/images/*.png) \ $(wildcard views/images/*.gif) \ $(wildcard skins/mono-external/header*) \ $(wildcard skins/mono-external/footer*) \ $(wildcard skins/mono-external/*.css) \ $(wildcard skins/mono-external/*.js) \ $(wildcard skins/mono-external/images/*.png) \ $(wildcard skins/mono-external/images/*.gif) \ $(wildcard plugins/iframe-plugin/*.js) \ $(wildcard plugins/iframe-plugin/*.css) \ $(wildcard plugins/iframe-plugin/*.html) \ $(wildcard plugins/tooltip-plugin/*.js) \ $(wildcard plugins/sidebar-plugin/*.js) \ $(wildcard plugins/sidebar-plugin/*.css) \ $(wildcard plugins/sidebar-plugin/dependencies/ptree/*.css) \ $(wildcard plugins/sidebar-plugin/dependencies/ptree/*.js) \ $(wildcard plugins/sidebar-plugin/dependencies/ptree/*.gif) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/*.css) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/*.js) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/*.png) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/clean/*.gif) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/msdn/*.gif) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/msdn2/*.gif) \ $(wildcard plugins/sidebar-plugin/dependencies/xtree/images/xp/*.png) \ $(wildcard plugins/search-plugin/images/*.gif) \ $(wildcard plugins/search-plugin/fullsearch/*.css) \ $(wildcard plugins/search-plugin/fullsearch/*.js) \ $(wildcard plugins/search-plugin/fullsearch/*.html) \ $(wildcard plugins/search-plugin/fastsearch/*.css) \ $(wildcard plugins/search-plugin/fastsearch/*.js) dist-hook: mkdir -p $(distdir)/App_Code/Plugins mkdir -p $(distdir)/views/images mkdir -p $(distdir)/skins/mono-external/images mkdir -p $(distdir)/plugins/iframe-plugin mkdir -p $(distdir)/plugins/tooltip-plugin mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/ptree mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2 mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp mkdir -p $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean mkdir -p $(distdir)/plugins/search-plugin/images mkdir -p $(distdir)/plugins/search-plugin/fastsearch mkdir -p $(distdir)/plugins/search-plugin/fullsearch for f in $(web_DATA) ; do cp $(srcdir)/$$f $(distdir) ; done cp $(srcdir)/App_Code/Plugins/*cs $(distdir)/App_Code/Plugins cp $(srcdir)/views/*css $(distdir)/views cp $(srcdir)/views/*js $(distdir)/views cp $(srcdir)/views/images/*png $(distdir)/views/images cp $(srcdir)/views/images/*ico $(distdir)/views/images cp $(srcdir)/skins/mono-external/header* $(distdir)/skins/mono-external cp $(srcdir)/skins/mono-external/footer* $(distdir)/skins/mono-external cp $(srcdir)/skins/mono-external/*css $(distdir)/skins/mono-external cp $(srcdir)/skins/mono-external/images/*png $(distdir)/skins/mono-external/images cp $(srcdir)/skins/mono-external/images/*gif $(distdir)/skins/mono-external/images cp $(srcdir)/plugins/iframe-plugin/*js $(distdir)/plugins/iframe-plugin cp $(srcdir)/plugins/tooltip-plugin/*js $(distdir)/plugins/tooltip-plugin cp $(srcdir)/plugins/sidebar-plugin/*css $(distdir)/plugins/sidebar-plugin cp $(srcdir)/plugins/sidebar-plugin/*js $(distdir)/plugins/sidebar-plugin cp $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*css $(distdir)/plugins/sidebar-plugin/dependencies/ptree cp $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*js $(distdir)/plugins/sidebar-plugin/dependencies/ptree cp $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*gif $(distdir)/plugins/sidebar-plugin/dependencies/ptree cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/*css $(distdir)/plugins/sidebar-plugin/dependencies/xtree cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/*js $(distdir)/plugins/sidebar-plugin/dependencies/xtree cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/*png $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean/*gif $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn/*gif $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2/*gif $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2 cp $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp/*png $(distdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp cp $(srcdir)/plugins/search-plugin/images/*gif $(distdir)/plugins/search-plugin/images cp $(srcdir)/plugins/search-plugin/fullsearch/*css $(distdir)/plugins/search-plugin/fullsearch cp $(srcdir)/plugins/search-plugin/fullsearch/*js $(distdir)/plugins/search-plugin/fullsearch cp $(srcdir)/plugins/search-plugin/fullsearch/*html $(distdir)/plugins/search-plugin/fullsearch cp $(srcdir)/plugins/search-plugin/fastsearch/*css $(distdir)/plugins/search-plugin/fastsearch cp $(srcdir)/plugins/search-plugin/fastsearch/*js $(distdir)/plugins/search-plugin/fastsearch install-data-hook: -$(mkinstalldirs) $(DESTDIR)$(webdir)/App_Code/Plugins -$(mkinstalldirs) $(DESTDIR)$(webdir)/views/images -$(mkinstalldirs) $(DESTDIR)$(webdir)/skins/mono-external/images -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/iframe-plugin -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/tooltip-plugin -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/ptree -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2 -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/search-plugin/images -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/search-plugin/fastsearch -$(mkinstalldirs) $(DESTDIR)$(webdir)/plugins/search-plugin/fullsearch $(INSTALL_DATA) $(srcdir)/App_Code/Plugins/*cs $(DESTDIR)$(webdir)/App_Code/Plugins $(INSTALL_DATA) $(srcdir)/views/*css $(DESTDIR)$(webdir)/views $(INSTALL_DATA) $(srcdir)/views/*js $(DESTDIR)$(webdir)/views $(INSTALL_DATA) $(srcdir)/views/*html $(DESTDIR)$(webdir)/views $(INSTALL_DATA) $(srcdir)/views/images/*png $(DESTDIR)$(webdir)/views/images $(INSTALL_DATA) $(srcdir)/views/images/*gif $(DESTDIR)$(webdir)/views/images $(INSTALL_DATA) $(srcdir)/skins/mono-external/header* $(DESTDIR)$(webdir)/skins/mono-external $(INSTALL_DATA) $(srcdir)/skins/mono-external/footer* $(DESTDIR)$(webdir)/skins/mono-external $(INSTALL_DATA) $(srcdir)/skins/mono-external/*css $(DESTDIR)$(webdir)/skins/mono-external $(INSTALL_DATA) $(srcdir)/skins/mono-external/*js $(DESTDIR)$(webdir)/skins/mono-external $(INSTALL_DATA) $(srcdir)/skins/mono-external/images/*png $(DESTDIR)$(webdir)/skins/mono-external/images $(INSTALL_DATA) $(srcdir)/skins/mono-external/images/*gif $(DESTDIR)$(webdir)/skins/mono-external/images $(INSTALL_DATA) $(srcdir)/plugins/iframe-plugins/*css $(DESTDIR)$(webdir)/plugins/iframe-plugin $(INSTALL_DATA) $(srcdir)/plugins/iframe-plugin/*js $(DESTDIR)$(webdir)/plugins/iframe-plugin $(INSTALL_DATA) $(srcdir)/plugins/iframe-plugin/*html $(DESTDIR)$(webdir)/plugins/iframe-plugin $(INSTALL_DATA) $(srcdir)/plugins/tooltip-plugin/*js $(DESTDIR)$(webdir)/plugins/tooltip-plugin $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/*css $(DESTDIR)$(webdir)/plugins/sidebar-plugin $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/*js $(DESTDIR)$(webdir)/plugins/sidebar-plugin $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*css $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/ptree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*js $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/ptree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/ptree/*gif $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/ptree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/*css $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/*js $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/*png $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean/*gif $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/clean $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn/*gif $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2/*gif $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/msdn2 $(INSTALL_DATA) $(srcdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp/*png $(DESTDIR)$(webdir)/plugins/sidebar-plugin/dependencies/xtree/images/xp $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/images/*gif $(DESTDIR)$(webdir)/plugins/search-plugin/images $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fullsearch/*css $(DESTDIR)$(webdir)/plugins/search-plugin/fullsearch $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fullsearch/*js $(DESTDIR)$(webdir)/plugins/search-plugin/fullsearch $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fullsearch/*html $(DESTDIR)$(webdir)/plugins/search-plugin/fullsearch $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fastsearch/*css $(DESTDIR)$(webdir)/plugins/search-plugin/fastsearch $(INSTALL_DATA) $(srcdir)/plugins/search-plugin/fastsearch/*js $(DESTDIR)$(webdir)/plugins/search-plugin/fastsearch Monodoc.Contributions.dll: server.cs Makefile.am mcs -debug+ $< -target:library -out:$@ -r:System.Web -r:System.Web.Services -pkg:monodoc -r:System.Data -r:ByteFX.Data web: Monodoc.Contributions.dll xsp up: scp monodoc.dll root@www.go-mono.com: mono-tools-2.11/webdoc/robots.txt0000664000175000017500000000003312225357752021107 0ustar00directhexdirecthex00000000000000User-agent: * Disallow: / mono-tools-2.11/webdoc/web.config0000664000175000017500000000245712225357752021016 0ustar00directhexdirecthex00000000000000
mono-tools-2.11/webdoc/skins/0000775000175000017500000000000012225357752020171 5ustar00directhexdirecthex00000000000000mono-tools-2.11/webdoc/skins/mono-external/0000775000175000017500000000000012225357752022761 5ustar00directhexdirecthex00000000000000mono-tools-2.11/webdoc/skins/mono-external/images/0000775000175000017500000000000012225357752024226 5ustar00directhexdirecthex00000000000000mono-tools-2.11/webdoc/skins/mono-external/images/link.png0000664000175000017500000000314312225357752025672 0ustar00directhexdirecthex00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThˋdW?sϽU]Օ{&( yTЅs!h.* " kWhhhhCwzf2~TuL ]=VL n{~{{Uv~?"f@A# ^]|7K-t 2DD?g>iECǨ7󹭭s+[-8{*Hpx\{8be$T1]I̍^Fhj=NÇzë͡=ΘY2VD.&tY]X!ѴV"yĴY9S?/>_T W I]H_fn.>aDj޻ߝQA;-TU,'h1)>6 SgSȟjml = 4BMT;$LG1$2vΣށ!'FjAխ[wŏcwM@,eKyDM1x R(aī&'I<1HPT@k!V#j\"tPv%5씱4.GBIHRTkHCM)M1lhզlcQwhnREF{4n$b0.# ;7bѡ@E@a %OR#}Z"iK,kdXjVΌ?)FSb/@C#TueMkiFaYDeM@Uíh 4Tɯ-A.ɴ}bL-AA,̌ޡ.n~TXvɽrZdRo7`7C o-`ǵnR3GٳZp S m~ҹ TTC0mUW B8#5V#;D^?!;~X6sd>0 stCfl *0'< 2ZĤ+$3)(vmo`:HCy߫[*'? rg;*RWXYXrۏ{/ {YYX̟<Ғ~Nmnc`eaqfw^^ŸDsqۺ0'e$"\#E1CnĎ~J,,AaUw^4I%Pu Q33{0i1TGgwy}%%'R  = 3G%p0 JRo5Ȇ0IĦmykxT_}(^yKs>i_%n=q4e-M¤D! , I)*')Ed]PR A:!zrbw %6"G(d$["JFhaQP`p%†/BFP\cU ?TtW/pG&OtDa_sylD'M q tc b2DM : d% 4%s) uE3 YUtږD$JiM^%o/rvl9'L;99% i9 C "B BDs ^Xf}$P {L?P O4 E咛V$dJ#)pV$! , IiRͧ"Jd] RZN*P*;$P{*N\EА!1UO2D _r6Ib H8 B; "'ZtbK#C'Kw}?Kiz6:xKAC&}9tz\ \D5;x Qd( KW  MBIڈM=ˤs⸽8DaJ`@LG! , IiRͧ"Jd] RZN*P*;$P{*N\EА!1UO2D _r6Ib H8 B; "'ZtbK#C'KGziz68}z~%XK9:0}% tz\Blc LbQ   lj ųKň x(țPX ,ւ|/"! , IiRͧ"Jd] RZN*P*;$P{*N\EА!1UO2D _r6Ib H8 B; "'ZtbK#C'KGziz68}z~%:A/ C} u\ h}b D]=  V)  ڊ9CDK Ku *00StD! , IiRͧ"Jd] RZN*P*;$P{*N\EА!1UO2D _r6Ib H8 B; "'ZtbK#C'KGz z5 C: A/ C}u\ Eh}b6[=Wx&)I9Ԭ@oCT?Kd]B76ЫD! , IiRͧ"Jd] RZN*P*;$P{*N\EА!1UO2D _r6I ƀH03hոaj U {CIkmbK#cK8 {a8nV:/q:M Cu~Ehk6 [_6P.]6!)V! , IiRͧ"Jd]U RZN JjN2sK6 dI)  LHWG 6 KX젱.6d~zhuur/6 X5I;_t O#E {O9V94;VC/ 6Ø~*'MonbX:~]+V*mK_OrKN@.d~qЦDB֋ 5D;mono-tools-2.11/webdoc/skins/mono-external/images/slide-toggle.png0000664000175000017500000000573212225357752027322 0ustar00directhexdirecthex00000000000000PNG  IHDR"o& pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxܓAj@Wz,UrMdVkBV%Wp&9Jg)xVRba3c0S}|?[5AH ]M&$5z00p&P  1h"t>a#ݴqȡI{o!GXs Dϥ#dP!B9QcX0JնK"d Л#m<`X1A'BWI"p`#HUe"%fWiC@LXr%"p6#d ?.bc.[  N  82rA&I @ g<+`QPZ" [ĈkUn"؈&644 j'XAz1& 6j"P`x9֡8`@5{Plp I\ @@:e#g @o"8mL6R;Hn4)p {p {n@~I,p7b59b2%0F,7217Ϝo#d;ؚT@0BlƂ5 f Q,+aDp?+Īl#أl@' F88pp_P’.8 F*Di.ˌT71Ir>=vт[`@WTX$q.2/c5dp)r~pۤ#rzӬe~K)~FtraВU샄V* MP1(;2\T 2'慫͒44M&u'+X^ p=%bP! 7Ԍ 2J0p ]* d.8z0O "Dw"d,_QHfL@G0 jG`` "9 0E`T9D~ءP("#5H$ _+頝Q0< `)w|#1`)dRGDC@jZ&6nz 8IrL:v~3 @JЂMBІ:D';mono-tools-2.11/webdoc/skins/mono-external/images/print.png0000664000175000017500000000475312225357752026101 0ustar00directhexdirecthex00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleHard DriveO2tEXtAuthorLapo Calamandreiߑ* )IDATh[l\3s.{^|Y_'΅p"HqP*^@jiU KZU}KyUCE*Z&)H$%!B'ڻ{Ξî_։CS Rٳ3ߙof,FFF"C4W4 Xi\p5 Znݺ"ݻw /phPv};Nܶu=Bςk[XkOpG'K{oȈyH@XheÆA}p)%8JIgbH)RZWGGbsC:$D}zƭ½D)dEt{ZN$S xw~&5 !ZyaN<b݆u\k6]#Aww7ZkRʫ?1`Й'U T! Oe"s9bqcӦMN&why^1h) L&s !ߏ}u&&t-Ş4V^C֒ʤnLLLkׯKk )@_n:8{"8~x0 b|21Ya6dZ=̧B@OWFR`(Mf`~f-RHʵiYq)v2Y.jMJjRRH)"MwW7#Mth0IY HxWڶhLVDQtIPכ3(Q#""6 8AbBB'x-mP0MߺJI_LZJej 0 DFZ5Μ8=51?Sza\ׅ%"ВJ4%4R!b|oBy^{'iC#-F3*QѡӃHIfZk&'+T*v=&<ӯw^uQ5kfjj! I/.iF#C^piQXZcZzEI4\&>M/c}^^|[$J._ 1FQ.WHgsLRmwPKgj^뺗۾n~..''RKA(gXkeW@D;ﺳ΅.{%톇yc1Z d1BjZd|I)M8lDb֓Pe:hQClUgHۯ͓H"s=`4RiiQ`P=LlÏ;s6J}Kvu3 M$|.;ӎ=72YmT֍yվid\n9抈eŴ"JK$iDк"Qj=C5RК+BP=TYn8ɊHc|ǎӥRJjꄔrWW*36R9XaնO$Kڥ%utttቓev V U+VW4 0IENDB`mono-tools-2.11/webdoc/skins/mono-external/images/mono-logo.png0000664000175000017500000002327412225357752026652 0ustar00directhexdirecthex00000000000000PNG  IHDR]p|C|+bKGD pHYs  tIME92 IDATx}yU=ӳe&$3 كPWEp *{ aI$H LV8LLwOwW~TթS==x2]]Uw+kPJNB~A9U:R@׃xp v ߛǀˣ}n<ӑ݀oG3DG|+^{-'x'O23MMMd^ue`w `?Te*RCCCYV^t)O~ڷodCCCT*,JT*`fJR)J&{$@eYdJR2׃b%"ضH)FFF~TbmK33"K""Y*d2i R&q&O,ΝODOdڵݻw'dj``.LNQ%)a" &UAD(9% o( W*LJ j 6+[]_3Xa$fN'OI%* #e H)m 7J5k3cÆ b ˲|lׅ3}UzZ=A3eu֬Y曎8;ks"WT z;~dF!DN1oB8m;B9m4"* T,8 "ZIDSk|xJ 6ty[SS.%;MQJ9V?Y4棥E444Xl !眃#w )TUѻ+;Υ cT*Na\*m bW!u+N[\|׬YC!З,YBd2}eŋD`Y{ɟT;RRU~?f@|Q +r%D_3(W!RBd2iI)*HMcl;U@ K@!arO1䞎`V*3};;t.r%V1 )@$Xmٍd2mW]8XIj?A̰6k".~߉pvj#IBL%p8ql y6[Bq]+ģo(DyU>3eZ%t6BcW;&y0fFfn7]ZzﻎqWݍR1RPJ^Bp9vZQ:}<{ O.*{ ;Zo'&:Ưs?.OYюIGe6 b8JygH9 5/Nr\*F\थҒ#U9jیg|4ҟJyTVҽ./TeҖO *m[npN?T/C/x);g`[.f* Ί%3 jznJ<ҫ<3L뮻 F4,WhSy4#^mvLj@۴ 67SOE3c0hFh Y`(V!~Rቧ"/1++\/Q#{>teu3<O$"=- \?=MO|Q?&lh^g(hɐ[3RPca% H˫~._ǧOJܸm>?jxʝ/ν2mАIUrTz {\*lQuJ4ᚽb3ii,h٧[iÊe"ܶɸ'#/a_vc&pLY1 ? z$1wdmcN ^0| O*׿(O%6T/(_EI/1):}hGC&,J̕w2+Ϝsظe~?aǞ'1m2ϼf UxU SWȤIF'l,XZ&fE8 ܱ>KZ|Ϩ8>%ޤ8VcL#8W6~I\'j ]$Pg9RzLzh)q^^X>,!cN=3'‘_JǑkGAJix=>I98k2h`p7-,f6_/dCt?NU85.ʭ,c~8+etgpFFg[":b[ns#Xyf8ƏdoL:\)1PG\j^qc܀yG p.%إ3oE!1ٔp8^cl19>97aA {gWϕ!kJv;>KgLJ"< FATʹ `~x5Քh >&C5x>N X?wuaF X$]Jů}5 x7lQՌP|{` *BG=QZ1qp:Wƶ@fQ!-=ؾ{2S4$Pu[aTߕ4." /,Œ+[o?߄lTpÞoj3&Ă DBkoD3 ~=MU4LG5 @J'e4fR8u\a8[<[r^AlB.{%3gR j֌eF1\F*F#e`Iy;AS&+{ e+=jėv7]^l=h磀CCL1E_ dqWF6W ^6 pk,G'@1[|Iw rzrHvd _&eİ.҄_z:v|^ FaY¥N3+.\hUFB`Iw5Ϣ/> s݃^Je,Kl,iC<6mmeYa,MITƋQ3#P/>vv ͗P(9nI U[W5?0qvBjllt: % r}p ŀ]@g3+O=(Mq/ԃA5!@ x[ 6+F~ M1eYBP"1)~ɋqXV?J`:PAcV2_47/ s{_PH ^إDrHv l(Md2I^ Ę@w*xV\&)̌ۆo>r͝֏Ap DC2)K}By yW^w? 5B4Cw^zX}[4Ę^t0 ʹ^|!ahc;X6*?{ N:-ֻ [JQ*6N>}6ك!,V%t,Pn) Nf]0|JӘ={سgՑY?[qT/c@_iWhW~tuǔ X}bu<4fR^!"ЫtD[2g,mnV?!L\ B"!^Ĩ*2 alݼ#E OQ_a`0z ˯7b@ք7,EH0nxSxO㮈;LKaQV:DzL:UJ/P%{ 7"?=2_v')xxN @ܹhlls>`ttEe\6vaٲez@o?2 hoo/hDs[6`N{gnl6za^LIm٨iTrtwwcx{ߋM ɧ+>,nבq)i&Û/ēO?tt L>X7oƇ>aYaۋ/bݿ'tǁ8xGPM7K|+ƍ=`9 ܕɏx?|Rf<# 7.=/۷inڗ 8x YAh(~j*\;Y5uЭ>yACc9 .ʭ@ ynҾ}HF{/)H]z ]^|K-#%^“МǑW^ufnC;h‰z]ų>)%2QAUqCD*roPaf`$7;6[F$|ȘM* $^ z0yŒgu+W7>X 2~SNFTҊs)zUxb&}3> z.^ '@)C_{t#- s<88ҙzcR LFK'M i"dhm2dү.m^PX } jV)FmimIJEÌ _?dO*PQ2s|c+/dٹli)͐:BHJ?hJ],l^|dYB4N=IDATF:z*roׯS3LnEsª 2|׹6m*,Yhb]s- %|nĐniWwAQ?bqRvi˲j>c/<ȣ³Ad*bX6# R+pCb=Q_tT,"EVd2fm-Bd12R |dd F>? "eq%%Fһ{ Br  1 5hھ};͟_!ь+8bl۩)1 b7P:ܖͅ 8gE \R}0/#tRs8[+̬R6e#/G~ w_! 6<.sGe+k6ª(iQkx{esm63KWXXD,kw]*ԩS1oAvp7ZcnAE/S%l+T D &}`?B$F ۶R#J^5`+6L$m2⸍?l6ٳXS6^i#Zl͡`LD(D< 0ǃK%HQ0]ɭ7׹9=gsbqHJ9)Q۴cn  1HL:e%EyxN-x &d8cdd`T:(f<3i@D$z"jJ$GM0t]f-Tg#寳ܦb8d۶/yf.y梞T|ioH$ D>nIץ Afv/mlq'8NV)WJ+s, % !VgYVRay )2Cr6 ,RVJRTHVFb1-OQЮbZ3df[fdkP Ddy} -5ei:Q+VBJW7߭)wސ_?kke?J5IENDB`mono-tools-2.11/webdoc/skins/mono-external/images/native-browser-icon.png0000664000175000017500000000331012225357752030626 0ustar00directhexdirecthex00000000000000PNG  IHDRaiCCPICC Profile(UoT?o\?US[IB*unS6mUo xB ISA$=t@hpS]Ƹ9w>5@WI`]5;V! A'@{N\..ƅG_!7suV$BlW=}i; F)A<.&Xax,38S(b׵*%31l #O-zQvaXOP5o6Zz&⻏^wkI/#&\%x/@{7S މjPh͔&mry>k7=ߪB#@fs_{덱п0-LZ~%Gpˈ{YXf^+_s-T>D@קƸ-9!r[2]3BcnCs?>*ԮeD|%4` :X2 pQSLPRaeyqĘ י5Fit )CdL$o$rpӶb>4+̹F_{Яki+x.+B.{L<۩ =UHcnf<>F ^e||pyv%b:iX'%8Iߔ? rw[vITVQN^dpYI"|#\cz[2M^S0[zIJ/HHȟ- Ic'P(,ϔjV("$MÎ#c.[z!)riZajTQ'3TiPDPX9@ܲ<1@b5RDe%/Q@#Qa)H; E6G b^R/_AmQNR vJT!~G $Iy@09>1q$_>eQZ|7B`YY,Dh+|~~{ %M=K7yP׳V.=^:CYja(@@s瘮|ТabD B,~,2=9^O""E"6uЋ7ZKwc.Zs9l9qe33Оfip >yP74J{QA_CuB9Qj|~T@IENDB`mono-tools-2.11/webdoc/skins/mono-external/footer.html0000664000175000017500000000000712225357752025142 0ustar00directhexdirecthex00000000000000 mono-tools-2.11/webdoc/skins/mono-external/common-extension.css0000664000175000017500000001240412225357752026776 0ustar00directhexdirecthex00000000000000body { background-color: #ffffff; margin: 0px; padding: 0px; font-family: Verdana, sans-serif !important; overflow-x: hidden; } .HeaderTable { border: 2px solid #99aadd; } body, td, th { font-family: Verdana, sans-serif; font-size: 12px; color: black; } .SignatureTable, .MemberSignatureTable { border: 1px solid #DDDDDD; } .Footer { border-top: 2px solid #E5E5E5; padding-left: 1em; } .Footer hr { display: none; } h1, h2, h3, h4 { font-family: Verdana,sans-serif; font-weight: bold; } h1 { } h3 { } h4 { } .MasterNamespaceLink a { font-weight: bold; text-decoration: none; } .MasterNamespaceDescription { margin-left: 2em; } img { border: 0; vertical-align: top; } .copyright { border:1px solid black; padding-left:5px; padding-right:5px; padding-top:5px; padding-bottom:5px; background-color:#BEBAA8; font-size:9px; margin-top: 10pt; margin-left: -15pt; margin-right: -15pt; } .important { padding-left:2px; padding-right:2px; padding-top:2px; padding-bottom:2px; background-color:#000000; color:#ffffff; } .menu { font-family:Arial, Verdana; font-size:12px; font-weight:bold; } .navbar{ color:black; font-family:Arial, Verdana; font-size:10px; border-bottom:1px solid #000000; border-left:1px solid black; border-right:1px solid black; background-color:#efefef; padding-left:2px; padding-right:2px; padding-top:2px; padding-bottom:2px; margin-left: -15pt; margin-right: -15pt; } .topframe { background-image:url(images/backbig.png); border:1px solid #000000; background-color:#BEBAA8; margin-left: -15pt; margin-right: -15pt; } .chapter { font-size:14px; font-weight:bold; color:#444444; padding-left:0px; padding-right:0px; padding-top:0px; padding-bottom:0px; } .table { padding-left:2px; padding-right:2px; padding-top:0px; padding-bottom:0px; background-color:#efefef; border:1px solid #c0c0c0; } .elementOn { color:#a40000; } .element { color:#0000a4; } .code { font-size: small; font-family: "Courier New", Courier; line-height:110%; } .box { padding:15px; font-size: small; background:whitesmoke; border: solid 1px silver; } .console { border-style: solid; background: whitesmoke; border-width: 1px; padding: 2pt; margin:15px; } .headerlink { vertical-align:bottom; } a { color: blue; } a:visited { color: blue; } td a { text-decoration: none; } .HeaderTable a { color: black; text-decoration: underline; } div.Content { margin-right: 1em; } div.related ul { list-type: none; padding-left: 1em; } .native-browser { font-family: "Lucida Grande", Geneva, Helvetica, Arial, Verdana, Sans-Serif; display: inline-block; color: #333 !important; text-decoration:none !important; font-size: 88%; padding: 4px 10px 4px 10px; border: 1px solid silver; border-bottom-color: #bcbcbc; border-radius: 3px; background: #f2f2f2; } .native-browser:hover { background: #ddd; color: black; } .native-browser img { vertical-align: center; margin-right: 3px; } body, div { margin: 0; padding: 0; } img.toolbarsep { border: 0 none; margin-bottom: 1px; margin-top: 1px; padding-bottom: 3px; padding-top: 3px; vertical-align: middle; } img.toolbar { border: 0 none; margin: 1px; padding: 3px; vertical-align: middle; } img.toolbar:hover { border-color: white #B1A598 #B1A598 white; border-left: 1px solid white; border-right: 1px solid #B1A598; border-style: solid; border-width: 1px; margin: 0; } img.toolbar:active { border-color: #B1A598 white white #B1A598; border-left: 1px solid #B1A598; border-right: 1px solid white; border-style: solid; border-width: 1px; } #login { float: right; padding: 5px; position: fixed; right: 0; top: 0; } #rightSide { float: right; padding: 5px; position: relative; right: 0; } #banner { background: url("/mdocimages/headerbg.png") no-repeat scroll 100% 50% #679EF1; border-bottom: 1px dotted #3363BD; height: 40px; } #header { color: black; height: 40px; margin-bottom: 0; padding: 0 0 0 15px; position: relative; width: 50%; } #header h1 { color: white; font-family: arial,helvetica,verdana,sans-serif; font-size: 22px; font-weight: bold; line-height: 1.8em; margin: 0; } body, div { border: 0 none; font: inherit; margin: 0; padding: 0; vertical-align: baseline; } html, body { height: 100%; } #side { border-right: 1px solid black; float: left; height: 93%; overflow: auto; width: 20%; } #main_part { height: 100%; } #content_frame { height: 94%; width: 99.8%; } #content_frame_wrapper { float: right; height: 100%; margin-right: 5px; margin-top: 10px; width: 79%; } #sidebar_container { margin-top: 10px; font-size: 8pt !important; } .tree-label a { color: black !important; } .tree-label a:hover { background: none repeat scroll 0 0 #DFDFDF !important; border: 1px solid grey !important; color: black !important; padding: 1px !important; } .tree-label-selected a, .tree-label-selected a:hover { background: none repeat scroll 0 0 highlight !important; color: highlighttext !important; } #rightSide { font-size: 8pt; } #fsearch_companion { font-size: 8pt; } #fsearch_window { font-size: 8pt; } mono-tools-2.11/webdoc/skins/mono-external/header.html0000664000175000017500000000107412225357752025101 0ustar00directhexdirecthex00000000000000